繁体   English   中英

维恩图中的类表示

[英]Class representation in Venn diagram

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

受薪员工继承员工类

每小时员工继承员工类

(我真的不记得课程的上下文)

他像这样绘制维恩图:

维恩班的维恩图

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

维恩的班级图在我的脑海里

顺便说一下,为了简化图表,我们两个人都假定类图表表示中没有包含私有部分,或者它就像是设置了交叉点。

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

在某种意义上,他们都是。

第一张图准确描述了类之间的继承关系。 该图表示“在所有员工中,有些员工是小时工,有些是工资。他们之间没有重叠。” 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时,但在大多数情况下,您会发现第二个图通常是暗示而不是说明。

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

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

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

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

(您可能会将圆的元素视为结构值,圆圈包括具有一定数量的公共成员和/或字段或更少的圆圈。或者圆形元素是公共结构成员和/或对应于各种类别的类的字段员工

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

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

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

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

它应该如下: -

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM