基于含组合关系的类图制作序列图:消息4与5的正确性疑问
类图与时序消息绘制规范(针对你的场景)
先明确你的核心结构对应的UML规则,再针对消息4/5的常见误区说明:
核心场景的UML基础
- Teacher与Classroom/Announcement:时序图中,Teacher向Classroom发送
createAnnouncement()消息,Classroom实例化Announcement(或Teacher直接实例化Announcement并关联到Classroom,取决于业务逻辑) - Announcement与File的组合关系:组合意味着Announcement是File的生命周期所有者,创建File实例的消息必须由Announcement发起,File实例不能脱离Announcement存在
- File的子类:VideoFile和DocumentFile是File的具象子类,实例化时必须指向具体子类,不能直接实例化抽象类File;DocumentFile的PDF/图片类型属于属性枚举,无需额外类或消息,在DocumentFile类中添加
fileType: {PDF, Image}属性即可
消息4/5的正确绘制方式
假设消息4/5是与File子类相关的交互,分两种常见场景:
场景1:Announcement创建File子类实例(组合关系的核心交互)
- 箭头方向:
Announcement → VideoFile或Announcement → DocumentFile - 消息标注:
create(fileType: PDF)(如果是DocumentFile)或create()(VideoFile) - 错误误区:不要把消息指向抽象类File,因为抽象类无法被实例化,组合关联的是具体子类实例
场景2:File子类向Announcement反馈状态(比如上传完成)
- 箭头方向:
VideoFile → Announcement或DocumentFile → Announcement - 消息标注:
notifyStatus(completed) - 错误误区:不要颠倒箭头方向,反馈类消息是由子对象向所有者发送
补充说明
如果消息4/5是涉及Teacher与File的交互,那不符合组合关系的规则——因为组合下File的所有者是Announcement,Teacher不能直接操作File,必须通过Announcement转发消息,比如Teacher → Announcement: uploadDocument(fileType: Image),再由Announcement创建DocumentFile实例(对应消息4)
内容的提问来源于stack exchange,提问作者Ringer
相关产品推荐
相关产品推荐

