Oop 类图和类属性中的聚合

Oop 类图和类属性中的聚合,oop,uml,class-design,class-diagram,Oop,Uml,Class Design,Class Diagram,在关于类图的讲座中,出现了以下幻灯片,描述了电梯系统中的关系: 讲座将黑头箭头称为“复合聚合”关系,这意味着孩子不能独立于父母而存在 在本电梯系统示例中,电动机对象与电梯对象外部无关 但我不明白的是,复合聚合在代码中是如何出现的。我希望电梯里会有一个“我的马达”,但实际上没有 是因为通过绘制这种关系,我们告诉程序员他需要实现它,但实现细节是他自己选择的吗 与显式声明的父对象属性(如电梯的isActive boolean属性)相反,对于复合聚合(也称为合成),这通常表示父子关系。在您的示例中,代

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

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

在本电梯系统示例中,电动机对象与电梯对象外部无关

但我不明白的是,复合聚合在代码中是如何出现的。我希望电梯里会有一个“我的马达”,但实际上没有

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


与显式声明的父对象属性(如电梯的isActive boolean属性)相反,对于复合聚合(也称为合成),这通常表示父子关系。在您的示例中,代码中的电梯对象将只包含对一个马达对象的引用。这里有一个链接到一篇博客文章,可以更好地解释这一点。查看合成部分:


我认为这种表示法对所有图片中的对象都有意义,除了StopRequest。就我个人而言,我不会将其视为电梯对象的组成部分,但请记住,UML不是一门精确的科学。

U.M.L.可以以多种方式用作概念设计工具或更具体的编程设计工具

因此,在表示复合聚合时,它可以用几种方式表示

  • 有时,您可能希望显示类的所有成员。糟糕,当会员太多的时候

干杯。

您的假设是正确的-
UML
关系没有指定实现细节。在组合的情况下,要求将
电机
对象寿命限定为包含
电梯
对象寿命。这可以通过几种方式实现(也取决于您使用的语言)。它可以是
电梯
中的一个属性,在这种情况下,它将和包含
电梯
的一起自动销毁。另一方面,它可以是一个外部对象,在包含
电梯
对象的生命周期内手动实例化和释放。实现取决于具体情况和其他设计考虑因素,如简单性、灵活性、模块性等

有许多细节可以添加到图表中。图表的创建者需要考虑包括什么和省略什么。例如,私有属性通常与实现细节相关,对于类图来说并不有趣,因此不会提及它们。所提到的属性明确地暗示了包含对象和属性之间的组合关系。这种概念通常用于基本属性,如布尔、int等。对于更复杂的属性,通常使用显式UML关系来描述对象之间的关系(如
电梯
电机

+--------------------------+ | ElevatorClass | +--------------------------+ | [+] boolean: isActive | | [+] boolean: isInOrder | | [+] Floor: Location | | [+] MotorClass: Motor | | [+] DoorClass: Door | +--------------------------+ | [+] startOperation() | | [+] stopOperation() | | [+] gooUp() | | [+] gooDown() | | [+] openDoor() | | [+] closeDoor() | +--------------------------+ +--------------------------+1 1+--------------------------+ | ElevatorClass |------<*>| RescueButtonClass | +--------------------------+ +--------------------------+ +--------------------------+ 1 1 +--------------------------+ | ElevatorClass |------<*>| MotorButtonClass | +--------------------------+ +--------------------------+ | [+] boolean: isActive | | [+] boolean: isInOrder | | [+] Floor: Location | | [+] MotorClass: Motor | | [+] DoorClass: Door | +--------------------------+
class ElevatorClass {
public:
  List<ComponentClass*> Components;

  ...

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

...

MyElevator.AddComponent(MyMotor);
class ElevatorClass {
public:
  MotorClass* Motor;
  MotorClass* Motor;
} // class ElevatorClass