如何使用序列图显示一个类和另一个类之间的关系,该类将类的实例的实例作为输入?

问题描述

我将使用与之前的 question 相同的示例并对其进行修改

我有一个名为 House 的类。这个类的实例是house

class House:
    def __init__(self,steel,money):
        self.steel = steel
        self.money = money

    def housePlan():
        houseHeight = self.steel/self.money
        houseEdgeLength = self.money

我还有一个类叫做 Person。此类获取多个输入并创建 House 的实例。 House 可以在没有 Person 类的情况下存在。

class Person:
    def __init__(self,name,money):
        self.name = name
        self.steel = steel
        self.money = money
   
    def buildHouse():
        house = House(self.steel,self.money)

如何用 UML 序列图显示这两个类之间的关系?

解决方法

如何用 UML 序列图显示这两个类之间的关系?

序列图的目标不是显示类之间的关系,序列图通过关注类之间的序列来描述交互交换的消息,以及生命线上相应的发生规范formal/2017-12-05 § 17.8 序列图 >)

从您的代码 buildHouse 创建一个 House 的新实例,因此有一个 对象创建消息。因为house是局部变量,实例立即丢失,然后我们可以认为它被Python的垃圾收集器立即删除,所以DestructionOccurrenceSpecification在生命线底部的 X 形式(§ 17.4.4.2 DestructionOccurrenceSpecification)。

enter image description here

(我为 buildHouse 使用了 found 消息,因为调用者是未知的,也不与您的问题相关)

House 可以在没有 Person 类的情况下存在

如果你说的是类,那肯定是的,因为 House 定义没有嵌套在 Person 中。

如果您全局谈论实例,则没有什么说只有 Person 可以实例化 House 所以也可以。

如果您在我的 previous question 中引用您的 answer,我不使用 组合,因此删除 Person 的实例不会暗示删除 House 的关联实例。

但是在 buildHouse 中,House 的新实例立即丢失,因为没有返回,也没有保存在全局变量中,也没有保存在 Person 的属性中em>,然后就会被垃圾删除

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...