类图.ppt
- 文档编号:30856458
- 上传时间:2024-03-23
- 格式:PPT
- 页数:78
- 大小:3.56MB
类图.ppt
《类图.ppt》由会员分享,可在线阅读,更多相关《类图.ppt(78页珍藏版)》请在冰豆网上搜索。
类图2007-10-8CopyRightX.Shi,DHU2本章内容类的定义类图类图的阅读类的关系高级概念34.1类的定义面向对象思想44.1类的定义面向对象思想每个对象都扮演了一个角色,并为其它成员提供特定的服务或执行特定的行为。
在面向对象世界中,行为的启动是通过将“消息”传递给对此行为负责的对象来完成的;同时还将伴随着执行要求附上相关的信息(参数);而收到该消息的对象则会执行相应的“方法”来实现需求用类和对象表示现实世界,用消息和方法来模拟现实世界的核心思想5类的定义什么是类(class)?
具有相似结构、行为和关系的一组对象的描述符。
类的组成:
属性操作shapeorigin:
pointsize:
doublefillcolor:
colorcount:
intothershape()move()resize()display()4.1.1属性标准格式:
可见性属性名:
类型多重性次序初始值特性可见性:
可访问性多重性:
属性值个数格式次序:
属性值顺序特性:
属性约束74.1.1属性可见性属性的可访问性,四类:
公共(public)私有(private)保护(protected)#实现(implementation)84.1.1属性举例:
+size:
Area=(100,100)#visibility:
Boolean=false-origin:
Point;Colors:
color3Points:
Point2.*orderedName:
String0.24.1.2操作标准格式:
可见性操作名(参数列表):
返回类型特性例:
+display()#create()attachXWindow(xwin:
XWindowPtr)+getname():
String类图vUML用类图(classdiagram)表示类、接口及其关联。
v类图用于静态对象建模。
v类图应用在领域建模和概念透视图中。
类图v名称(类名):
每个类都有一个惟一的名称。
v属性:
是已被命名的类的特性,它描述该类实例中包含的信息v操作(方法):
是类所提供的服务,它可以由类的任何对象请求以影响其行为v属性名和操作名首字母通常为小写。
属性和操作v在画类图的时候没有必要将全部的属性和操作都画出来。
实际上,在大部分情况下你也不可能在一个图中将类的属性和操作都画出来。
在画类图时可以只将感兴趣的属性和操作画出来就可以了。
可以用”.”表示还有属性或方法没有画出来。
为了更好地组织属性或方法,可以在一组功能相同的属性或方法前加上一个描述的前缀(中的文字:
类图的职责和约束、注释v职责指的是类所担任的任务,类的设计要完成什么样的功能,要存担的义务。
一个类可以有多种职责,设计得好的类一般至少有一种职责,在定义类的时候,将类的职责分解成为类的属性和方法。
v通常在UML中在类图的最下方用单独的部分列出类的职责。
v类的职责其实只是一段或多段文本描述。
v约束是指定类要满足的一个或多个规章v注释是最重要的一种修饰。
一个注释在UML中是一个图形符号,描述了和它相关联的元素或一组元素的限制或注释语。
4.2类图的阅读示例类图先看清有哪些类,然后看看类之间存在的关系,并结合多重性来理解类图的结构特点以及各个属性和方法的含义4.2类图的阅读读图过程读出类:
Order、OrderItem、Customer、Consignee、DeliverOrder、Peddlery、Prodcut读出关系:
从图中关系最复杂(也就是线最密集)的类开始阅读,本图中最复杂的就是Order类。
OrderItem和Order之间是组合关系,根据箭头的方向可知Order包含了OrderItem。
Order类和Customer、Consignee、DeliverOrder是关联关系。
也就是说,一个订单和客户、收货人、送货单是相关的。
源类及多重性目标类及多重性分析Customer
(1)Order(0n)订单是属于某个客户的,网站的客户可以有0个或多个订单Order
(1)Consignee
(1)每个订单只能够有一个收货人Order
(1)OrderItem(1n)订单是由订单项组成的,至少要有一个订单项,最多可以有n个Order
(1)DeliverOrder(1n)一个订单有一个或多个送货单说明:
系统根据订单项的产品所属的商户,将其分发给商户,拆成了多个送货单!
DeliverOrder
(1)OrderItem(1n)一张送货单对应订单中的一到多个订单项DeliverOrder
(1)Consignee
(1)每张送货单都对应着一个收货人Peddlery
(1)DeliverOrder(0n)每个商户可以有相关的0个或多个送货单OrderItem
(1)Product
(1)每个订单项中都包含着唯一的一个产品Peddlery
(1)Prodcut(0n)产品是属于某个商户的,可以注册0到多个产品4.2类图的阅读读图过程多重性:
用来说明关联的两个类之间的数量关系4.2类图的阅读读图过程理解方法与图Order类,有两个方法:
dispatch()和close(),从名字中可以猜出它们分别实现“分拆订单生成送货单”和“完成订单”。
DeliveOrder()类中则有一个Close()方法,同理它应该表示“完成送货”。
而在OrderItem中有一个stateChange()方法和deliverState,不难猜出它就是用来改变其“是否交给收货人”标志位的先调用Order的dispatch()方法,它将根据其包含的OrderItem中产品信息,来按供应商户分拆成若干个DeliverOrder。
商户登录系统后就可以获取其DeliverOrder,并在执行完后调用close()方法。
这时,就将调用OrderItem的stateChange()方法来改为其状态。
同时再调用Order的close()方法,判断该Order的所有的OrderItem是否都已经送到了,如果是就将其真正close()掉4.2类图的阅读一张复杂的类图4.2类图的阅读一张复杂的类图4.3类的关系四类基本关系:
关联(association)泛化(generalization)实现(realization)依赖(dependency)2007-10-84.3.1关联关联名导航性(navigability)从一个类(对象)可以找到另外一个,反过来却不可。
4.3.1关联关联角色(role)关联的多重性(multiplicity)表没有实例的关联00.10.n11.nn一个教师可以开设一到三门课,一门课程有一到多名教师讲授4.3.1关联受限关联(qualifiedassociation)受限关联用于一对多或多对多的关联。
限定符(qualifier)用来区分关联“多”端的对象集合,它指明了在关联“多”端的某个特殊对象。
4.3.1关联关联约束(constraint)/依赖(dependency)4.3.1关联聚合(aggregation)整体和部分的关系,个体可以属于多个整体;组合(composition)整体和部分的关系,个体唯一属于一个整体;4.3.1关联自反关联4.3.1关联派生(Derived)关联person.employer=person.department.employer一个公司有多个部门,一个职员为其中某部门工作,则可推导该职员为该公司工作4.3.2泛化Generalization,一般元素和特殊元素之间的关系。
4.3.2泛化泛化的目的:
可以使子类共享父类的属性和操作,实现继承;可以使子类的实例用于任何父类被声明使用的地方,实现多态;4.3.2泛化继承2007-10-8CopyRightX.Shi,DHU294.3.2泛化多态尽管每个子类的实现方法各自不同,但外界调用的方式完全一样:
Shape*oShape;Line*oLine;oLine=newline;oShape=oLine;oShape-draw();4.3.2泛化抽象类(abstract,斜体表示):
不能产生实例的类,因为类中的方法往往只是声明,而没有实现。
所有的基类都应该是抽象类,所有的抽象类都应该是基类。
4.3.3依赖一个元素(b)的改变会影响另外一个元素(a),则称存在依赖关系(a依赖于b)4.3.3依赖抽象(abstraction):
从一个对象中提取一些特性,并用类方法表示。
绑定(binding):
为模板参数指定值,以定义一个新的模板元素。
组合(combination):
对不同类或包进行性质相似融合。
许可(permission):
允许另一个对象对本对象的访问。
使用(usage):
声明使用一个模型元素需要用到已存在的另一个模型元素,这样才能正确实现使用者的功能(包括调用、实例化、参数、发送)。
调用(call):
声明一个类调用其他类的操作的方法。
导出(derive):
声明一个实例可从另一个实例导出。
实例(instantiation):
关于一个类的方法创建了另一个类的实例声明。
参数(parameter):
一个操作和它参数之间的关系。
精化(refine):
声明具有两个不同语义层次上的元素之间的映射。
4.3.4实现一个元素完成另外一个元素的操作功能如接口类及其实现;接口没有属性,只有声明的操作方法(对方法没有实现部分),而由实现类具体定义实现部分。
4.4高级概念四种特殊类关联类模板类主动类嵌套类4.4.1四种特殊类关联类即是关联也是类,它不仅像关联那样连接两个类,而且还可以定义一组属于关系本身的特性4.4.1四种特殊类模板类可以根据占位符或参数来定义类,而不用说明属性、方法返回值和方法参数的实际类型4.4.1四种特殊类主动类主动类的实例称为主动对象,一个主动对象拥有一个控制线程并且能够发起控制活动;它不在别的线程、堆栈或状态机内运行,具有独立的控制期。
从某种意义上说,它就是一个线程嵌套类在诸如Java的语言中,允许你将一个类的定义放在另一个类定义的内部,这就是嵌套类,在Java中也称为内层类。
嵌套类是声明在它的外层类中的,因此只能够通过外层类或外层类的对象对它进行访问4.5用例分析分析对象行为补充用例描述对每一个用例实现从用例行为中发现(分析)类把用例行为分发给(分析)类对每一个(分析)类描述职责描述属性和关系统一分析类4.5用例分析分析类边界类(Boundary)实体类(Entity)控制类(Control)4.5用例分析边界类位于系统与外界的交界处,例如窗体、对话框、报表、与外部设备或系统交互的类等等;边界类可以通过用例确定,因为活动者必须通过边界类参与用例;4.5用例分析边界类RegisterforCourses4.5用例分析实体类保存永久信息,最终可能映射数据库中的表和字段;494.5用例分析实体类RegisterforCourses(CreateSchedule)StudentScheduleCourseOffering4.5用例分析控制类协调其他类工作和控制总体逻辑流程,一般每个用例有一个控制类。
控制类会向其他类发送消息。
4.5用例分析控制类RegisterforCourses4.5用例分析例:
4.5用例分析分析类到系统设计子系统子系统接口设计类4.6绘制类图类图的抽象层次绘制步骤寻找类实例4.6.1类图的抽象层次概念类描述应有领域中的概念,仅包含类名,不考虑细节;分析类分析不针对具体语言,包含一些类的细节特性;设计类针对具体的语言,考虑类的实现细节;4.6.2绘制步骤步骤分析问题域,确定需求寻找类,确定类的含义和职责定义类的属性和操作确定类之间的关系精化类和类间的关系绘制类图4.6.3寻找类使用名词/动词分析寻找类收集相关信息补充的需求规格说明用例项目词汇表其他文档分析信息名词、名词短语动词、动词短语类或属性操作使用CRC卡片分析寻找类脑力风暴收集信息关键业务用类表示,其他卡片作为属性4.6.3寻找类确定潜在的对象类通常陈述中的名词或名词短语是可能的潜在对象,它们以不同的形式展示出来,如:
外部实体(如其它系统、设备、人员),他们生产或消费计算机系统所使用的信息;物体(如报告、显示、信函、信号),它们是问题域的一部分;发生的事情或事件(如,性能改变或完成一组机器人移动动作),它们出现在系统运行的环境中;角色(如管理者、工程师、销售员),他们由与系统交互的人扮演;组织单位(如,部门、小组、小队),他们与一个应用有关;场所(如制造场所、装载码头),它们建立问题和系统所有功能的环境;构造物(如四轮交通工具、计算机),它们定义一类对象,或者定义对象的相关类。
4.6.3寻找类回答下列问题来识别潜在对象:
是否有要储存、转换、分析或处理的信息?
是否有外部系统?
是否有模式(pattern)、类库和构件等?
是否有系统必须处理的设备?
是否有组织部分(organizationalparts)?
业务中的执行者扮演什么角色?
这些角色可以看作类,如客户、操作员等。
4.6.3寻找类筛选对象类,确定最终对象类1)保留的信息:
仅当必须记住有关潜在对象的信息,系统才能运作时,则该潜在对象在分析阶段是有用的;2)需要的服务:
潜在对象必须拥有一组可标识的操作,它们可以按某种方式修改对象属性的值;3)多个属性:
在分析阶段,关注点应该是“较大的”信息(仅具有单个属性的对象在设计时可能有用,但在分析阶段,最好把它表示为另一对象的属性);4.6.3寻找类筛选对象类,确定最终对象类4)公共属性:
可以为潜在的对象定义一组属性,这些属性适用于该对象所有发生的事情;5)公共操作:
可以为潜在的对象定义一组操作,这些操作适用于该对象所有发生的事情;6)必要的需求:
出现在问题空间中的外部实体以及对系统的任何解决方案的实施都是必要的生产或消费信息,它们几乎总是定义为需求模型中的对象。
4.6.4定义类标识属性属性表示类的稳定特征,即为了完成客户规定的目标所必须保存的类的信息,一般可以从问题陈述中提取出或通过对类的理解而辨识出属性。
分析员可以再次研究问题陈述,选择那些应属于该对象的内容,同时对每个对象回答下列问题:
“在当前的问题范围内,什么数据项(复合的和/或基本的)完整地定义了该对象?
”4.6.4定义类定义操作操作定义了对象的行为并以某种方式修改对象的属性值。
操作可以通过对系统的过程叙述的分析提取出来,通常叙述中的动词可作为候选的操作。
类所选择的每个操作展示了类的某种行为。
操作大体可分为三类:
以某种方式操纵数据的操作(如,增加、删除、重新格式化、选择);完成某种计算的操作;为控制事件的发生而监控对象的操作。
4.6.4定义类协作者一个类可以用它自己的操作去操纵它自己的属性,从而完成某一特定的责任,一个类也可和其它类协作来完成某个责任。
如果一个对象为了完成某个责任需要向其它对象发送消息,则我们说该对象和另一对象协作。
协作实际上标识了类间的关系。
为了帮助标识协作者,可以检索类间的类属关系。
如果两个类具有整体与部分关系(一个对象是另一个对象的一部分),或者一个类必须从另一个类获取信息,或者一个类依赖于(depends-upon)另一个类,则它们间往往有协作关系。
4.6.5实例发现类小王是一个爱书之人,家里各类书籍已过千册,而平时又时常有朋友外借,因此需要一个个人图书管理系统。
该系统应该能够将书籍的基本信息按计算机类、非计算机类分别建档,实现按书名、作者、类别、出版社等关键字的组合查询功能。
在使用该系统录入新书籍时系统会自动按规则生成书号,可以修改信息,但一经创建就不允许删除。
该系统还应该能够对书籍的外借情况进行记录,可对外借情况列表打印。
另外,还希望能够对书籍的购买金额、册数按特定时间周期进行统计4.6.5实例筛选备选类“小王”、“人”、“家里”很明显是系统外的概念,无须对其建模;而“个人图书管理系统”、“系统”指的就是将要开发的系统,即系统本身,也无须对其进行建模;很明显“书籍”是一个很重要的类,而“书名”、“作者”、“类别”、“出版社”、“书号”则都是用来描述书籍的基本信息的,因此应该作为“书籍”类的属性处理,而“规则”是指书号的生成规则,而书号则是书籍的一个属性,因此“规则”可以作为编写“书籍”类构造函数的指南。
“基本信息”则是书名、作者、类别等描述书籍的基本信息统称,“关键字”则是代表其中之一,因此无需对其建模;“功能”、“新书籍”、“信息”、“记录”都是在描述需求时使用到的一些相关词语,并不是问题域的本质,因此先可以将其淘汰掉;4.6.5实例筛选修选类“计算机类”、“非计算机类”是该系统中图书的两大分类,因此应该对其建模,并改名为“计算机类书籍”和“非计算机类书籍”,以减少歧义;“外借情况”则是用来表示一次借阅行为,应该成为一个候选类,多个外借情况将组成“外借情况列表”,而外借情况中一个很重要的角色是“朋友”借阅主体。
虽然到本系统中并不需要建立“朋友”的资料库,但考虑到可能会需要列出某个朋友的借阅情况,因此还是将其列为候选类。
为了能够更好地表述,将“外借情况”改名为“借阅记录”,而将“外借情况列表”改名为“借阅记录列表”;“购买金额”、“册数”都是统计的结果,都是一个数字,因此不用将其建模,而“特定时限”则是统计的范围,也无需将其建模;不过从这里的分析中,我们可以发现,在该需求描述中隐藏着一个关键类书籍列表,也就是执行统计的主体4.6.5实例得到候选类书籍计算机类书籍非计算机类书籍借阅记录借阅记录列表书籍列表在使用“名词动词法”寻找类的时候,很多团队会在此耗费大量的时间,特别是对于中大型项目,这样很容易迷失方向。
其实在此主要的目的是对问题领域建立概要的了解,无需太过咬文嚼字4.6.5实例关联分析,建模,多重性分析,再建模4.6.5实例职责分析书籍类:
从需求描述中,可找到书名、类别、作者、出版社;同时从统计的需要中,可得知“定价”也是一个关键的成员变量。
书籍列表类:
书籍列表就是全部的藏书列表,其主要的成员方法是新增、修改、查询(按关键字查询)、统计(按特定时限统计册数与金额)。
借阅记录类:
借阅人(朋友)、借阅时间。
借阅记录列表类:
主要职责就是添加记录(借出)、删除记录(归还)以及打印借阅记录4.6.5实例限定与修改导航性分析:
Book与BookList之间、BorrowRecord和BorrowList之间是组合关系均无需添加方向描述,而Book与BorrowRecord之间则是双方关联,也无需添加约束:
Book对象创建后就不能够被删除只能被修改,因此在Book类边上加上用自由文本写的约束;一本书要么属于计算机类,要么属于非计算机类,因此在ItBook和OtherBook间加了“Xor”约束限定符:
一本书只有一册,因此只能够被借一次,因此对于一本Book而言只能有一个RecordId与其对应4.7设计原则开闭原则Liskov替换原则依赖倒置原则接口分离原则1、开闭原则指一个模块在扩展性方面是开放的,在更改性方面是封闭的。
下例:
oupput逻辑复杂,修改复杂1、开闭原则开闭原则添加具有print方法的接口。
2、Liskov替换原则子类可以替代父类出现在任何父类出现的地方3、依赖倒置原则依赖关系尽量依赖接口(或抽象类),而不是依赖具体类。
4、接口分离原则设计时采用多个与特定客户类有关的接口比采用一个通用的接口好。
4、接口分离原则识识别别类类通通过过名名词词识识别别法法和和系系统统实实体体识识别别法法等等方方法法可可以以识识别别出出系系统统的的十十二二个个类类,以以下下用用类类图图这这种种简简单单明明了了的的方方法法分分别别表表示示出出类类的名称,属性的名称,属性操作。
见下图:
操作。
见下图:
医生医生用户名用户名密码密码查看病情报告()查看病情报告()要求打印病情报告()要求打印病情报告()查看病历()查看病历()要求打印病历()要求打印病历()病人病人姓名姓名性别性别年龄年龄病症病症提供病症信号()提供病症信号()用户名用户名密码密码查看病情报告()查看病情报告()打印病情报告()打印病情报告()值班护士值班护士病症监视病症监视采集频率采集频率病症信号病症信号格式化信号数据()格式化信号数据()采集信号()采集信号()信号组合()信号组合()练习:
建立练习:
建立“医院病房监护系统医院病房监护系统”的类与的类与对象模型对象模型值班护士值班护士医生医生病人病人病症监视病症监视中央监护系统中央监护系统报警信号报警信号标准病症信号库标准病症信号库病历库病历库病人病症信号病人病症信号病情报告病情报告病历病历标准病症信号标准病症信号病人病症信号病人病症信号脉搏脉搏血压血压体温体温生成病症信号()生成病症信号()病历病历格式格式病人基本情况病人基本情况打印时间打印时间生成病历()生成病历()查看病历()查看病历()打印病历()打印病历()标准病症信号标准病症信号脉搏脉搏血压血压体温体温生成标准信号()生成标准信号()标题标题格式格式生成病情报告()生成病情报告()查看病情报告()查看病情报告()打印病情报告()打印病情报告()病情报告病情报告报警信号报警信号声音声音灯光灯光文字文字报警()报警()数模转化()数模转化()病历库病历库类型类型大小大小容量容量生成病历()生成病历()更新病历()更新病历()查看病历()查看病历()打印病历()打印病历()类型类型大小大小容量容量提供标准信号()提供标准信号()标准病症信号库标准病症信号库输入输入输出输出分解信号()分解信号()比较信号()比较信号()报警()报警()数据格式化()数据格式化()中央监护系统中央监护系统类的识别类的识别
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 类图