现在我有两个类,命名为患者和医生:

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

Doctor() {
    public:
    //functions here
    private:
    //data members here
}

在患者类的 UML 类图中,我是否需要将医生和日期作为属性包含在内?或者我只是通过将它们链接为协会来代表它们?

如果属性应该是这样的:

病人

医生:医生

日期承认:日期

出院日期:日期

最佳答案

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

但是,常见的做法是:

  • 如果属性是基本数据类型(整数、 bool 值、日期等)-> 显示
    它在一个类中,作为属性
  • 如果该属性成熟
    class -> 将其显示为单独的类实体并使用关联来
    显示他们的关系

  • 这种做法是有道理的,因为“int”、“boolean”或“date”没有自己的自定义属性,在类中显示它们就足够了(不会丢失有关它们的信息)。另一方面,类有自己的特征(属性、方法和自己的关联、概括等),因此“值得”在图表上留出更多空间。

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

    class - UML 类图 : Attribute or Association?-LMLPHP

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

    class - UML 类图 : Attribute or Association?-LMLPHP

    更新(评论后)

    class - UML 类图 : Attribute or Association?-LMLPHP

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

    关于class - UML 类图 : Attribute or Association?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23261380/

    10-16 12:42