UML及其实现:通过IDs关联类

UML及其实现:通过IDs关联类,uml,aggregation,composition,Uml,Aggregation,Composition,我最近在学习一门在线课程。建议,为了减少耦合,我们可以简单地将ID从customer对象传递到Order对象。这样,订单就不必有对Customer类的完整引用 这个想法看起来很简单,如果不需要所有属性,为什么要传递整个对象 1) 你觉得这个主意怎么样? 2) 如果只传递了一个ID,我将如何在UML中表示Customer类和Order类之间的关系。这不仅仅是一个聚合的例子,是吗?难道合成和聚合不需要传递一个值吗 谢谢 首先,您需要弄清楚UML实际上是什么。一方面,你有一个想法,另一方面,有一些代码

我最近在学习一门在线课程。建议,为了减少耦合,我们可以简单地将ID从customer对象传递到Order对象。这样,订单就不必有对Customer类的完整引用

这个想法看起来很简单,如果不需要所有属性,为什么要传递整个对象

1) 你觉得这个主意怎么样? 2) 如果只传递了一个ID,我将如何在UML中表示Customer类和Order类之间的关系。这不仅仅是一个聚合的例子,是吗?难道合成和聚合不需要传递一个值吗


谢谢

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

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

老实说,在我第一次开始使用OO时,我也很困惑,认为传递这些大型对象是浪费资源。但因为它只是一个指针,所以很容易操作


同样,如果需要持久化对象,事情会变得更加困难。在这种情况下,您需要一个可以与对象一起保存的人工键,并且您可能需要一些表来将人工键映射到具体的实例地址。

这个问题的答案取决于许多因素,我开始在您的问题所附的注释中列出这些因素。我将假设您要么使用UML创建域模型,要么使用静态类型语言描述实现

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

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

例如,订单可以通过调用ID查找来获取对客户的引用,但它必须将引用转换为适当的类型,才能调用客户对象上的任何内容。因此,您没有减少订单与客户之间的耦合。您只是把它埋在了其他地方。

1)订单需要对客户对象做什么?2) 您使用UML的目的是什么?是否要记录域模型?它是用来生成代码的吗?