2

私たちのレッスンでは、先生が UML とベン図を使ってクラス関係図を描きます。

サラリーマンは従業員クラスを継承

時給従業員は従業員クラスを継承します

(クラスの文脈はあまり覚えていません)

彼は次のようなベン図を描きます。

教師用クラスのベン図

しかし、私はそれがこのようであるべきだとは本当に信じていません。私の考えでは、それは次のようなものです:

クラスのベン図

ちなみに、図を簡略化するために、両者とも図表表現に含まれないクラスのプライベートな部分、または交点を含む 3 つの集合のようなものを想定しています。

したがって、私の質問は簡単です。どれが正しい/最も近い表現です。

4

4 に答える 4

5

ある意味、どちらもそうです。

最初の図は、クラス間の継承関係を正確に記述しています。その図は、「すべての従業員のセットで、一部の従業員は時給で、一部の従業員は給与を支払っています。それらの間に重複はありません」と言っています。Employeeはより一般的なセットであるため、より具体的な 2 つのセットが含まれています。

2 番目の図は、「時給と月給の両方の従業員がいます。そのうちの何人かは従業員です」と述べています。これは明らかに、継承のコンテキストではあまり意味がありません。

ただし、2 番目の図は、これらのクラス間で共有されるデータを多かれ少なかれ正確に表したものです。Hourly EmployeeSalaried Employeeオブジェクトのメンバーにいくつかのオーバーラップがあり、そのオーバーラップがEmployeeオブジェクトに含まれています。たとえば、次のようなクラス定義があるとします。

class Employee {
    int employee_id;
}

class SalariedEmployee extends Employee {
    int salary;
}

class HourlyEmployee extends Employee {
    int wage;
}

SalariedEmployeeどちらもスーパークラスからメンバーを継承HourlyEmployeeします。employee_idクラス定義をベン図として描くとしたら、2 番目に描いた図がおおよそ思いつくものですが、適切な設計では、Employeeクラスは交差点全体になります。

特に OO について学んでいる場合は、継承関係をこのように考えると便利な場合がありますが、ほとんどのコンテキストでは、2 番目の図は通常、明言されているのではなく暗示されていることがわかります。

于 2014-11-16T03:00:24.100 に答える
1

ベン図では、セットの要素を円で囲みます。ここで、各要素は従業員です。円で囲まれているかどうかにかかわらず、ページ上に散りばめられたドットを想像してみてください。各ドットは従業員です。すべてのドットは従業員の円の中に収まります。教師の図では、時間給の従業員とサラリーマンは従業員であり、時間給と給与の両方で支払われる従業員はいないと書かれています。

同じセットアップを使用して、従業員を表す/対応する抽象的な C++ 値を整理することもできます。

それらを描く前に、これらの用語/円の定義に同意する必要があります。たとえば、一部のビジネスでは、一部の従業員は両方の方法で支払われる場合があります。次に、小さな円が重なります。小さなサークルの外に従業員はいないかもしれません。あるかもしれません。

従業員について何を言おうとしているのか、または先生が何を言おうとしていると考えているのかを理解するのは、点が丸に収まるタイミングを説明しないとわかりません。

(円の要素を構造体の値と考えているかもしれません。円には、特定の数以下のパブリック メンバーおよび/またはフィールドを持つものが含まれます。または、円の要素は、さまざまな種類に対応するクラスのパブリック構造体メンバーおよび/またはフィールドです。従業員の。

ただし、従業員サークルは両方の種類の従業員サークルと重複する必要があります)。

于 2014-11-16T03:12:15.860 に答える
0

最初の図が正しいです。給与および時給の従業員はどちらも Employee から継承します。どちらも「is-a」従業員関係を満たしています。

于 2014-11-16T03:01:21.337 に答える
-2

声明によると、あなたの場合の前提は次のとおりであると述べていました。

この場合、両方の図が正しくないと思います。

次のようにする必要があります:-

最大のサークル: 従業員。その中で:毎時。その内(最小):従業員

于 2014-11-16T03:09:18.700 に答える