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

Matzにっき


2003年08月07日 [長年日記]

_ [仕事]出張

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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