質問

私は、関連付け、依存関係、およびそのような関係が UML (または一般的に) でどのように継承されるのか疑問に思っていました。したがって、次のような状況では、次のようになります。

  ┌──────────┐                                        ┌──────────┐
  │  ClassA  │                                        │  ClassB  │
  ├──────────┤                                        ├──────────┤
  │          │─────────"One kind of relation"────────>│          │
  ├──────────┤                                        ├──────────┤
  │          │                                        │          │
  └──────────┘                                        └──────────┘
        ^
       /┬\
        │
        │
        │
        │
  ┌─────┴────┐
  │  ClassC  │
  ├──────────┤
  │          │
  ├──────────┤
  │          │
  └──────────┘

注記:

  • ClassA-ClassC は一般化関係にあり、矢印は実線になることを意味します
  • ClassA-ClassBは[依存関係、関連性、集約、合成]のいずれかにあります。
  • Unicode はクールですが、エディターのフォントを使用するとさらに良く見えます :)

私の質問は、これらの関係がどのように継承されるのかということです。たとえば、ClassA が ClassB に依存している場合、ClassC は ClassB に依存しますか?等

ありがとう。

役に立ちましたか?

解決

あなたは、UMLの質問をしていない、あなたは、より一般的な質問をしています。

何を継承平均?

クラスCは、ClassAクラスのサブクラスです。すべてのプログラミング言語その実装の継承では、クラスCは、ClassAクラスのすべての機能を持つことになります。

は継承をサポートしていない言語では、あなたがにClassAのすべての機能もクラスCの一部であることを保証することにより、適切な継承の錯覚を作成する必要があります。

これは、継承の定義です。いつもそして永遠に。でも、UML図のます。

他のヒント

簡単な答えは「はい」です (実際的な目的では、それ以上のことを考える必要はありません)。

しかし、問題は見た目よりも複雑です。『統一モデリング言語リファレンスマニュアル、第 2 版』を引用:

言葉 一般化 そして 継承 多くの場合、交換可能に使用されますが、実際には2つの関連するが異なる概念があります。一般化は、モデリング要素間の分類関係です。要素が何であるかを説明します . 。継承は、共有の増分記述を組み合わせて要素の完全な説明を形成するメカニズムです。ほとんどのオブジェクト指向システムでは、継承は一般化に基づいていますが、継承は自己言語の委任ポインターなどの他の概念に基づいています。一般化関係に基づいて継承メカニズムを基にすることにより、説明と多型の挙動を考慮して共有することができます。これは、ほとんどのオブジェクト指向の言語とUMLが取るアプローチです。ただし、取得でき、一部のプログラミング言語で使用される他のアプローチがあることに留意してください。

2003 年に一般化と継承の違いについてのかなり長い講義を覚えています。つまり、これら 2 つの概念はソフトウェア設計の異なるレベルに属しており、UML Distilled、第 3 版の Martin Fowler の「モデリングのさまざまな視点」を引用すると、次のようになります。

概念的には、企業顧客のすべてのインスタンスが定義上、顧客のインスタンスである場合、企業顧客は顧客のサブタイプであると言えます。企業の顧客は、特別な種類の顧客です。

一般化の概念は、概念的な設計レベルに属します。

ただし、継承は実装の観点に属する概念です。

ソフトウェアの観点では、明らかな解釈は継承です。企業顧客は顧客のサブクラスです。主流のOO言語では、サブクラスはスーパークラスのすべての機能を継承し、スーパークラスの方法をオーバーライドする場合があります。

一般化と継承の違いが本当に意味のある例を覚えています。

正方形は長方形です。それは数学における彼らの定義から来ています。

  • 長方形は4つの直角を持つ四角形です
  • 正方形は、4 つの等しい辺と角を持つ多角形です

設計レベルでは、正方形と長方形の間に一般化関係があります。

しかし、実装レベルでは状況が異なり始めます。

  • 長方形は 2 つの尺度で定義できます。その幅と高さ
  • すべての辺が等しいため、正方形は 1 つのメジャーで定義できます。

Square クラスで Rectangle クラスの幅と高さを継承することは逆効果であり、幅のセッターと高さのセッターに同じ値が提供されるようにするための追加の制約が必要になります。

これは、一般化関係を実装レベルでの継承の使用に変換しないケースです (多少鋭いことは認めます)。

まあ、そんな日々でした。

継承があるので、「である - 」(しゃれが意図していない)「クラスCはClassBのを知っているにClassA、である」との関係は、あなたがそれを読むことができ、とてもます:

  ClassAはClassBのに依存しているとき、

たとえば、クラスCはClassBのに依存します?

- はい:)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top