Yak*_*kan 2 c++ class venn-diagram
在我们的课程中,我们的老师用 UML 和维恩图绘制了类关系图。
受薪雇员继承雇员类
Hourly Employee 继承 Employee 类
(我真的不记得课程的背景了)
他画的维恩图是这样的:

但是,我真的不相信它应该是这样的。在我看来,它是这样的:

顺便说一下,为了简化图,我们都假设类私有部分不包含在图表表示中,或者像 3 个带有交集的集合。
所以我的问题很简单,哪一个是正确的/最接近正确的表示。
从某种意义上说,他们都是。
第一张图准确地描述了类之间的继承关系。那个图是说“在所有员工的集合中,有些员工是小时工,有些是领薪水。他们之间没有重叠。” Employee是更一般的集合,所以它包含两个更具体的集合。
第二张图是说“有些员工既是小时工又是受薪员工。其中一些是员工。” 这在继承的上下文中显然没有多大意义。
但是,第二张图或多或少准确地表示了这些类之间共享的数据。成员Hourly Employee和Salaried Employee物体都会有一些重叠,而且重叠中包含什么Employee对象。例如,您可能有一些这样的类定义:
class Employee {
int employee_id;
}
class SalariedEmployee extends Employee {
int salary;
}
class HourlyEmployee extends Employee {
int wage;
}
Run Code Online (Sandbox Code Playgroud)
SalariedEmployee并且HourlyEmployee都employee_id从他们的超类继承成员。如果您将类定义绘制为维恩图,您绘制的第二个图大致就是您想出的,但在适当的设计中,Employee类将是整个交集。
您可能会发现以这种方式考虑继承关系很有用,尤其是在您学习 OO 时,但在大多数情况下,您会发现第二个图通常是隐含的,而不是陈述的。