モジュール化されたCコードとUMLオブジェクトモデル間のマッピング(4)-FAQのまとめ


次はばらばらに作ったメモです.
1、なぜ双方向の関連は往々にしてデザインの悪い味なのか.
多重性の観点から,2つのクラス間の関係が双方向である場合,各クラスは相手を知る必要があるため,両者は多重化できない.単方向関連付けが多重化可能なクラスを識別するのに役立つことを示します.
 
2、集約組合せ方式は対象ライフサイクル管理の問題に遭遇し、どのように解決しますか?
例えば、A_Create(B_Create()->IA,B)、すなわちクラスBがクラスA内部で使用するためのインタフェースIAを実装する場合、IAのライフタイムは誰が管理するのでしょうか.一般的な方法は、IAにDestroyインタフェースを追加することであり、AはIAを解放することができる.しかし、これは原則に反して、一般的なメモリ管理は誰が誰に釈放を申請したのかです.私が知っているもう一つの方法はLinuxデバイスドライバの方法を参考にして、IAをグローバル変数として定義することです.「ライフサイクル管理は大きな課題です.」後でゆっくり検討します.
 
3、汎化と実現関係をどう区別するか
汎用化(継承)は抽象クラスに対応し、対応インタフェースを実現する.
 
4、         ?
             ,    :
          ,              ,             。      :
(1)          。  A  B    , A B       attribute;  A       B,   A     attribute B b*。 
 (2)        。  A   B,    B    。 A   B     :   B    ,   B  A    ,   B       。

 
5、  or  /  ,      

異なる角度の理解によって、設計上は異なる選択をしますが、
継承を慎んでください.
(1)継承は過密な結合であり,親が変化するたびに子も変化し,開閉の原則に反する.
(2)継承はマルチステートをサポートせず,親と子の関係はコンパイル時に静的にバインドされる.
「したがって,インタフェースのみを継承して実装を継承せず,組合せによりコード再利用の目的を達成することが一般的に提唱されている.
btw:C言語のオブジェクト向けメカニズムの実現については、必要に応じてC言語で開発されたコードの複雑さを効果的に制御し、簡略化することを目的としています.
しかし、需要が十分に簡単で、コードが十分にはっきりしている場合は、鶏を殺すには牛刀を使う必要があります.