关于您的问题:
那么我们将有一个函数“powerOn()”,其中一个箭头指向 A,对吗?
是的。
现在,这个函数是 B 的函数还是 A 的函数?
B 的函数,但是,将从A 中的函数执行
您只需调用B 上的函数即可。这是正确的吗?
每个类都有在B上执行相同功能的代码。
它们会作为函数包含在对象A 或B 中吗?
在B。
现在,让我们举一个真实世界的例子。
让我们创建一个名为 FastFoodVendingMachineClass 的类,就像您的示例中的 B 类。
让我们创建另一个名为 CatClass 的类,就像您的示例中的 A 类。
FastFoodVendingMachineClass 类表示自动售货机,它执行多种操作,也称为“方法”。
(简化)类图:
...................................................................
....+-----------------------------------------------------------+..
....| <<class>> |..
....| FastFoodVendingMachineClass |..
....+-----------------------------------------------------------+..
...................................................................
CatClass 代表一个用户同时执行多个操作,也就是“方法”。
(简化)类图:
...................................................................
....+-------------------------------------------------+............
....| <<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; 状态,使图表更清晰,即几个类之间的一系列操作。
这不是很常见,但是,是有效的。