ある意味、どちらもそうです。
最初の図は、クラス間の継承関係を正確に記述しています。その図は、「すべての従業員のセットで、一部の従業員は時給で、一部の従業員は給与を支払っています。それらの間に重複はありません」と言っています。Employee
はより一般的なセットであるため、より具体的な 2 つのセットが含まれています。
2 番目の図は、「時給と月給の両方の従業員がいます。そのうちの何人かは従業員です」と述べています。これは明らかに、継承のコンテキストではあまり意味がありません。
ただし、2 番目の図は、これらのクラス間で共有されるデータを多かれ少なかれ正確に表したものです。Hourly Employee
とSalaried 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 番目の図は通常、明言されているのではなく暗示されていることがわかります。