«前の日記(2003-08-06) 最新 次の日記(2003-08-08)» 編集

Matzにっき


2003-08-07 [長年日記]

_ [仕事]出張

茨城県ひたちなか市へ出張。あまり出番なし。やっぱりおまけだったか。

夕食をごちそうになる。タイ料理。おいしかった。からかった。おなかいっぱい。 しあわせだけど、ちょっとくるしい。

_ [OOP]オブジェクト指向の神髄

なんか以前にもどこかで書いたような気がするけど、私がなんの修飾もなく 「オブジェクト指向」と表現する時には、ほとんど「オブジェクト指向という考え方」を意味するつもりでいる。

そして、その最低限の条件は「アイデンティティがある」ことである。 アイデンティティとはある「オブジェクト」と別の「オブジェクト」が、 同じかそうでないか判定できる、という意味だ。

たったそれだけのことならば別にオブジェクト指向言語を使う必要はない。 Cのstdioだって、UNIXのシステムコールだってオブジェクト指向だ。 どんな言語、どんな環境でプログラムするかではなく、 プログラムする対象をどう捉えるかという考え方が重要なのだ。

でも、これだけではあんまり嬉しくない。

そこで、あえてもう一つの条件を付け加えるなら、 「あるアイデンティティがある存在(=オブジェクト)は自分に対して適応可能な処理を知っている」こと、 つまり「動的結合」とか「ポリモルフィズム」と呼ばれる概念を挙げたい。

この二つがあれば「オブジェクト指向(という考え方)」は十分である。

よく、オブジェクト指向の三要素として

  • 動的結合
  • 継承
  • カプセル化

のみっつが挙げられるが、「継承」と「カプセル化」はあくまでも「あると便利なもの」であって、 必須ではない。そのことは

  • オブジェクトによるカプセル化がないCLOS
  • クラスがなく継承もないSelf

が十分オブジェクト指向言語であること、 つまりオブジェクト指向という考え方に従ったプログラミングを十分支援していることからも分かる。

でもって、そういう「ファンダメンタルなオブジェクト指向」に付け加えて、

  • クラスベースのオブジェクト指向とか
  • カプセル化重視のオブジェクト指向とか

いろいろなレベルがあって、人によってどのレベルで「オブジェクト指向」 という単語を使っているかが異なっているので、 過去長らく発生した不毛な論争の原因になっていたのだと思う。

それよりなにより、誰もが自分の使っているオブジェクト指向言語から学んだ「オブジェクト指向」に こだわりすぎていて、一般化・抽象化が行われなかったことが不幸だと思う。

いや、私もけっして人のことは言えないのだが、私自身は

  • 最初Smalltalkをかじり、
  • Eiffelで静的型と多重継承に目覚め、
  • CLOSをかじってオブジェクト単位のカプセル化のない世界を知り、
  • Selfをかじって継承のない世界を知り、
  • ふたたび動的型と単純継承(+Mix-in)のRubyの世界を構築した

という経緯があるので、比較的オブジェクト指向という考え方を一般化しやすい立場にあるのではないかと思う。

本日のツッコミ(全2件) [ツッコミを入れる]
_ とも (2003-08-09 02:36)

やっぱ、アイデンティティは必要でしょうか?<br>アイデンティティがないとか、書き換えの度に<br>アイデンティティが変わるようなのとかはありでしょうか?<br>(関数型とか論理型とかに付ける場合にこんなのありそう?)

_ ゆあい (2003-08-09 03:48)

↑の投稿はテスト書き込みです。<br>消してくれれば幸いです。>matzさま<br><br>>>ともさま<br>>やっぱ、アイデンティティは必要でしょうか? <br>無いとできないとは私は思いません。純粋なオブジェクト指向では、そうするしかないでしょうし。<br><br>>書き換えの度にアイデンティティが変わるようなのとかはありでしょうか? <br>>(関数型とか論理型とかに付ける場合にこんなのありそう?)<br>項書き換えのたびに変わるものをアイデンティティとは言わないのでは?<br>ある種の活動期間の長いオブジェクトは、アイデンティティといえるものを持っていると考えても良い。という程度に考えればどうでしょうか?<br>(曖昧な答えですみません)<br><br>ちなみにオブジェクト指向するに必須な機能は多様性だけだと考えています。(カプセル化と継承はねー)<br>型総称があれば多様性を持たせることができるのでオブジェクト指向するのは不可能ではないと思います。(関数型言語CleanのIOライブラリ名はClean Object I/O Libraryといいうぐらいですから。ただ関数型の思想とオブジェクト指向の思想は相性が良くないかもしれませんが)

お名前:
E-mail:
コメント:
[]

«前の日記(2003-08-06) 最新 次の日記(2003-08-08)» 編集

track feed Matzにっき Creative Commons License This work is licensed under a Creative Commons License.