2017-08-06 433 views
2

我正在尝试为学校创建一个简单的类图。在我的类层次结构,一个学校通常由两个主要的利益相关者(学生&教师)和许多学生可以被分配到一个老师的。我可否知道我如何展现这种关系?为学校制作一个简单的UML类图

我在我的类图中使用了聚合和枚举,但是我并不确定它是否正确。你能告诉我吗? enter image description here

回答

5

多重:您正在使用多重的方式是正确的(因为我可以预见它)。这意味着每位教师必须至少有一名学生。没有学生,没有老师。听起来像一个没有固定教师的雇用和消防学校。

聚合:您可以按照您的方式使用共享聚合(空心菱形)。这是正确的,但看到我下面的评论。

枚举:关于<<enumeration>>您只需要依赖关系而不是关联。与类别的关系不同,<<enumeration>>是一种“原始”,它不表示为对象。

角色名称:正如@Oguz指出,在关联的末尾使用角色名称是一个好主意。所以你会把teacher放在Teacherstudents(复数因为你有1..*)在Student附近。这些角色将作为属性实现。

有关共享聚合的其他评论: 您不必太在意共享聚合。按照UML规范,它没有共同的语义(UML 2.5的第110页):

指示该属性具有共享聚合语义。精确的共享聚合语义因应用领域和建模者而异。

聚合更多的是关于对象的生命周期,而现实生活中的应用比往往更为罕见(主要是如果你必须在成本或安全性方面进行内存感知)。

因此,在你的(和大多数其他)情况下,多样性就是你想要展现的。这通常比例如显示更重要。一个复合聚合(子对象与父代一起死亡),更不用说共享合成了。

+0

这绝对是一个正确的答案,但我会改变重点。我将更多地关注OP的正确使用多重性的事实(第一)。然后,我会指出滥用关联应该用一个依赖替换的枚举,然后添加一个附注,即共享聚合构造对模型没有附加价值。即使这样,你也应该提到OP已经正确地使用了共享聚合。 – Ister

+0

@Ister感谢您的评论。我建议改变重点。 –

3

您可以将聚合名称更改为学生。而在java代码中,教师类有一个数组,数组,arraylist或set等,其名称是学生。还有一件事,这个关系是1对多还是0对多(0 .. *)?

public class Teacher extends StakeHolders{ 

    public Student[] students; 

    public void markAttendance(){ 

    } 
} 
+2

啊,你是对的。角色名称而不是属性是一个好主意。我会将其添加到我的答案中,并将+1添加到您的答案中。 –