因此,我参与了涉及序列图的软件工程课程作业。它是其中一个以如此快的速度被覆盖的东西之一,我只是填补空白,但不完全确定发生了什么。< / p>
无论如何,说我有对象A和对象B.说A启动B.然后我们将有一个功能&#34; powerOn()&#34;用箭头指向A,是吗?
现在,这个函数是B的函数还是A的函数?我认为它将是B的函数,并且A调用该函数,因为对于对象C可能有另一种方式,例如,启动B,你肯定不会有单独的功能对于每一个,你只需要在B上调用该函数。这是正确的吗?
更一般地说,是从A到B的任何函数,在这种情况下,它总是箭头所指向的对象的函数吗?
即。它们是否会作为对象A或B中的函数包含在类图中?
答案 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
上执行相同的功能。
它们是否会作为对象
A
或B
中的函数包含在类图中?
在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
方法的操作,
比如在同一台机器上发出“嘟嘟”声或打开灯。
我喜欢在序列图中添加<<start>>
状态和<<finish>>
状态,以使图表更清晰,即几个类中的一系列操作。
这不常见,但有效。