【问题标题】:UML Class Diagram: Attribute or Association?UML 类图:属性还是关联?
【发布时间】:2014-04-24 06:27:08
【问题描述】:

现在我有两个班级,分别是病人和医生:

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

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

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

如果属性应该是这样的:

病人

医生:医生

录取日期:日期

dateDischarged : 日期

【问题讨论】:

    标签: class uml class-diagram


    【解决方案1】:

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

    但是,常见的做法是:

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

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

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

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

    更新(在 cmets 之后)

    注意:组合用于日期,以反映整体-部分类型的牢固关系以及这些日期不能与其上下文断开链接的事实。 另一个关联(Patient-Doctor)是一个常见的关联,并且可以随时断开相应的链接(例如更改 Patient's Doctor)。

    【讨论】:

    • Erm 那么如果我 gt 另一个名为 Date 的类(内部有数据成员:年,月。日)?
    • 因此也将其显示为一个单独的类并应用关联。在这种特殊情况下,它甚至更值得推荐,以突出它是一个“自定义”日期类而不是普通的、旧的基本日期对象这一事实。
    • 但是有两个不同的日期,出院日期和入院日期。我该如何展示它们?
    • 我刚刚在主要答案中发布了第三个示例,以反映这一点。您可以根据需要在两个类之间放置任意数量的关联。每个关联都被视为具有所有特征(名称、范围、多重性等)的独立属性。一个 Patient 类显示有 3 个属性:Doctor 和 2 Dates。
    【解决方案2】:

    在 UML 中,您可以将类之间的关系建模为 关联。属性应该用于数据类型。

    它们很可能最终成为例如字段中的字段。 Java 在这个阶段还没有发挥作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-24
      • 1970-01-01
      • 2016-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-24
      相关资源
      最近更新 更多