私のプログラミングでは何かが表示され続けていますが、2つのことはある視点からは同じですが、別のものとは異なります。列車で結ばれた鉄道駅のグラフを作ったとすると、VertexとRailStationのクラスは時々同じで、時にはそうではありません。対応の適切なオブジェクト指向モデリング
だから、私は非常に多くの鉄道駅や列車を表し、グラフを持っている想像してみてください。次に、このグラフを別のオブジェクトに渡して、いくつかの頂点を削除し、対応する鉄道駅を消滅させます。
私は、彼らがいないなら、頂点の鉄道駅「プロパティ」を作成する必要はありません。また、問題は対称的です。レールステーションを消去すると、対応する頂点が消えてしまいます。モデル化または対応するための適切なOO方法は何か。私はいくつかのサポート方法やクラスを書いていくことで、もう少しマイルを稼ぎたいと思っています。
私が思うに、私は現在、Smalltalkのプログラミング言語を使用していますが、問題は本当にスモールトーク固有ではありません。 Smalltalkではコールスタックを調べるようなクールなやり方ができます。これはこの文脈で役に立つかもしれません。
更新: まあ、RailStationsはVerticesではありません!彼らは?
[OK]を、答えを求めて、私たちは、実際のコードを考えてみましょう。子供を持つ人をモデルにしてみましょう。それは一番簡単なことですよね?子供たちは両親も知っていなければならないので、二重にリンクされたツリーのようなものです。子どもから親を解散させることをより容易にするために、私は、親と子の間の関係を親子関係のモデルとして関係としてモデル化する。
だから、私は親>>のremoveChildを実現することができます。おそらく、だからこれ
removeChild: aChild
(parent relationshipWith: aChild) disband.
のように、親は関係なく、子供たちのコレクションを持っています。しかし、各関係は子供にに対応します。関係とに子を削除する必要があります
parent children removeAllSuchThat: [:e | e age < 12]
:今、私はこのようなことをしたいです。
ここで、関係と子供はある意味で対応しています。では、私は今何をしますか?私は間違ってはいけない、私は完全に私が関係クラスを導入せずに問題を解決できることを知っている。しかし実際には、両親と子供は実際に関係を共有しているので、それをモデル化して、それを使ってダブルリンクの解散を減らすのはなぜですか?あなたの問題のドメインで
RailstationsはVerticesではありませんか?あなたの質問では、頂点とrailStationsがオブジェクト指向で異なるエンティティであることを意味するものは何もありません。違いは、VerticesはRailStationsの視覚的な表現にすぎないということです。そうですか? – zidane