れいんぼー日記

日々思ったことを徒然と。
マスゴミの悪事を暴こう

オブジェクト指向

2005年05月16日 | プログラミング・ソフトウェア開発
オブジェクト指向とはなにか?
を理解している範囲でまとめてみようとおもう。

オブジェクト指向は奥が深いので、端的にまとめることはカナリ難しいが、
とりあえずやってみる。

まず、定義。

オブジェクト指向とは、抽象と具象を表現する、汎用の整理術である


今日ある様々な技術の礎となっている。

■オブジェクト指向の5大要素
・カプセル化
・ポリモーフィズム
・継承
・クラス
・オブジェクト


ある具象をオブジェクトとして捉え、オブジェクトとオブジェクトの共通する部分を抽出し、
クラスを作成する。

また、そのクラスと、他のクラスとの共通部分を抽出し、スーパークラスを抽出する(継承

抽象的なものは、概念を捉えることには判りやすい。が、これだけでは実際のものを表さないので、動かすことはできない。
具体的なものは、実際のものを表すが、1例でしかない。
双方が用意されていることによって、具体的に理解できて、他のものとの関連を導き出し、パターン化できる。

よって、オブジェクト指向とは、抽象と具象を表現する、汎用の整理術なのである。

現時点での私の答えはこれである。

そのほかの要素。

カプセル化
これがもっとも重要な概念だと思っている。
オブジェクトを捉える際に、何を外部に公開して何を公開しないのかを決める。
オブジェクトの捉え方によって、プログラムの複雑度は変化する。

ポリモーフィズム
この要素はカプセル化の次に重要で、行為の概念は同じでも振る舞いは異なることである。
たとえば、「働く」という行為は、プログラマは「プログラミング」、営業は「営業活動」とという具体的活動を行う。

プログラミングで言った場合は、I/Fをあわせた関数ポインタ。

■抽象と具象、どちらが先にできるか?
具象が先である。そこから、抽象を発見していく。
抽象から作ってしまうと、やはり後々無理が生じてくる。
初めからまともな抽象を捉えることは難しい。だから、リファクタリングが必要になる。


■非オブジェクト指向言語でもオブジェクト指向は役に立つか?
ずばり、C言語でも役に立つか?ということだけど、この概念は役に立つし、
クラス、継承以外は無理なく出来ると思っている。

ファイルをオブジェクトとみなし、そして、staticを使えばカプセル化を実現できる。
ポリモーフィズムは上記でも述べたとおり関数ポインタで出来る。
継承もできるかもしれんが、無理がありすぎると思っているので実現したことはない。

■他の考え方は?
アスペクト指向、エージェント指向とあるが、これらはオブジェクト指向の上に成り立っている。
よって、オブジェクト指向を学ばないで、これらの考え方を学ぼうとしても無理がある。

■まとめ
・オブジェクト指向とは、抽象と具象を表現する、汎用の整理術である
・もっとも重要な要素はカプセル化。
・非オブジェクト指向言語でもクラス、継承以外は無理なくできるし、この概念は役に立つ。

うーん、やっぱり端的にまとめるのは難しい。。。

まぁ、とにかく、しっかり身に付けばきれいに整理されたプログラムが書けるようになると思う。

■読んだ本
オブジェクト指向でなぜつくるのか?
オブジェクト脳の作り方
あとは、今月号(2005年6月号)の日経ソフトウェアの特集もまとまってていいです。
その他色々。。。

■参考になるWeb
@IT:ここから始めるオブジェクト指向
@IT:オブジェクト指向の世界
この作者はオブジェクト指向と哲学を結びつけて考えてます。
なるほど。クラスはイデアか。

最新の画像もっと見る