何となく。

オブジェクト指向のオブジェクトって何でしょうねぇ。
どこかで、「主体(subject)」と「客体(object)」の後者だってのを見ました。つまり、主体となる何かとの関係を持って、初めてオブジェクトはオブジェクト足りうる、という事でしょう。他の何かとの関連が大前提というのも、なかなか面白い視点です。

では、単独でオブジェクトが存在する事は許されないんでしょうか?
プログラミングの世界では、無いかなと思います。Javaにおいて、mainメソッドを実装したクラスはありますが、コイツは別にオブジェクトではなく、ただのエントリ・ポイントだって解釈ですね。ただ、OOPではメモリ上に確保された実態をオブジェクトとして識別する向きがあるので、VM上にロードされればたとえmainメソッドしかない静的クラスであっても、オブジェクトって呼べるんじゃないかな、とか思います。


でも、実はここでちょっと落とし穴。OOPはクラスからインスタンスを作る事を極意としている、って考えると、静的クラスはオブジェクトと呼べないかも知れないです。動的に生成されるインスタンスこそオブジェクトなんだぞ、って事でしょうか。そうなると、インスタンスを生成する奴は必ずいる訳で、それを指して主体と客体と評するのは、案外良い表現なのかもな、と思えてきました。

ほいで、自分がここでふと思うのは、OOPだけでなくOODとかOOAとかオブジェクト指向って冠を付けたものは結構あるんですが、基本はシステムを設計する為のもの(実装ではなく)なんだ、って事です。OOPが基本ですが、これはスレッド上のメモリのライフサイクル管理とかそういったものを意識していて、次いで出てきたOODは、OOPを最適にする為、または整理された構成を実現する為のデザインを意識する、って感じかな、と思います。そうなると、エントリ・ポイントの存在は前提として置いて良くて、逆にこれを前提としないOOP、OODはあり得ないって考えて良いんじゃないかな、と。


ちなみにOOAだけはちょっと異質で、分析手法なので現実世界を捉えようとしますよね。で、割とココで「オブジェクト指向とは現実世界を写実的に表現しようとしている」って人がいたりするんですが、自分は多分「オブジェクト指向とは、現実世界を抽象化して表現しようとしている」が正しいと思うです。
結果的に、現実世界とシームレスなプロセス設計が可能になるのかも知れませんが、現実の世界はクラスだなんだってもんで表現しきれるほど、単純じゃないのでやはり抽象化しようとしていると思うです。

抽象化した結果をモデルと呼びますが、このモデルを元にOODをするのは多分非常に簡単です。逆にこのモデルが無い場合、OODではどうするかというと、デザイナ(つまり設計者)が自分なりに対象をクラスという単位で抽象化していく訳ですよね。これって分析じゃん、と。


正直自分も専門的に学んだ訳ではなく、本を読み、ネットを漁って、自分なりに考えて、多分自分なりの変なエッセンス入りまくりの状態で理解しているオブジェクト指向なので、これが正しいかどうか分かりません。
ただ、今更オブジェクト指向を語るって・・・なんか痛いなぁ。