【问题标题】:Making a simple UML class diagram for a school为学校制作简单的 UML 类图
【发布时间】:2017-08-06 14:48:15
【问题描述】:

我正在尝试为一所学校创建一个简单的类图。在我的班级层次结构中,一个学校通常由两个主要的利益相关者(学生和老师)组成,许多学生可以分配到一个老师。我可以知道如何展示这种关系吗?

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

【问题讨论】:

    标签: java class model uml diagram


    【解决方案1】:

    多重性:您使用多重性的方式是正确的(我可以预见)。这意味着每位教师必须至少有一名学生。没有学生就没有老师。听起来像是一所没有固定教师的雇佣和解雇学校。

    聚合:您可以像以前一样使用共享聚合(空心菱形)。这是正确的,但请参阅下面的评论。

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

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

    关于共享聚合的补充说明: 您不必太在意共享聚合。根据 UML 规范,它没有通用语义(UML 2.5 的第 110 页):

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

    聚合更多地是关于对象的生命周期,而现实生活中的应用程序很少见(主要是如果您必须在成本或安全方面了解内存)。

    因此,在您(和大多数其他)案例中,多样性就是您想要展示的内容。这通常比显示更重要,例如复合聚合(子对象与其父对象一起死亡)更不用说共享组合了。

    【讨论】:

    • 这绝对是一个正确的答案,但是我会改变重点。我会更多地(首先)关注 OP 正确使用了多重性这一事实。然后我会指出滥用关联到应该用依赖项替换的枚举,然后才添加一个旁注,即共享聚合构造几乎没有为模型提供任何附加值。即使这样,您也应该提到 OP 正确使用了共享聚合。
    • @Ister 感谢您的评论。我按照建议更改了重点。
    【解决方案2】:

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

    public class Teacher extends StakeHolders{
    
       public Student[] students;
    
       public void markAttendance(){
    
       }
    }
    

    【讨论】:

    • 啊,你是对的。角色名称而不是属性是一个好主意。我会将其添加到我的答案中,并为您的答案 +1。
    猜你喜欢
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 2018-10-01
    • 1970-01-01
    相关资源
    最近更新 更多