序列图和类图:哪个对象应该是函数的一部分?

时间:2014-10-13 00:14:16

标签: uml class-diagram sequence-diagram

因此,我参与了涉及序列图的软件工程课程作业。它是其中一个以如此快的速度被覆盖的东西之一,我只是填补空白,但不完全确定发生了什么。< / p>

无论如何,说我有对象A和对象B.说A启动B.然后我们将有一个功能&#34; powerOn()&#34;用箭头指向A,是吗?

现在,这个函数是B的函数还是A的函数?我认为它将是B的函数,并且A调用该函数,因为对于对象C可能有另一种方式,例如,启动B,你肯定不会有单独的功能对于每一个,你只需要在B上调用该函数。这是正确的吗?

更一般地说,是从A到B的任何函数,在这种情况下,它总是箭头所指向的对象的函数吗?

即。它们是否会作为对象A或B中的函数包含在类图中?

2 个答案:

答案 0 :(得分:0)

A类知道B对象的存在并且引用它们的事实由关联A-> B表示。

A实例可以调用其中一个B实例的某个函数的事实不是通过类图显示,而是通过更彻底的复合结构图显示。在类图中,您只能通过注释来提及它。

选择的问题:如果使函数改变B实例的状态B或A类的部分不是UML问题,那就是OOP问题。是的,更常见的是将函数放入B中进行封装和隔离更好,对于其他情况,你必须允许A直接使用B的状态,什么是糟糕的OOP行为。 (但我们根本不知道你是否在OOP工作,所以你不可能说你必须这样做)

答案 1 :(得分:0)

关于您的问题:

  
    

然后我们将有一个函数“powerOn()”,箭头指向A,是否正确?

  

  
    

现在,这个函数是B的函数,还是A的函数?

  

B的函数,但是,将从A

中的函数执行
  
    

你只需要在B上调用该函数。这是对的吗?

  

每个类都有代码,在B上执行相同的功能。

  
    

它们是否会作为对象AB中的函数包含在类图中?

  

B

现在,让我们有一个真实世界的例子。

让我们有一个名为FastFoodVendingMachineClass的类,就像你的例子中的B类一样。

让我们有另一个名为CatClass的类,就像你的例子中的A类一样。

FastFoodVendingMachineClass类表示执行多项操作的自动售货机,a.k.a“方法”。

(简化)类图:

...................................................................
....+-----------------------------------------------------------+..
....|                          <<class>>                        |..
....|                FastFoodVendingMachineClass                |..
....+-----------------------------------------------------------+..
...................................................................

CatClass表示同时执行多项操作的用户,a.k.a“方法”。

(简化)类图:

...................................................................
....+-------------------------------------------------+............
....|                    <<class>>                    |............
....|                    CatClass                     |............
....+-------------------------------------------------+............
...................................................................

现在,小猫,是一个训练有素的宠物,饥肠辘辘,想要得到一些食物, 从机器。所以,它从它的主人那里得到钱,然后走进机器, 插入钱,选择一个按钮,然后获取食物。

用类描述的对象/主题都会执行多个操作, 对自己或对他人。

如何看待序列图?

序列图:

................................................................................
.............+--------------+..............+-----------------------------+......
.............|   CatClass   |..............| FastFoodVendingMachineClass |......
.............+-------+------+..............+--------------+--------------+......
.....................|....................................|.....................
...................+-+-+................................+-+-+...................
......<<start>>....|   |................................|   |...................
..(*)=============>|   +---+............................|   |...................
...................|   |...|............................|   |...................
...................|   |...|..<<returns>>...............|   |...................
...............+===+   +<--+............................|   |...................
..............."...|   |................................|   |...................
....GetFood().."...|   |................................|   |...................
..............."...|   |..........InsertMoney().........|   |...................
...............+==>+   +===============================>+   +---+...............
...................|   |................................|   |...|...............
...................|   |..........<<returns>>...........|   |...|...............
...............+===+   +<-------------------------------+   |<--+...............
..............."...|   |................................|   |...................
.....Insert...."...|   |................................|   |...................
.....Money....."...|   |.....ReceiveMoney(Price)........|   |...................
.....(Price)...+==>+   +===============================>+   +---+...............
...................|   |................................|   |...|...............
...................|   |..........<<returns>>...........|   |...|...............
...............+===+   +<-------------------------------+   |<--+...............
..............."...|   |................................|   |...................
.....Select...."...|   |................................|   |...................
.Fishburguer()."...|   |.....SelectProduct(Option)......|   |.....Product.=.....
...............+==>+   +===============================>+   +---+.Release.......
...................|   |................................|   |...|.Product.......
...................|   |............Product.............|   |...|.(Option)......
...............+---+   +<-------------------------------+   |<--+...............
..<<returns>>..|...|   |................................|   |...................
...............|...|   |..........<<returns>>...........|   |...................
...............+-->+   +------------------------------->+   +---+.Change.=......
...................|   |................................|   |...|.Return........
......<<finish>>...|   |.............Change.............|   |...|.Option()......
..(O)<=============|   |<-------------------------------+   |<--+...............
...................|   |................................|   |...................
...................+-+-+................................+-+-+...................
.....................|....................................|.....................
.....................X....................................X.....................
................................................................................

而且,更详细的类图:

...................................................................
....+-------------------------------------------------+............
....|                    <<class>>                    |............
....|                    CatClass                     |............
....+-------------------------------------------------+............
....| [+] bool: GetFood();                            |............
....| [+] void: InsertMoney(Currency Price);          |............
....| [+] void: SelectFishburguer();                  |............
....+-------------------------------------------------+............
...................................................................

...................................................................
....+-----------------------------------------------------------+..
....|                          <<class>>                        |..
....|                FastFoodVendingMachineClass                |..
....+-----------------------------------------------------------+..
....| [+] void: ReceiveMoney(Currency Price);                   |..
....| [+] void: SelectProduct(int Option);                      |..
....| [+] Product: ReleaseProduct(int Option);                  |..
....| [+] void: NotifyEmpty();                                  |..
....| [+] Currency: ReturnChange();                             |..
....+-----------------------------------------------------------+..
...................................................................

将类图与序列图进行比较。请注意,从一个条形到另一个条形的箭头表示一个对象(“类的实例”)从另一个对象执行方法。

另请注意,有时,同一个对象可能会从同一个对象调用另一个方法。

例如,FastFoodVendingMachineClass类具有SelectProduct方法,该方法在执行时可以执行ReleaseProduct方法。但是,如果, 小猫按了一个食物用完的选项?

SelectProduct方法将执行类似NotifyEmpty方法的操作, 比如在同一台机器上发出“嘟嘟”声或打开灯。

我喜欢在序列图中添加&lt;&lt;start&gt;&gt;状态和&lt;&lt;finish&gt;&gt;状态,以使图表更清晰,即几个类中的一系列操作。

这不常见,但有效。