咨询:Professor与Student实现Person接口在两种UML交互图中的表示
当然可以在通信图(Communication Diagram)和系统序列图(System Sequence Diagram)里呈现这种接口实现的关系!下面我分别给你拆解说明~
1. 通信图的呈现方式
通信图聚焦于对象之间的消息传递,接口实现的关系可以通过对象的类型标注来明确体现。毕竟通信图里的每个对象都对应类图中的某个类,我们可以直接在对象标识里补充它实现的接口信息。
举个简单的场景:假设一个Course对象需要从教授和学生那里获取个人信息,而getInfo()方法正是定义在Person接口里的。对应的通信图可以这么呈现:
- 参与交互的对象:
CS101:Course(一门课程对象)Smith:Professor <<实现>> Person(Smith教授对象,标注它实现了Person接口)Alice:Student <<实现>> Person(Alice学生对象,标注它实现了Person接口)
- 消息交互流程:
CS101向Smith发送getInfo()消息(这个方法来自Person接口)Smith返回包含姓名、职称的信息给CS101CS101向Alice发送getInfo()消息Alice返回包含姓名、学号的信息给CS101
如果用简洁的符号化写法,会是这样:
CS101:Course --> Smith:Professor <<实现>> Person : getInfo() Smith:Professor <<实现>> Person --> CS101:Course : "Smith, 教授" CS101:Course --> Alice:Student <<实现>> Person : getInfo() Alice:Student <<实现>> Person --> CS101:Course : "Alice, 2023001"
2. 系统序列图的呈现方式
系统序列图主要展示外部参与者和系统之间的交互,但如果需要体现系统内部对象的接口实现关系,同样可以在内部对象的标注里补充说明。
比如我们设计一个场景:管理员(外部参与者)请求系统获取某个人员的信息,系统根据人员ID判断是教授还是学生,实例化对应的对象(都实现Person接口)并调用接口方法:
- 参与者:
Admin(外部管理员)SchoolSystem(学校系统)- 内部对象:
TargetPerson:Professor <<实现>> Person或TargetPerson:Student <<实现>> Person
- 交互流程:
Admin向SchoolSystem发送retrievePersonInfo("P001")请求(P001是教授ID)SchoolSystem实例化DrBrown:Professor <<实现>> Person对象SchoolSystem调用DrBrown的getInfo()方法(来自Person接口)DrBrown返回个人信息给SchoolSystemSchoolSystem将信息返回给Admin
如果是学生ID的情况,只需要把内部对象换成Bob:Student <<实现>> Person即可,调用的getInfo()方法依然是Person接口定义的。
补充说明
要注意的是,类图是用来定义静态结构的,重点在类、接口之间的继承/实现关系;而通信图和系统序列图是展示动态交互的,接口实现关系更多是作为对象的“能力说明”标注出来,让看图的人清楚这个对象能够响应哪些来自接口的消息。
内容的提问来源于stack exchange,提问作者EliiTryToLearn
相关产品推荐
相关产品推荐

