如何在静态UML模型中表示基于事件的体系结构?

时间:2009-07-13 15:33:45

标签: events uml

我有一个相当基本的基于C#事件的系统,但我不确定我是如何在UML中建模的。我很想显示事件发布者,订阅者,处理程序和EventArgs类。我认为你使用'信号'但我找不到任何例子。任何人都能指出一个例子或放弃任何光明吗?

由于

编辑:我正在创建一个静态模型,我不需要在整个过程中表示状态或路径。对不起,如果我在最初的问题中没有说清楚的话......

6 个答案:

答案 0 :(得分:5)

“发布者 - 订阅者”对模式(a.k.a“观察者”)可以在每个编程(语言)框架中实现不同,因此,在U.M.L中设计不同。

任何方式,从概念上讲,当发布事件(“信号”或“消息”)从发布者(也称为“服务器”)发送到任何订阅者(“客户端”)时,有时候,“id”用于标识特定事件,来自其他事件,其提供的,以及一些其他参数或数据也被发送。

正如其他答案已经提到的那样,您可能需要(类)图来描述静态模型。 (注意,有一个“聚合”,而不是“组合”,“关联”可以使用):

..............................
+--------------------------+..
|      <<Publisher>>       |..
|      VectorDrawApp       |..
+--------------------------+..
| [+] create()             |..
+--------------------------+..
| [+] send(EventArgs e)    |..
+------------+-------------+..
............/ \...............
............\ /...............
.............|................
.............|................
+------------+-------------+..
|      <<Subscriber>>      |..
|          Figure          |..
+--------------------------+..
| [+] create()             |..
+--------------------------+..
| [+] receive(EventArgs e) |..
+--------------------------+..
..............................
+--------------------------+..
|        <<Event>>         |..
|        EventArgs         |..
+--------------------------+..
| [+] Sender: TObject      |..
+--------------------------+..
| [+] receive(EventArgs e) |..
+------------+-------------+..
.............|................
.............+................
............/ \...............
...........+---+..............
.............|................
+------------+-------------+..
|        <<Event>>         |..
|  FillEventArgs: EventArgs|..
+--------------------------+..
| [+] ForeColor            |..
| [+] BackColor            |..
| [+] FillStyle            |..
+--------------------------+..
..............................

而且,您可能需要一个图表来描述动态模型:

.........................................
+----------------+..+----------------+...
| <<Publisher>>  |..| <<Subscriber>> |...
|  VectorDrawApp |..|      Figure    |...
+--------+-------+..+--------+-------+...
.........|...................|...........
.......+-+-+...............+-+-+.........
.......|   |...send(fill)..|   |..Fill().
.......|   +==============>+   +---+.....
.......|   |...............|   |...|.....
.......|   |...<<return>>..|   |...|.....
.......|   |<--------------+   +<--+.....
.......|   |...............|   |.........
.......+-+-+...............+-+-+.........
.........|...................|...........
.........X...................X...........
.........................................

在U.M.L.的刻板印象是你的“喝酒伙伴”, 并允许你描述或限制演员,对象,类, 特质或界面确实。

当你使用它们时,突出显示一个对象或类, 是类或实现的子类, 与活动相关的界面, 这是模型,即使有其他父类, 或接口。

干杯。

答案 1 :(得分:2)

如lexu和John所示,您可以使用状态图和活动图来模拟系统的某些动态方面。

对于静态模型,您可以为类可以作为操作处理的事件建模。您可以使用构造型(<<event>>)来区分这些操作与其他操作(例如,同步调用的方法)。

答案 2 :(得分:0)

使用状态图或活动图。

答案 3 :(得分:0)

查看here状态图示例和here活动图,然后选择适合您需求的内容!

答案 4 :(得分:0)

我可能只是使用逻辑组件模型来表示源/消费者和陈规定型的操作来描述交互。

然而,作为一个左派的想法 - 另一种可能性对我而言......

我想知道您是否可以利用BPMN的某些方面。 - 许多uml工具,如sparx ea包含它

它的消息语法应该允许您描述源事件,并且您可能能够使用池或活动描述消费者/处理程序 - 而不必关心自己的内部行为。(我正在考虑一个抽象级别类似于布鲁斯·西弗的“level1”BPMN) 同样,您可以使用消息传递交互来分离有效负载/ EventArgs

如果您使用类似于sparx的东西,您可以将bpm元素中的跟踪依赖性添加到c#代码的“真实”类模型中。

答案 5 :(得分:0)

从实体生活历史角度处理问题(事件建模,参考,例如,Jackson System [of] Development):

UML and Data Modeling: A Reconciliation By David C. Hay 参考。第34页

Software Evolution with UML and XML edited by Hongji Yang &#39;实体生活历史 - 问题和问题&#39;,p142 - 我不同意btw,序列诊断。如果仅限于有关实体,可以相对容易地使用,而国家诊断。已成功说明Software Systems Architecture, Nick Rozanski, Eoin Woods,&#39;信息生命周期模型&#39;,第317页。