维恩图中的类表示

时间:2014-11-16 02:56:31

标签: c++ class venn-diagram

在我们的课程中,我们的教师使用UML和维恩图绘制类关系图。

受薪员工继承员工类

每小时员工继承员工类

(我真的不记得课程的背景)

他画这样的维恩图:

Venn Diagram of Classes as for Teacher

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

Venn Diagram of Classes In my mind

顺便说一句,我们都假设类私有部分不包含在图表中,或者它就像是设置了交叉点,以简化图表。

所以我的问题很简单,哪一个是正确/最接近正确的表示。

4 个答案:

答案 0 :(得分:4)

从某种意义上说,它们都是。

第一张图准确描述了类之间的继承关系。该图表说"在所有员工的集合中,一些员工是小时工,有些是工资。它们之间没有重叠。" Employee是更通用的集合,因此它包含两个更具体的集合。

第二张图表是"有员工每小时和有薪水。其中一些是员工。"在继承的背景下,这显然没有多大意义。

但是,第二个图表是对这些类之间共享的数据的准确性的准确性。 Hourly EmployeeSalaried Employee个对象的成员会有一些重叠,而这些重叠是Employee个对象中包含的内容。例如,您可能有一些类定义:

class Employee {
    int employee_id;
}

class SalariedEmployee extends Employee {
    int salary;
}

class HourlyEmployee extends Employee {
    int wage;
}

SalariedEmployeeHourlyEmployee都从其超类继承employee_id成员。如果您要将类定义绘制为维恩图,那么您绘制的第二个图大致是您想出的,但在适当的设计中,Employee类将是整个交集。

您可能会发现以这种方式考虑继承关系很有用,尤其是在您了解OO时,但在大多数情况下,您会发现第二个图表通常是暗示而不是说明。

答案 1 :(得分:1)

Venn diagram将cirlces放在集合的元素周围。这里的每个元素都是员工。想象一下,在页面上撒上的圆圈是否包围在圆圈中。每个点都是一名员工。所有点都将落在员工圈内。您的老师的图表说,每小时的员工和受薪员工都是员工,没有员工按小时和工资支付。

也可以使用相同的设置来组织代表/对应于员工的抽象C ++值。

您必须先同意这些术语/圈子的定义,然后才能绘制它们。例如,在某些业务中,某些员工可能双向获得报酬;然后小cirlces重叠。也许小圈子外没有员工;也许有。

很难知道你想对员工说些什么,或者你认为你的老师想说什么,除非你解释一个点应该在一个圆圈内的什么时候。

(您可能会将圈子的元素视为结构值,圈子包括具有一定数量的公共成员和/或字段或更少的圈子。或者圈子元素是公共结构成员和/或与各类员工相对应的课程领域。

但是,您的员工圈子应该与两种员工圈子重叠。)

答案 2 :(得分:0)

第一张图是正确的。受薪和每小时员工都从Employee继承。他们都满足了“is-a”员工关系。

答案 3 :(得分:-2)

根据声明,您提到您的情况假设如下: 受薪员工 - 继承--->每小时员工 - 继承--->雇员

如果是这种情况,那么我认为两个图都不正确。

应该如下: -

最大圈子:员工;在其中:每小时;在那个(最小的):员工