在约类演讲图下面滑动出现其描述在电梯系统中的关系:聚合在类图和类属性
讲座称为黑头箭头“复合聚合”这意味着孩子不能独立于父母而存在。
在此电梯系统示例中,电机对象在电梯对象外无关。
我不明白,但是如何组合聚合出现在代码本身。我希望在电梯里有一个“myMotor”属性,但是没有。
是不是因为通过绘制这种关系我们告诉程序员他需要实现它,但是他的实现细节是他的选择?
与明确陈述的父对象的属性(如电梯的isActive布尔属性)相反吗?
在约类演讲图下面滑动出现其描述在电梯系统中的关系:聚合在类图和类属性
讲座称为黑头箭头“复合聚合”这意味着孩子不能独立于父母而存在。
在此电梯系统示例中,电机对象在电梯对象外无关。
我不明白,但是如何组合聚合出现在代码本身。我希望在电梯里有一个“myMotor”属性,但是没有。
是不是因为通过绘制这种关系我们告诉程序员他需要实现它,但是他的实现细节是他的选择?
与明确陈述的父对象的属性(如电梯的isActive布尔属性)相反吗?
对于组合聚集(也称为组合),USUALLY表示父子关系。在你的例子中,你的代码中的一个Elevator对象只包含一个对一个Motor对象的引用。这里是一个博客文章的链接,可以更好地解释它。认准组成部分:
http://aviadezra.blogspot.com/2009/05/uml-association-aggregation-composition.html
我想,这表示是有道理的合照,除了可能StopRequest的所有对象。就我个人而言,我不会将它描绘成Elevator对象的组合,但请记住UML不是一门精确的科学。
U.M.L.可以以几种方式用作非常概念化的设计工具,或者更具体的编程设计工具。
因此,当表示复合聚合时,它可以用几种方式表示。
+--------------------------+ | 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 | +--------------------------+
为了使事情有点复杂,电动机,以及其他元素,不necesarilly必须由在电梯类的引用部件被引用。
例(C型):
class ElevatorClass {
public:
List<ComponentClass*> Components;
...
void AddComponent(ComponentClass* ThisComponent);
} // class ElevatorClass
...
MyElevator.AddComponent(MyMotor);
在前面的代码示例中,部件不直接引用。
个人而言,我同意你的看法,这个公司很清楚:
class ElevatorClass {
public:
MotorClass* Motor;
MotorClass* Motor;
} // class ElevatorClass
干杯。
您的假设是正确的 - UML
关系没有指定实施细节。在构成的情况下,要求是对象生命周期与包含的对象生命周期相关联。这可以通过几种方式来实现(并且依赖于您使用的语言)。它可以是Elevator
中的一个属性,在这种情况下,它将与包含Elevator
一起自动销毁。另一方面,它可以是在包含对象的生命周期中手动实例化和释放的外部对象。实施取决于具体情况和其他设计考虑因素,例如简单性,灵活性,模块化等。
有很多细节可以添加到图中。该图的创建者需要考虑包含什么以及要省略什么。例如,私有属性通常与实现细节有关,对于类图来说并不有趣,因此不会被提及。明确提到的属性意味着包含对象和属性之间的构成关系。这种概念通常用于原始属性,如布尔值,整型值等。对于更复杂的属性,通常使用显式UML关系来描述对象之间的关系(如Elevator
和Motor
之间)。