【问题标题】:How to show the relationship between a class and another class that takes the instance of the class's instance as an input with a sequence diagram?如何用序列图显示一个类和另一个以类的实例作为输入的类之间的关系?
【发布时间】:2021-04-04 06:56:14
【问题描述】:

我将使用我之前的 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, steel, money):
        self.name = name
        self.steel = steel
        self.money = money
   
    def buildHouse():
        house = House(self.steel, self.money)

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

【问题讨论】:

    标签: python class uml class-diagram sequence-diagram


    【解决方案1】:

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

    序列图的目标不是显示类之间的关系,序列图通过关注类之间的序列来描述交互生命线上交换的消息,以及它们对应的OccurrenceSpecificationsformal/2017-12-05 § 17.8 序列图

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

    (我为 buildHouse 使用了 found 消息,因为调用者未知且与您的问题无关)

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

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

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

    如果您在我的 answer 中引用您的 previous question,我不使用 composition,因此删除 Person 的实例并不意味着删除House 的关联实例。

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

    【讨论】:

    • 非常感谢@bruno!这只是一个玩具示例,我了解在我的复杂架构上实现它的逻辑。是的,在这个例子中,房子将被垃圾收集器删除。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多