如何使用UML类图表示通过另一个类调用类的情况

4
在Android中,假设我们有两个类都有启动服务的共同方法,因此我们将它们提取到一个辅助类中:

classes of the diagram

以下图示展示了我的奇怪尝试来表示它。我使用了事务箭头,我认为那些是用于活动图,但在uml-diagrams.org/class-reference.html中,这些箭头被称为关联可导航性。这就是为什么我使用它们来尝试表示该图。在HelperClass和ClassService之间,我使用了普通的关联。在类和服务之间,我使用了限制(这只是为了更清晰而提供信息)。

my representation attempt

我在混淆类图和活动图吗? 更新1:尝试使用组件图来表示:

component diagram

注意:我最喜欢的有关如何使用组件图的解释是:https://www.ibm.com/developerworks/rational/library/dec04/bell/

更新2:尝试使用建议的更改绘制类图:

class diagram update

更新3:完整的类图。交易箭头已被关联所替代。用户和系统的交互已被移除(例如,startsWhenClick改为starts;startsWhenDetection改为starts):

full class diagram


很好。我只会将HelperClass显示为一个类,并显示它属于哪个组件。 - Gangnus
@Gangnus,我保证我实际上不知道如何表示您所说的HelperClass(作为显示其所属组件的类)。另一方面,在UPDATE 2中,我还添加了一个新的类图,试图遵循您的建议。虽然它不会与数据库相关,但对于我来说使用类图还是有点奇怪的,特别是要指定乘法。这可以吗? - chelder
看看这个版本。不,最后一个版本是走向可怕的过去的一步 :-) - Gangnus
好的。那么对于您来说,组件图是您了解的最好的图表来表示类及其方法吗?类图似乎仅适用于模型或数据库相关部分。顺便说一下,我刚刚发现我可能应该在这里提出这个问题:http://programmers.stackexchange.com/tour 感谢您的所有帮助@Gangnus! :) - chelder
不好意思,似乎我误导了你。组件图是用于组件 - 大块的多个类。有时会出现一个或两个类。您可以在其中显示整体结构以及这些块之间的信号/消息/调用。哦,应该出现在那里的类是消息类。...而类图主要是一个组件和其中的类的图表,展示它们如何看待其他类。可见性、导航性、泛化。面向对象编程模式在类图中描述。但是您的组件非常小,就像类一样小。因此,这两个图表可以混合使用。 - Gangnus
显示剩余12条评论
2个回答

1

是的,您混淆了进程和结构。类图是一种结构图,这里没有显示任何进程,只有依赖关系。您可以使用依赖关系来实例化,但这仅意味着一个类需要另一个类并用途是什么。是的,这有点关于进程,但主要是类图关于结构。

Android组件(活动,服务等)的协作应该由组件图显示,而不是类图。在那里,您可以绘制发送的消息,谁调用谁等等。类图适用于更彻底的分析。您也可以在组件图中使用一些类。但不要忘记显示类属于哪个组件,因为您在此处忘记了这样做。使用嵌套/包容关系来实现。

而且,在从活动出发的箭头上,您使用“点击”一词。您不是在尝试描述UI吗?这是另一个图表。没有标准的UI规划图,但我可以建议使用类图元素进行处理。但这不是类图,它是使用类图元素的UI图。


关于类图:
您可以从活动到服务绘制依赖关系。这些信息,例如谁开始、谁停止等,也可以在类图中的注释中或者如果不是绝对必要的话,则移动到活动图中。
在 HelperClass - ClassService 的关联中,目标方的乘法应为 0..1。服务并不总是存在,对吗?
Launcher 是一个糟糕的构造型。最好将 Launcher 给予类的名称,如果您认为它不能解释情况,请附加注释。
活动类之间的关系未被定义。
所以,看起来你已经尝试将4个图表组合成一个。这是不可能的。分开它们或至少清理你选择的那一个。如果你在选择要做哪一个图表,选择组件一 - 它是最常见的,也是最有用的。
编辑:如何显示一个类被包含在组件中 - 有两种方法。你可以将类包含到组件中,并通过嵌套关系连接它们。这两种方式在内容上是等价的。

enter image description here


我很高兴发明了一个新的图表哈哈。我更新了我的问题,加入了一个新的组件图。只是为了你的好奇心:有趣的是,我在大学里从未学过组件图。更有趣的是,与英语维基百科不同的是,西班牙语维基百科则询问用例。 - chelder

0

绘制带有操作定义的类图。并绘制序列图,您可以在其中定义两个类之间生命线之间的通信。为中介者放置第三条生命线并绘制消息。通过这种方式,您可以描述两个实例如何通过中介者进行通信。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接