6
我知道在Java中有不同的关联转换方式,聚合和组合。但是当我们将它们转换为代码(Java类)时,它们都以相同的方式表示。就像由老师教授的关联的学生一样,代表具有班主任实例变量的学生班。将关联,聚合和组合转换为java中的代码?
部门有聚合的教授也将用具有班级教授实例变量(数组)的部门类表示。
大学有组成部门也将以具有Class部门的实例变量(数组)的大学班级来表示。
所以所有的代码都以相同的方式重新排列。那么协会,聚合和组合为开发者提供了什么好处?
对不起,sfinnie我错过了这两点。 Point1: - 如果我们在原始文章中考虑组合示例,那么您是否在说大学类应该具有Class部门的实例变量(数组)作为final。如果不是我们将如何在代码中表示它。 Point2: - 是的,我同意你的观点,但是当我们将uml图转换为编码时并没有什么区别,因为它仍然是一个简单的实例变量。 –
点1:是的。第2点:这不仅仅是参考。 UML复合语义要求“如果删除了一个组合,它的所有部分通常都会被删除”(UML superstructure 2.3,page 40)。在像C++这样的非GC语言中,这意味着析构函数代码必须确保删除父项之前删除所有子项。对于GC环境而言,这一点不太明显。然而,还有一些成语 - 例如由领域驱动设计推广的“聚合根”方法,其中创建(或移除)儿童的唯一方法是通过父类本身的方法......(ctd)。 – sfinnie
...所以在原型Order/OrderLine场景中,从Order添加OrderLine的唯一方法是调用Order.AddOrderLine()(同样用于删除)。所以总结一下:代码中没有直接的声明式模拟表示复合。相反,你必须在程序上建立行为。因此,在代码中识别复合材料需要大量的“模式识别”。如果引用是最终的,并且创建/删除孩子的唯一方法是通过父级的接口,则该关系可能是Composite。心连心。 – sfinnie