gpt4 book ai didi

oop - 类图中的聚合和类属性

转载 作者:行者123 更新时间:2023-12-04 21:58:07 25 4
gpt4 key购买 nike

在关于类图的讲座中,出现了以下幻灯片,它描述了电梯系统中的关系:

Elevator system

讲座将黑头箭头称为“复合聚合”关系,这意味着 child 不能独立于 parent 而存在。

在这个电梯系统示例中,Motor 对象在 Elevator 对象之外是不相关的。

我不明白的是复合聚合如何出现在代码本身中。我希望电梯中有一个“myMotor”属性,但没有。

是不是因为通过绘制这种关系我们告诉程序员他需要实现它但实现细节是他选择的?

与明确声明的父对象的属性相反(如电梯的 isActive bool 属性)?

最佳答案

美联社可以以多种方式用作非常概念化的设计工具,或更具体的编程设计工具。

因此,在表示复合聚合时,可以通过多种方式表示。

  • 有时,您可能希望显示一个类的所有成员。不好,当成员太多时。
  •     +--------------------------+    |       ElevatorClass      |    +--------------------------+    | [+] boolean:   isActive  |    | [+] boolean:   isInOrder |    | [+] Floor:     Location  |    | [+] MotorClass:   Motor  |    | [+] DoorClass:    Door   |    +--------------------------+    | [+] startOperation()     |    | [+] stopOperation()      |    | [+] gooUp()              |    | [+] gooDown()            |    | [+] openDoor()           |    | [+] closeDoor()          |    +--------------------------+
    • Sometimes, you may want to hide all members of a class. Good, when you want to focus in the class, not the members. Note: This may be the case you are looking right now.
        +--------------------------+1       1+--------------------------+    |       ElevatorClass      |------<*>|     RescueButtonClass    |    +--------------------------+         +--------------------------+
    • Sometimes, you may want to show some members of a class, and hide another.
        +--------------------------+ 1     1 +--------------------------+    |       ElevatorClass      |------<*>|      MotorButtonClass    |    +--------------------------+         +--------------------------+    | [+] boolean:   isActive  |    | [+] boolean:   isInOrder |    | [+] Floor:     Location  |    | [+] MotorClass:   Motor  |    | [+] DoorClass:    Door   |    +--------------------------+

    To make things a little complicated, the motor, as well as the other elements, doesn't necesarilly have to be referenced by a reference member in the elevator class.

    Example (c style):

    class ElevatorClass {
    public:
    List<ComponentClass*> Components;

    ...

    void AddComponent(ComponentClass* ThisComponent);
    } // class ElevatorClass

    ...

    MyElevator.AddComponent(MyMotor);

    在前面的代码示例中,没有直接引用成员。

    我个人同意你的看法,这很清楚:
    class ElevatorClass {
    public:
    MotorClass* Motor;
    MotorClass* Motor;
    } // class ElevatorClass

    干杯。

    关于oop - 类图中的聚合和类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19712592/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com