3

アソシエーション、依存関係、およびそのような関係がUMLでどのように継承されるのか(または一般的に言えば)疑問に思っていました。したがって、次のような状況では:

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

ノート:

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

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

ありがとうございました。

4

3 に答える 3

3

簡単な答えは「はい」です(そして、ほとんどの実用的な目的のためにそれを超えて見る必要はありません)。

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

一般化継承という言葉はしばしば同じ意味で使用されますが、実際には2つの関連しているが異なる概念があります。一般化は、モデリング要素間の分類学的関係です。要素 とは何かを説明します。継承は、共有インクリメンタル記述を組み合わせて要素の完全な記述を形成するためのメカニズムです。ほとんどのオブジェクト指向システムでは、継承は一般化に基づいていますが、継承は、自己言語の委任ポインターなどの他の概念に基づくことができます。継承メカニズムを一般化関係に基づいて作成すると、説明とポリモーフィックな動作のファクタリングと共有が可能になります。これは、ほとんどのオブジェクト指向言語とUMLで採用されているアプローチです。ただし、他にも採用できた可能性があり、一部のプログラミング言語で使用されているアプローチがあることに注意してください。

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

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

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

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

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

一般化と継承の違いが本当に理にかなっている例を覚えています。

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

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

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

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

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

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

これは、一般化関係を実装レベルでの継承の使用に変換しない場合です(私が認めるややエッジの効いた)。

さて、それらはその日でした。

于 2010-01-04T14:36:30.380 に答える
1

継承は「is-a」(しゃれなし) の関係であるため、「ClassC は ClassA であり、ClassB を認識している」と読むことができます。つまり、次のようになります。

たとえば、ClassA が ClassB に依存している場合、ClassC は ClassB に依存しますか?

- はい :)

于 2010-01-01T12:48:59.487 に答える
1

UML に関する質問ではなく、より一般的な質問です。

継承 とはどういう意味ですか?

ClassC は ClassA のサブクラスです。継承を実装するすべてのプログラミング言語で、ClassC は ClassA のすべての機能を備えています。

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

それが継承の定義です。いつもそして永遠に。UML ダイアグラムでも。

于 2010-01-01T13:14:07.123 に答える