【问题标题】:Class Diagram UML modelling for Events事件的类图 UML 建模
【发布时间】:2020-05-22 04:51:38
【问题描述】:

python 中有一个名为“events”的模块,我们可以从中导入一个名为“Events”的对象。 URL for events module

对象可以向对象注册回调方法,其他对象可以调用事件的成员。例如。如下图:

from events import Events

#Implementation of Events
class EventGroup(Events):
  __events__ = ('eventOne', 'eventTwo', 'eventThree')

eventGroupOne = EventGroup()


#This class subscribes to the events
class Subscriber():
  def __init__(self):
    eventGroupOne.eventOne += self.onEventOne

  def onEventOne(self):
    print("EventOne invoked")


#This class invokes the events
class Invoker():
  def someFunction(self):
    eventGroupOne.eventOne()

我们如何在类图 UML 中显示 EventGroup、Subscriber 和 Invoker 类之间的关系?

【问题讨论】:

  • 由于您使用在 __main__ 中声明的全局变量,因此您没有纯 OO 方法。因此,基于此处可以回答的内容,任何事情都是意见。所以我撤回了我的意见并投票结束。
  • @qwerty_so :没有必要撤回您的答案。我以同样的方式开始我的类图,但我觉得有更好的答案。但是,这是你的决定,我尊重它。
  • 您介意告诉您建议对上述代码进行哪些更改以使其成为 OO 吗?
  • 对不起,我可能会在这里问一个非常基本的问题。让我们忘记这里的 main。我在上面的代码中所做的就是导入一个模块,定义三个类,并实例化一个对象。这还不足以在不违反 OOP 的情况下创建类图吗?
  • 没有。你突然使用eventGroupOne。它应该是一个类的属性。但事实并非如此。

标签: python uml object-oriented-analysis


【解决方案1】:

如果您严格遵循定义,则类图只能显示使用过的成员:

在那种情况下,eventOne、eventTwo 和 eventThree 仅在对象图中可见


另一种作弊方式是考虑 eventOne、eventTwo 和 eventThree 是 EventGroup 的属性:

【讨论】:

  • 我喜欢你的第一种方法。您能否提供图表中使用的箭头的含义,因为箭头的含义有时会有所不同?
  • @sulavshr <|---- 是对应于继承的泛化。 <------ 是关联,我宁愿不使用 Events 和 _EventSlots 之间的组合 (<*>----->) 而不仅仅是关联。 <- - - - - 是依赖项
  • @bruno,哇很好的解释,回答感谢分享。
猜你喜欢
  • 2018-07-31
  • 1970-01-01
  • 1970-01-01
  • 2013-03-01
  • 1970-01-01
  • 2015-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多