読者です 読者をやめる 読者になる 読者になる

オブジェクト指向的機能????

とある場所で

Java/C++/C#オブジェクト指向的機能というのは、数学的なモデルとしては「包含関係を持つ集合をプログラマが任意に定義できる機能」と言える

というのを見かけて、
????
これを一読して直感的に理解できる人はいるのだろうか?
僕がヘボだからかもしれないけれど、出来る人がいたら素直に凄いと思える。
僕には出来の悪い翻訳書の直訳かしら、くらいの印象しかない。
包含関係を持つ集合を任意に定義できたらオブジェクト指向的なの?
そこからどうオブジェクト指向につながるの?


後に続く文を読むとオブジェクト指向的機能とは「継承」「隠蔽」「多態性」による抽象化による自然な表現のことだと読み取れるのだが、
違和感がある。
果たして、これらを任意に(自由に)定義できる事が「オブジェクト指向的(機能)」なのだろうか?
平たく言えば、これらを用いる事はオブジェクト指向には必要な機能なのだろうが、
これらを用いたからといってオブジェクト指向的になる訳では無かろう、ということだ。


加えてオブジェクト指向がどうのこうの、という際にキーワードを羅列することは本当にどうしようもなく愚鈍な行為だと思う。カプセル化、保護、ポリモルフィズム、オブジェクト、メッセージ、サブタイピング、再利用、パターンだとか、並べ立てられるのは耳にたこだ。


少なくともなんたるかを示すには自身の言葉で何かを伝えられなければならないんだろうなぁ、
という感じがする。
個人における(ないしは全体における)オブジェクト指向の定義とかそんなものは実はどうでも良い、という気がしてならない。


ということで、自分では言い表せないけれど、
Exceptional C++ Styleの

オブジェクト指向とは、1つの実体の凝集度を強めながら、複数の実体間の結合度を弱めることで、インターフェースを実装から分離することに尽きる。

を思い出す。
凝集度と結合度は構造化時代からの重要なキーワードだし。
少なくとも継承などの「機能があること」を「オブジェクト指向的機能」と形容するのは違和感があるなぁ、とか考えてみる似非プログラマでした。