スレ立てるまでもない質問はここで 134匹目

このエントリーをはてなブックマークに追加
991デフォルトの名無しさん
>>987
複数のクラス(たとえば A B C D)があり、それらクラスのインスタンスが
相互に参照するグラフ(ネットワークとも言う)で構成されるような
オブジェクト指向設計は特殊ではないし、むしろありふれているといえる

クラス間の関係(たとえばスーパークラスとサブクラスとの間の継承関係)と
インスタンス間の関係(たとえば全体と部分との間の複合関係)の違いを
ごっちゃにせず、意識的に分けて検討したほうがいいと思う
具体的には、「インスタンス化する時にthisを渡して、....」という対策案は
インスタンス間の関係を対象にしたものであり、「必要なクラスを整理するか
全てのクラスを....」という対策案はクラス間の関係を対象にしたものであるから、
これらは(どちらかを選ぶというような排他的な関係ではなく)
同時に実施する可能性も考慮して検討を進める必要がある

あと、オブジェクト指向設計で忘れられがちな概念の一つに、
(クラス間の関係における)抽象クラスと具象クラスという考え方(原理/原則)がある:
・ある抽象クラスはサブクラスを持てる(=継承できる)が、具象クラスはできない
・ある具象クラスはインスタンス化(=インスタンスを生成)できるが、抽象化クラスはできない

>>987の例だと A B C D はすべて具象クラスになるけど、
実際に開発中の設計に含まれるすべてのクラスについて、
それらが抽象クラスと具象クラスのどちらに該当するのか一つ一つレビューすることを勧める
ここで、抽象クラスと具象クラスという分類は排他的関係だから、
もしも設計内にどちらにも該当する、たとえばサブクラスを持ち、
同時にインスタンス化もされるようなクラスが存在するならば、
クラス設計に何らかの問題があると推測できる