1、7.8 交互图,在需求分析阶段,根据获得的用例图、活动图和状态图来细化系统的需求,找出系统中对象和对象之间的关系,反映对象之间关系的工具是交互图。 交互图有两种:一种是按时间顺序反映对象之间相互关系的顺序图;另一种是集中反映各个对象之间通讯关系的合作图。,通过创建交互图,分析人员可以逐步理清用例内的活动顺序,明确用例活动流程中需要什么对象、对象之间相互发送什么消息、什么角色启动流、消息按什么顺序发送。开发人员看到顺序图就可以明白与一个用例相关的对象有哪些,这些对象之间的关系,以及每个对象的责任。通常一个用例可能包含多个处理流程,在分析时,每个流程最好分别画顺序图。,交互图中包含对象和消息两类元
2、素,创建交互图的过程实际上是向对象分配责任的过程。但是,应特别注意:向合适的对象指定合适的责任。例如,一般应用程序中,窗口和窗体对象的主要责任是实现用户输入和信息浏览功能,不应加入太多的业务处理功能,否则,一旦业务逻辑发生变化,将会影响界面,界面的改动又会影响业务处理逻辑。,为了创建顺序图和合作图,首先要检查事件流,确定需要多少流程,一般创建主流程、替换流程和错误流程。在创建交互图时可以使用模式,例如检查用户的安全级别、错误处理日志、进程间通讯、数据库操作等等。把这些模式放入独立的交互图中,在需要它们的时候直接引用相应的模式,也就是说,这些模式具有可重用性。,注意,描述一个用例中的几个对象协同
3、工作的行为,应该使用交互图;描述跨越多个用例的单个对象的行为,应当使用状态图;如果想描述跨越多个用例的对象之间的行为则应该使用活动图。,顺序图,顺序图是按时间顺序反映对象之间传递的消息。顺序图的顶部放置相关的对象,沿对象向下的虚线表示对象的生命线,两个对象生命线之间的横线表示对象之间传递消息,消息线的箭头形状表示消息的类型。对象也可以向自己发送消息。消息线上标注消息名,也可以加上参数并标注一些控制信息。,顺序图的组成,顺序图中的对象可以是系统的参与者或者任何有效的系统对象。对象的表示形式也和对象图中的对象的表示方式一样,使用包围名称的矩形框来标记,所显示的对象及其类的名称带有下划线,二者用冒号
4、隔开,使用“对象名 :类名”的形式,对象的下部有一条被成为“生命线”的垂直虚线。,1、对象,顺序图的组成,生命线(Lifeline)是一条垂直的虚线,用来表示序列图中的对象在一段时间内的存在。每个对象的底部中心的位置都带有生命线。生命线是一个时间线,从序列图的顶部一直延伸到底部,所用时间取决于交互持续的时间,也就是说生命线表现了对象存在的时段。对象与生命线结合在一起称为对象的生命线。对象的对象存在的时段包括对象在拥有控制线程时或被动对象在控制线程通过时存在。,2、生命线,顺序图可以描述对象的激活(Activation),激活是对象操作的执行,它表示一个对象直接地或通过从属操作完成操作的过程。它
5、对执行的持续时间和执行与其调用者之间的控制关系进行建模。激活在序列图中用一个细长的矩形框表示,它的顶端与激活时间对齐而底端与完成时间对齐。激活常常省略。,3、激活,在UML中,总共有4种类型的消息,如下图所示。,1. 同步消息同步消息(synchronous message)代表一个操作调用的控制流。同步消息的发送者把控制传递给消息的接收者,然后暂停活动,等待消息接收者的应答,收到应答后才继续自己的操作。,2异步消息异步消息(Asynchronous message)用于控制流在完成前不需要中断的情况。同步消息的发送者把控制传递给消息的接收者,然后继续自己的活动,不需等待接收者返回信息或控制。
6、下面示例演示了如何在登录文件的情况下使用异步消息。,3 简单消 息如果所有的消息都是同步或者异步消息,那么为什么还要简单消息呢?因为有时候我们不关心消息是同步还是异步,此外在高层分析中,有时候没有必要指定一个消息是同步的还是异步的。如下面的示例所示。,消息的语法格式:警戒条件消息序号返回值:=消息名(参数列表),例如:2:display(x,y) 简单消息1.2.1:p:=find(specs) 嵌套消息,消息带返回值x04:invert(x,color) 条件消息3.1 *update() 循环消息,零售业务顺序图,如何建立顺序图 从用例中识别交互过程; 识别参与交互过程的对象; 为每一个对
7、象设置生命线,并确定对象的存在期限; 从引发交互的初始消息开始,在对象生命线上依次画出交互的消息; 如果需要,可以给消息增加时间约束,以及前置条件和后置条件。,实例:图书馆借书处理的顺序图, 用例:借书 参与者:管理员,借阅者 操作流: 管理员进入图书借阅界面,用例开始。 系统要求输入借阅者的借书证编码。系统检验借书证编码,如果正确,则显示借阅者的信息。A1:借书证编码有错。A2: 如果该借阅者所借图书已经超期,则提示,本次拒借. 系统要求输入所借图书的条码。 系统显示所借图书的信息。 确认借书。系统回到上一界面,等待处理下一借书。,实例:图书馆借书处理的顺序图,实例:图书馆借书处理的顺序图,
8、教学进程, 识别交互过程。读者在借书时,先由管理员把借书证上的读者编号扫描给系统,系统检查这个读者的借书证合法信息,如果不合法,则系统给出提示,如果正确系统返回读者的身份信息,以及读者的借阅信息。如果读者借书数量没有超过借书的上限,则把要借书的图书编号输入系统,系统登记借书信息,并返回借书成功信息,借书过程完成。,实例:图书馆借书处理的顺序图,教学进程, 识别参与交互过程的对象;,教学进程,绘制借书处理类图,实例:图书馆借书处理的顺序图,教学进程, 为每一个对象设置生命线,并确定对象的存在期限; 从引发交互的初始消息开始,在对象生命线上依次画出交互的消息 绘制顺序图,协作图,协作图也是反映用例
9、中各个对象之间消息传递的图形工具。在顺序图中,消息按时间顺序排序,而在合作图中,不反映消息的时间顺序,但更容易看出对象之间的关系。 UML中提供了顺序图和协作图的相互转换,协作图的元素,一个协作代表了为了完成某个目标而共同工作的一组对象。 协作图中对象的表示形式也和序列图中的对象的表示方式一样,使用包围名称的矩形框来标记,所显示的对象及其类的名称带有下划线,二者用冒号隔开,使用“对象名 :类名”的形式,与序列图不同的是,对象的下部没有一条被成为“生命线”的垂直虚线,并且对象存在多对象的形式。,1、对象,在协作图中,可以通过一系列的消息来描述系统的动态行为。在协作图中,消息使用带有标签的箭头来表
10、示,它附在连接发送者和接收者的链上。链连接了发送者和接收者,消息箭头的指向便是接收者。每个消息包括一个顺序号以及消息的名称。消息的名称可以是一个方法,包含一个名字和参数表、可选的返回值表。消息的各种实现的细节也可以被加入,如同步与异步等。,2、消息,在协作图中的链和对象图中链的概念和表示形式都相同。在协作图中,链的表示形式为一个或多个相连的线或弧。在自身相关联的类中,链是两端指向同一对象的回路,是一条弧。如下图所示,是链的普通和自身关联的表示形式。 为了说明对象是如何与另外一个对象进行连接的,我们还可以在链的两端添加上提供者和客户端的可见性修饰。,3、链,建立协作图 : 从用例中识别交互过程;
11、 识别参与交互过程的对象; 确定对象之间的链,以及链上的消息; 从引发交互的初始消息开始,将随后每个消息附在相应的链上; 如果需要,可以给消息增加时间约束,以及前置条件和后置条件。,实例:图书馆借书处理的协作图,教学进程,顺序图与协作图的异同,7.9 类图,面向对象方法的三个最重要的技术是用例图、交互图和类图。无论是面向对象的分析还是面向对象的设计和实现,类图都是最核心技术。它不仅能够表现信息的结构,还能够反映系统的行为。 类图以反映类的结构(属性、操作)以及类之间的关系为主要目的,描述了软件系统的结构,是一种静态建模方法 事实上,软件开发不同时期的类图反映了不同层次上的抽象。,类的概念,1.
12、 类的定义类(class): 具有相似结构、行为和关系的一组对象。2.类的表示,类名,属性,操作,类的其他几种表示形式, 简化表示, 缩略表示,实体类,界面类,控制类,类名, 名词或名词短语(动词或动词短语表示控制类), 尽可能用明确、简短,业务领域中事物的名称, 避免使用抽象、无意义的名词,例如:人,桌子,图形,汇总, 用英文,第1个字母大写,例如:Shape, Person, CheckingAccdount, 可分为简单类名,带路径类名,例如: CheckingAccdountBanking:CheckingAccdount,例如:帐户,订单,事物,问题:,教学进程,1、指出下面命名有问
13、题的的类。,?,类的属性,1. 属性的含义属性(attribute): 描述类所表示事物的静态性质。2.属性的格式,可见性属性名:类型 多重性次序=初始值特性,类的属性,1. 属性的含义属性(attribute): 描述类所表示事物的静态性质。2.属性的格式,第1个英文单词首字母小写,其它单词首字母大写contactNamecredintLimitisPrepaid,可见性属性名:类型 多重性次序=初始值特性,类的属性,1. 属性的含义属性(attribute): 描述类所表示事物的静态性质。2.属性的格式,该属性对外部实体的显现程度.可见public : + 受限protected: #私有
14、private : -,可见性属性名:类型 多重性次序=初始值特性,类的属性,1. 属性的含义属性(attribute): 描述类所表示事物的静态性质。2.属性的格式,属性的数据类型:字符串:String日期:Date布尔:Boolean整型:int,可见性属性名:类型 多重性次序=初始值特性,类的属性,1. 属性的含义属性(attribute): 描述类所表示事物的静态性质。2.属性的格式,表示属性值的取值的多寡,以及有序性:例如: name:String01表示属性”name”可能无值,也可能仅有一个值.points:Point2* ordered表示有两个或多个值,有序,可见性属性名:类
15、型 多重性次序=初始值特性,类的属性,1. 属性的含义属性(attribute): 描述类所表示事物的静态性质。2.属性的格式,表示属性初始所取的值:例如: #visibility:Boolean=false表示属性”visibility”初始取”false”,可见性属性名:类型 多重性次序=初始值特性,类的属性,1. 属性的含义属性(attribute): 描述类所表示事物的静态性质。2.属性的格式,表示属性约束说明:例如: #visibility:Boolean=false读写表示属性”visibility”可读,写,可见性属性名:类型 多重性次序=初始值特性,问题:,教学进程,1、指出下
16、面属性名的含义。,?,+studentName:String=“黎明” #studentBirthDay:Date=1999-10-21 -price:float=12.01R/W,类的操作,1. 操作的含义操作(operation): 描述类所表示事物的动态性质。2.操作的格式,可见性操作名(参数列表):返回类型特性,类的操作,1. 操作的含义操作(operation): 描述类所表示事物的动态性质。2.操作的格式,可见性操作名(参数列表):返回类型特性,第1个英文单词首字母小写,其它单词首字母大写close()creditRecording(),类的操作,1. 操作的含义操作(operat
17、ion): 描述类所表示事物的动态性质。2.操作的格式,该操作对外部实体的显现程度.可见public : + 受限protected: #私有private : -,可见性操作名(参数列表):返回类型特性,类的操作,1. 操作的含义操作(operation): 描述类所表示事物的动态性质。2.操作的格式,该操作的输入参数,可以为空.例如: #create()+hide()-ttachXWindow(xwin:Xwindow),可见性操作名(参数列表):返回类型特性,类的操作,1. 操作的含义操作(operation): 描述类所表示事物的动态性质。2.操作的格式,该操作的返回值的类型.例如:
18、+display():Location,可见性操作名(参数列表):返回类型特性,问题:,教学进程,1、指出下面操作名的含义。,?,+setName(String:name) +getName():String +creatbook(),类的类型,边界类位于系统与外界的交界处,承担系统与外界的信息功能.,1.边界类,边界类处在用例图中,参与者与用例的关联处,可以根据用例图发现边界类。,实体类对应着现实中的客观实物,用来保存信息,一般对应着数据表、文件等。,2.实体类,实体类可以从现实中存在的客观事物,以及需要持久存放的信息两方面来发现。,控制类承担着事务处理,控制调控的控制作用。,3.控制类,一
19、个用例中最少会有一个控制类,用来控制用例中的事件顺序,也可以在多个用例之间协调用例之间的联系。,一个例子:订货系统,类之间的关系有关联关系、组成关系、泛化关系。要寻找关系,可以检查交互图,大多数关系信息已经在交互图中列出,重温这些图,获得类之间的关系。,关联,1. 关联的定义关联的通俗含义:表示事物之间的一种固有联系,描述类的结构之间的关系。例如:,关联,关联,1. 关联的定义关联(association): 模型元素之间的一种语义联系,它是对具有共同的结构特性、行为特性、关系和语义的链接的描述。关联可以分为单向关联,双向关联。,单向关联,双向关联,2.关联的特性, 关联名,关联名,如果关联关
20、系已经清楚,就无需关联名,2.关联的特性, 关联的角色,如果关联名与角色名相同,则不标出角色名,关联的角色,2.关联的特性, 关联的多重性,01 : 0或1 0n ,0* : 0或多 1 1n : 1到多 * : 0到多,关联的角色,关联的多重性,2.关联的特性, 关联类,通过关联类描述关联的属性,操作,及其它信息。,关联类,2.关联的特性, 关联的约束,通过约束加强关联的含义。 例如,“帐户”不能同时与“人”和“公司”有关联。,约束,2.关联的特性, 限定关联,通过限定符来规定关联的限定关系,可消除多重性. 例如,“文件目录”通过“文件名”来与具体的文件对象进行关联。“银行”通过“帐号”与具体的“帐户”对象进行关联。,限定关联,3.关联的种类, 一元(自返)关联, 二元关联,3.关联的种类, 多元关联,三元关联,问题:,教学进程,“班级”和“班长”两个类之间存在管理关系,一个班级仅可以有一个班长,一个班长只能是一个班级的班长,标出这两个类的关系。,?,