なんか以前にもどこかで書いたような気がするけど、私がなんの修飾もなく 「オブジェクト指向」と表現する時には、ほとんど「オブジェクト指向という考え方」を意味するつもりでいる。
そして、その最低限の条件は「アイデンティティがある」ことである。 アイデンティティとはある「オブジェクト」と別の「オブジェクト」が、 同じかそうでないか判定できる、という意味だ。
たったそれだけのことならば別にオブジェクト指向言語を使う必要はない。 Cのstdioだって、UNIXのシステムコールだってオブジェクト指向だ。 どんな言語、どんな環境でプログラムするかではなく、 プログラムする対象をどう捉えるかという考え方が重要なのだ。
でも、これだけではあんまり嬉しくない。
そこで、あえてもう一つの条件を付け加えるなら、 「あるアイデンティティがある存在(=オブジェクト)は自分に対して適応可能な処理を知っている」こと、 つまり「動的結合」とか「ポリモルフィズム」と呼ばれる概念を挙げたい。
この二つがあれば「オブジェクト指向(という考え方)」は十分である。
よく、オブジェクト指向の三要素として
のみっつが挙げられるが、「継承」と「カプセル化」はあくまでも「あると便利なもの」であって、 必須ではない。そのことは
が十分オブジェクト指向言語であること、 つまりオブジェクト指向という考え方に従ったプログラミングを十分支援していることからも分かる。
でもって、そういう「ファンダメンタルなオブジェクト指向」に付け加えて、
いろいろなレベルがあって、人によってどのレベルで「オブジェクト指向」 という単語を使っているかが異なっているので、 過去長らく発生した不毛な論争の原因になっていたのだと思う。
それよりなにより、誰もが自分の使っているオブジェクト指向言語から学んだ「オブジェクト指向」に こだわりすぎていて、一般化・抽象化が行われなかったことが不幸だと思う。
いや、私もけっして人のことは言えないのだが、私自身は
という経緯があるので、比較的オブジェクト指向という考え方を一般化しやすい立場にあるのではないかと思う。
やっぱ、アイデンティティは必要でしょうか?
アイデンティティがないとか、書き換えの度に
アイデンティティが変わるようなのとかはありでしょうか?
(関数型とか論理型とかに付ける場合にこんなのありそう?)
↑の投稿はテスト書き込みです。
消してくれれば幸いです。>matzさま
>>ともさま
>やっぱ、アイデンティティは必要でしょうか?
無いとできないとは私は思いません。純粋なオブジェクト指向では、そうするしかないでしょうし。
>書き換えの度にアイデンティティが変わるようなのとかはありでしょうか?
>(関数型とか論理型とかに付ける場合にこんなのありそう?)
項書き換えのたびに変わるものをアイデンティティとは言わないのでは?
ある種の活動期間の長いオブジェクトは、アイデンティティといえるものを持っていると考えても良い。という程度に考えればどうでしょうか?
(曖昧な答えですみません)
ちなみにオブジェクト指向するに必須な機能は多様性だけだと考えています。(カプセル化と継承はねー)
型総称があれば多様性を持たせることができるのでオブジェクト指向するのは不可能ではないと思います。(関数型言語CleanのIOライブラリ名はClean Object I/O Libraryといいうぐらいですから。ただ関数型の思想とオブジェクト指向の思想は相性が良くないかもしれませんが)