UML类图:属性还是关联?

vee*_*ong 8 uml class-diagram class

现在我有两个班,名为病人和医生:

Patient() {
     public:
        //functions here
    private:
    Doctor doctor;
    Date dateAdmitted;
    Date dateDischarged;
}

Doctor() {
    public:
    //functions here
    private:
    //data members here
}
Run Code Online (Sandbox Code Playgroud)

在我的UML类患者类图中,我是否需要将医生和日期作为属性包括在内?或者我只是通过将它们作为关联来表示它们?

如果属性应该是这样的:

患者

医生:医生

dateAdmitted:日期

dateDischarged:日期

Ale*_*eks 10

根据UML语法规则,两种解决方案都是有效的 - 类属性和关联类都是所谓的类属性,可以显示为属性(在类内)或作为单独的类,通过关联链接.对于这两个类功能,您可以定义名称,多样性,范围等.有关详细的技术信息,请参阅UML规范.

但是,通常的做法如下:

  • 如果属性是基本数据类型(int,boolean,date等) - >在类中显示它作为属性
  • 如果属性是完全成熟的类 - >将其显示为单独的类实体并使用关联来显示它们的关系

这种做法很有意义,因为"int","boolean"或"date"没有自己的自定义属性,它足以在类中显示它们(同时丢失有关它们的信息).另一方面,类具有自己的特性(属性,方法和自己的关联,概括等),因此在图上"值得"更多空间.

最后直接回答您的问题:将Doctor显示为图表上的单独类,通过关联与Patient连接(请注意属性名称显示为associationEnd名称).将两个日期保留在Patient类中:

在此输入图像描述

下图是等效且有效的,但您可能同意第一个图在视觉上更清晰(想象一些atts,方法和关系或Doctor类),因此建议:

在此输入图像描述

更新(评论后)

在此输入图像描述

注意:组合用于日期,以反映整体部分类型的强烈关系以及这些日期无法与其上下文取消链接的事实.另一个关联(Patient-Doctor)是一种常见的关联,并且可以随时打破相应的链接(例如,更换患者的医生).