UML和实现:通过ID关联类

时间:2015-10-09 18:36:00

标签: uml aggregation composition

我最近在读一门在线课程。建议减少耦合,我们可以简单地将ID从客户对象传递给Order对象。这样订单就不必完全引用Customer类。

这个想法看起来很简单,为什么在不需要所有属性的情况下传递整个对象?

1)您如何看待这个想法? 2)如果只传递一个ID,我如何在UML中表达Customer类和Order类之间的关系。这不仅仅是聚合的一个例子吗?组合和聚合不仅需要传递值吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

首先,你需要清楚UML究竟是什么。一方面,您有想法,另一方面,硬件上运行了一些代码。理想情况下,后者支持第一种方式,为想法的用户带来附加价值。现在,有很多可能性来描述从 idea 代码方式。而UML就是其中之一。可以在此方式上描述每个步骤,但出于实际原因,UML停在代码的边界,即编程语言。

现在为您提出具体问题:任何对象都可以看作是一个实例。这是一个具有固定地址的具体内存分区。编程语言通过分配内存并使用起始地址作为参考来实现实例。并且由于此引用不会更改,因此可以通过其地址来标识对象。显然,关联只是一个指针。关联类将包含两个(或更多)这样的指针。

老实说,我第一次开始使用OO时,我也很困惑,并认为传递这些大型物体是浪费资源。但由于它只是一个指针,所以它很容易实现。

如果你需要持久化对象,事情会变得更加困难。在这种情况下,您需要一个可以与对象一起保存的人工密钥,您可能需要使用表格将人工密钥映射到具体实例地址。

答案 1 :(得分:0)

这个问题的答案取决于许多因素,我在你的问题附带的评论中列出了这些因素。我将假设您使用UML创建域模型,或者您正在描述使用静态类型语言完成的实现。

如果您使用UML创建域模型,那么当您使用ID来链接"时,您就会混淆语义。类。只需绘制并注释关联,您就完成了。

如果您正在描述使用静态类型语言完成的实现 - 类型存在的原因。使用通用ID来链接事物意味着系统最需要的信息变得更加间接,因此更加不透明(这是不好的)。在您的情况下,Order对象仍然必须获取对Customer对象的类型引用,以对其执行任何操作。

例如,Order可以通过调用ID查找来获取对Customer的引用,但是它必须将引用转换为适当的类型以调用Customer对象上的任何内容。因此,您无法减少从订单到客户的耦合。你把它埋在别的地方。