2009/02/23

[OOP][C#][DesignPattern]オブジェクト指向(OOP)を習得するために必要なこと+追記

追記:

タイトルを「オブジェクト指向(OOP)を習得するために必要なこと」 改め 「私の静的型付けクラスベース OOP の理解を助けたもの」すればよかったなーという話です。

参考:
[OOP] “オブジェクト指向”の本質
http://d.hatena.ne.jp/sumim/20080415/p1
[OOP] 三系統の“オブジェクト指向”を「北斗の拳」に例えてみる
http://d.hatena.ne.jp/sumim/20080416/p1
Rees Re: OO
http://practical-scheme.net/trans/reesoo-j.html
Yoshiyuki Nakamura / nakayoshix
いわた / iratqq

ところで、やっぱ追記は最後に書くべき?

 

さらに追記:

中の人がどう思っているかと,外からどう思われているか
http://d.hatena.ne.jp/NyaRuRu/20080504/p2


オブジェクト指向言語においてpolymorphism というと,「あるメソッド呼び出し式において呼び出されるメソッドが,呼び出されるオブジェクトの(静的型ではなく) 実行時の型(クラス) によって決まること」を指すことが多い.これはad-hoc polymorphism とsubtype polymorphism の組み合わせであると考えられる.

ソフトウェア基礎論配布資料(6) - パラメタ多相とSystem F

 

 

以下当初の本文:

 

 

オブジェクト指向プログラミング(Object Oriented Programming)以下OOP

 

OOPを習得するには、OOPの三本柱を理解する必要があります。

  • カプセル化
  • 継承
  • ポリモーフィズム

 

恐らく、最も難解なのがポリモーフィズムではないでしょうか。
「ポリモーフィズム(多態性)」という名称からして高圧的です。
イメージの沸きようがなく、とっつきにくく、敬遠したくなります。

 

ポリモーフィズムを理解するにはAbstractクラス(抽象クラス)やinterface(インターフェース)の機能と役割を十分に理解する必要があります。

これらについて理解するのに特に有効なのが「デザインパターン」を学ぶことです。

 

OOPを理解する道程は長いかもしれません。
ここは一つ、取っ掛かりとして「抽象クラス」について学習してみてはいかがでしょうか。

 

デザインパターン紹介―GoF以外のパターンを紹介します―

Abstract Classパターン
(「抽象クラスって何のためにあるの?」という問いに答えるパターンです。)

 

興味が沸いたら、上記ページの書籍(増補改訂版JAVA言語で学ぶデザインパターン入門)が最高の(良)入門書としておすすめです。

各デザインパターンの具体的な説明に簡潔なコード。付加的な情報も豊富です。
Javaの経験がなくてもまったく問題なく読めると言い切れます。

 

 

 

以下余談:

これらは主にJavaやC#などの静的で型付けの強いクラスベースのOOP言語に言えることだと思います。

JavaScriptのようなプロトタイプベースの言語や、P言語系(PythonやRubyなど)ではまた違った話かもしれません。

 

私のようなOOP初学者がOOPを語るのも大変恐縮なのですが、他の初学者の方々の一助になれば幸いです。OOPの習得ってすごく難しいと思うんです。少なくとも私は「そういうことか!」と思えるまでに大変長い時間を要しました。

 

プログラミングができる人と、そうでない人との間には途轍もなく深い溝があるという話があります(プログラマの壁)。「できない」から「できる」に遷移する時には、「ちんぷんかんぷん」から「突然世界がひらける」衝撃的な瞬間を経験します。私はそういうタイプでした。もちろんその先にはまた広大で途方もない「先」があるのですが・・・。

 

少し話が逸れましたが、OOPの習得にも同じように大きなパラダイムシフトが発生するのではないかと私は感じました。それを引き起こしてくれたのが、この本だったというわけです。

 

最後に、偶然にも今まで参考にしたサイト、読み漁った記事のURLを保存してましたので、ある程度絞り込んで示します。

(AOPとかDIとかも混ざってますが)

 

 

参考:

結城浩 - The Essence of Programming
増補改訂版Java言語で学ぶデザインパターン入門
学べるのは、デザインパターンだけじゃない。
http://www.hyuki.com/dp/

デザインパターン紹介
―GoF以外のパターンを紹介します―
http://www.hyuki.com/dp/dpinfo.html

VB.NETとC#でデザインパターン
http://hccweb1.bai.ne.jp/tsune-1/

窓際プログラマーの独り言 -C#の話題を中心に
C#デザインパターン Index
http://blog.livedoor.jp/gushwell/archives/50333227.html

デザインパターン
http://www.tom.sfc.keio.ac.jp/~fjedi/wiki/index.php?%A5%C7%A5%B6%A5%A4%A5%F3%A5%D1%A5%BF%A1%BC%A5%F3#x6f5a638

ぼくにもわかるデザインパターン 第2章
GoFパターン大カタログ ~パターンがみるみる頭にしみこむ~
http://www.ulsystems.co.jp/technology/development_010_01.html

Bug Catharsisデザインパターン
http://d.hatena.ne.jp/zecl/archive?word=%2a%5b%a5%c7%a5%b6%a5%a4%a5%f3%a5%d1%a5%bf%a1%bc%a5%f3%5d

.NETで始めるデザインパターン
http://www.atmarkit.co.jp/fdotnet/designptn/index/

GoFデザインパターン一覧
http://homepage3.nifty.com/satoshis/oo/patterns.html

Object型をツリー構造で管理するTreeElementクラス
http://codezine.jp/article/detail/435?p=1

矢沢久雄の早わかりGoFデザインパターン---目次:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20051201/225570/

デザインパターンの骸骨たち (RE-BONE)
Skeleton of GOF's Design Patterns
http://www002.upp.so-net.ne.jp/ys_oota/mdp/index.htm

デザインパターンの塗り薬
Sample Application for GOF's Design Pattern
http://www002.upp.so-net.ne.jp/ys_oota/mdp2/index.htm

NET Framework 開発者ガイド:高度な開発技術
http://msdn.microsoft.com/ja-jp/library/a493kdy6(VS.80).aspx

Yohta's Object World ~YOHTAのオブジェクト指向研究 デザイン ...
http://www002.upp.so-net.ne.jp/ys_oota/

OGIS-RI OBJECT SQUARE:オブジェクトの広場
http://www.ogis-ri.co.jp/otc/hiroba/index.html

DI コンテナの本当の使いどころ
http://www.ulsystems.co.jp/technology/development_013_01.html

DIコンテナ【Dependency Injection Container】
http://itpro.nikkeibp.co.jp/article/COLUMN/20060628/241982/

AspectDNGで始める.NETのAOP:CodeZine
http://codezine.jp/article/detail/446?p=1

NETでアスペクト指向プログラミング(AOP):アーキテクト360
http://architect360.apricot-jp.com/300/netaop.html

MSDN Magazine & Microsoft News
AOP:コードのカプセル化と再利用を推進するアスペクト指向プログラミング
http://ascii.asciimw.jp/pb/msdn/article/a25_0045.html

 
以下PDF直リンク
 

デザインパターンによるオブジェクト指向分析/設計入門
http://www.shinsahara.com/www/seminar/SRC/DP/Tutorial/all.pdf

デザインパターンを用いたオブジェクト分析/設計技法[基礎編]
http://www.shinsahara.com/www/seminar/SRC/DP/Basic/all.pdf

Acyclic Visitor
http://www.objectmentor.com/resources/articles/acv.pdf

0 件のコメント:

コメントを投稿