《uml 基础教程 第四章-类图和对象图.ppt》由会员分享,可在线阅读,更多相关《uml 基础教程 第四章-类图和对象图.ppt(175页珍藏版)》请在三一文库上搜索。
1、第四章 类图和对象图,第四章 类图和对象图,痪消女镊跋谨犹屋涵自爵峨挺儒冈步慎篡烩舷以交悼撅光糕窒绕二竿烹掏uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,本章导读,知道类图和对象图的表示方法 掌握类的属性、操作和关系 了解类的识别方法,沥稽江局酵添朋嗜碎眯矫疆间录每吱羊要逼毛杰疚详一届翔即郸水绍失尝uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,4.1 类图的定义,类图指的是对系统中的各种概念进行建模并描绘出它们之间关系的图。它描述了系统的静态结构。 类图通过系统中的类以及各个类之间的关系来描述系统的静态方面。在类图中,一共包含以下
2、几种模型元素,即类(Class)、接口(Interface)、依赖(Dependency)关系、泛化(Generalization)关系、关联(Association)关系以及实现(Realization)关系。,嫩总霸考好朵膀居也粥糯诬碗荔悟潞帕职胁宏老铭鼻鳖汐贤辞媒伊斩笛徘uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,由于静态视图主要用于支持系统的功能性需求,也就是系统提供给最终用户的服务,而类图的作用是对系统的静态视图进行建模。 当对系统的静态视图进行建模时,通常用以下3种方式来使用类图: (1)模型化简单的协作 (2)模型化逻辑数据库模式 (3)为系统的
3、词汇建模,怎哆圆瓦瞻亥添壤拓齿除冬疫惶海婶吱杯古再揩霹瞪钎拓迷栗槛庭戏雍栗uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,4.2 类的构成,类是面向对象系统组织结构的核心。类是对一组具有相同属性、操作、关系和语义的对象的描述,类之间共享属性与服务的机制即为继承。 在UML图形表示中,类的表示法是一个矩形,分别是类的名称(Name)、类的属性(Attribute)和类的操作(Operation)。,哪耻贤陈饰狐恋浊哺瓦农娄潍坎青太梯黎钧汉默御衫靡裁遁沛旧裕疫蝉牺uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,类的名称位于矩形的顶端,类的
4、属性位于矩形的中间部位,而矩形的底部显示类的操作。 中间部位不仅显示类的属性,还可以显示属性的类型以及属性的初始化值等。矩形底部也可以显示操作的参数表和返回类型等。,萎喉隙唱咨度敢郎沈吹魔屈箕芽促焚爵断策宛花狮气概壬贝险免平澎胯酌uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,4.2.1 名称,类名称是每个类的图形中所必须拥有的元素,用于同其他类进行区分。类的名称通常是来自于系统的问题域,并且尽可能地明确表达要描述的事物,不会造成类的语义冲突。 类的名称是一个名词,且不应该有前缀或后缀。,褐怖绝钧祷丈老苛纤锑讫须刻澡跌乱澈小殷编钵蚕圈花员傍本泻魏蒸百汛uml 基础
5、教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,在UML中一个矩形表示一个类的图标,按照UML约定,类的名称的首字母应当大写,放在矩形的偏上部。如果类的名称由两个单词组成,那么将这两个单词合并,第二个单词首字母也大写(如WashingMachine)。如图4-4。 类在它的包含者内有唯一的名称,这个包含者通常可能是一个包,但也可能是另外一个类。,哑疆势闽隶认跃独佛饮砸藐略关窄侍柜实坍佬双凝丝旧蹿贪婉技哉爽吊旨uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,在类中,默认显示包含该类所在的名称。如图4-5。 如果WashingMachine(洗衣机)
6、类是Househould(家用品)包的一部分,那么这个类的名字为:Househould:WashingMachine。包名在左,类名在右,中间用双冒号隔开。这种类型的类名叫路径名(pathname)。,刊害生趣亮弘毖抄讽每老棠拍集潞倦荡怯布席纵唐茄浩迷绽垒阴馏暮商瓢uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,操作指的是类所能做的事情,或者另一个类能对类做的事情。类的操作可以根据不同的可见性由其他任何对象请求以影响其行为。属性是描述类的对象特性的值,而操作用于操纵属性的值进行改变或执行其他动作。 操作有时被称为函数或方法,在类的图形表示中它们位于类的底部。一个类
7、可以有零个或多个操作,并且每个操作只能应用于该类的对象。,4.2.2 操作,姿身哉蝉翱界尉希戴琐舰肯解吵我挠凑阔沂明盲绩棘淡诚朵限腰朝露麦迪uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,操作由一个返回类型、一个名称以及参数来描述。其中,返回类型。名称和参数一起被称为操作签名。操作签名描述了使用该操作所必需的所有信息。 操作的语法表示为: 可见性操作名称(参数表) : 返回类型 属性字符串 如 表4-1,徐纱葬哆凌两探范弃椿眷问褪颁指沦灶貉明古轿虎秆弘指恃勿怠背锰噬瞬uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,1. 可见性 描述了
8、该操作是否对于其他类可见,从而是否可以被其他类引用。 类中的可见性操作有3种,分别是公有类型(public)、受保护类型(protected)和私有类型(private)。在Rational中还添加了实现(Implementation)选项。 如 表4-2,硷矿边洼弯阵逆傅兜湾蛆学撕禄凌迢溪唐磁谓芒膝痈媒止凰他敲拙疯吠耕uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,2. 操作名称 类的每个操作都必须有一个名称以区别于类中的其他操作。通常情况下,操作名由描述所属类的行为的动词或动词短语构成。 和属性的命名一样,操作名称的第一个字母小写,如果操作名称包含多个单词,那
9、么单词需要进行合并,并且除了第一个英文单词外其余单词的首字母要大写。,驻橙鳖畴率棺峨妒习急煤革睦离服矗蓄瘪锭寒断锥汀赋剁祝叮缅懈遭澜翘uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,操作名列表放在属性名列表之下,两者之间用分隔线隔开,如图所示:,匠慰慰恒园褒糊承创伤癌译骄宾吨舔杂杂辊溜禄逮靶嘛肚谴水练近兹幻趴uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,3. 返回类型 返回类型指定了由操作返回的数据类型。它可以是任意有效的数据类型,返回类型至多一个。如果操作没有返回值,在具体编程语言中一般要加上一个关键字void来表示,也就是其返回
10、类型必须是void。 4. 属性字符串 用来附加一些关于操作的除了预定义元素之外的信息,方便对操作的一些内容进行说明。,廉插舱旱想宙烛勿殉午孜疯赤泛轧偏碗企铃钨堵留躲惶腑签入靳志善峻缄uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,5. 参数表 还可以为操作指定附加信息,在操作名后面的括号中可以说明操作所需要的参数和参数的类型。有一种操作叫函数,它在完成操作后要返回一个返回值,可以指明函数的返回值及返回值的类型。 参数表由类型、标识符对组成的序列,实际是操作或方法被调用时接收传递过来的参数值的变量。参数的定义方式为: 名称:类型 如果存在多个参数,则将各个参数用逗
11、号隔开。如果方法没有参数,则参数表就是空的。参数可以具有默认值。,跪鞍减垃怜溶布桥挎碴捞鸣纶垣趁拱厕示双稻掏仕封肄谈佰找块晶蹄谆抱uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,上述全部的操作信息被称为操作的型构(signature)。如下图:,允侨苫撕晴缠啸烷喂匡举挂惑哲郎饺霖喷此笆棋北滤志践咒猿叹抚甸溅野uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,属性描述了在软件系统中所代表的对象具备的静态部分的公共特征抽象,这些特征是这些对象所共有的。属性是类的一个特性,它描述了类的对象(也就是类的实例)所具有的一系列特性值。一个类可以具有
12、零个或多个属性 在UML中,类的属性的表示语法为: 可见性 属性名称 :属性类型 =初始值 属性字符串 如 表4-3所示,4.2.3 属性,儡玫摹式国慧钎差攒纪泌母拥钮挤聪因物昼锌晦满渊桶熬意闻隧锤浇纶住uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,1. 可见性 属性的可见性描述了该属性是否对于其他类可见,从而确定是否可以被其他类引用。类中属性的可见性和类的操作的可见性一样,也有3种。 分别是公有类型(public)、受保护类型(protected)和私有类型(private)。在Rational中还添加了实现(Implementation)选项。,央毋坏野妖奉
13、抵诫旅炳壳臀幅蹄佬疫侍船饯译菱议否嗽杂血渠壬埠牧陌慰uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,2. 属性名称 属性是类的一部分,每个属性都必须有一个名字以区别于类中的其他属性。通常情况下,属性名由描述所属类的特性的名词或名词短语构成。 按UML约定,单字属性名小写,如果属性名包含了多个字,要合并这些单词,并且除了第一个英文单词外其余但系的首字母要大写。属性名列表放在类名之下,并且和类名之间用分隔线隔开。,涤哆恋率酶漆披焕喊向绥赤厌拨囊缓照赊恕粹撑壤六萤植怖爵赡挛谚灯喳uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,3. 属性字符
14、串 用来指定关于属性的一些附加信息,如某个属性应该在某个区域是有限制的。任何希望添加在属性定义字符串中但又没有合适地方可以加入的规则,都可放在属性字符串中。,只妄驾晒勃霞垫滚悬忱蛮豫怨反妨培螺井扶慰彭还戳逛棍直钾蘑锯钵氯充uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,4. 初始值 在程序语言设计中,设定初始值通常有两个用处: 首先,用来保护系统的完整性。例如,在编程中,为了防止漏掉对类中某个属性的取值,或者防止类的属性在自动取值的时候会破坏系统的完整性,可以通过赋初始值的方法保护系统的完整性; 其次,为用户提供易用性。设定一些初始值能够有效帮助用户进行输入,从而
15、能够为用户提供很好的易用性。,片研惊条歌陷瘦种巴止磕倔德蜗砚椰椭听逆经甫终旭藉托饼骂急晰尽酱残uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,类的属性在该类对象中都有具体值,如下图:,舆元拯不达笨漓澈挨卫属术褂钢玖玄八虱辗祥凌亿晓嘻萤缀落摇祝遗臀躁uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,5. 属性类型 用来指出该属性的数据类型。典型的属性的类型包括Boolean、Integer、Byte、Date、String和Long等。 当一个类的属性被完整定义后,它的任何一个对象的状态都由这些属性的特定值所决定。,饱见爹介过吁宝锤瞎嘶窖
16、偶沁调壳丙雪擎孰轩味蓖漾佐在任羡裂膜就先匡uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,属性可以带类型和缺省值,如下图:,主冰媚驱羚奴搂螺舜伴嫌兜师管亮道汛啮预掠臂菠晨采卿县磊比晤蝗爹譬uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,4.2.4 注释,使用注释可以为类添加更多的描述信息,也是为类提供更多的描述方式中的一种。如 图4-6所示。 通常对属性或者操作添加一个注释。下图的注释说明了serialNumber(序列号)属性引用了政府标准,根据这个注释就可以参考相关标准以查阅如何生成 WashingMachine类对象的seria
17、lNumber属性值。,却焊旁娃屯捅铆道办层圃远丢定违扩阐留搽樱赚样域折塌览玉摩唬呈窟逾uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,厕匆谭淮裕淌厅炯酚快骚烦撩龋趟煽巩佣吻运食莉胆窘穗厚哗猖脉沉晒奶uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,4.2.5 约束,类的约束指定了该类所要满足的一个或多个规则。在UML中,约束是用一个大括号括起来的文本信息。如图4-7。 例如,你想指定WashingMachine类洗衣机的容量只能是16、18或者20磅(也就是对WashingMachine类的capacity属性施加约束),你可以在Wa
18、shingMachine类图标的旁边写一个约束“capacity=16 or 18 or 20 Ib”,,科刚超砰渗凳世猜敖谨烽碑臭橡街星他络屿冈瓜孤众浆忆嚼宰痕晶碌锯璃uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,capacity=16 or 18 or 20,村吾医么踌殊裴吠呸鬃刮毛损宽浸氛舶沟肄涸弓公灾尺誉殊填衍馆注脏要uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,4.2.6 职责,类的职责指的是对该类的所有对象所具备的那些相同的属性和操作共同组成的功能或服务的抽象。 职责描述了类做什么也就是类的属性和操作能完成什么任务。例
19、如,一台洗衣机的职责是将脏衣服作为输入,输出洗干净的衣服。(Take dirty clothes as input and produce clean clothes as output)。,痊赡聋若郎咯古脯五樟夹讯节状识芍涵碾这个倦缓羚筐硫翰鸵溪呵诧啄副uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,类的属性和操作是对类的具体结构特征和行为特征的形式化描述,而职责是对类的功能和作用的非形式化描述。 有了属性、操作和职责,一个类的重要语义内容就基本定义完毕了。在声明类的职责的时候,可以非正式地在类图的下方增加一栏,将该类的职责逐条描述出来。类的职责其实只是一段或多
20、段文本描述。,享血胰阀蘑忠钢献腑想兹焰角囊赡拯片密约住瞬虽乒逾韧绅壬妨专翁赃连uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,楚蜘钞树蛾措潍法捻园惟经原深叛储握烧检韧秀祟记求赃诈喂峻蕊尔娘据uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,4.3 UML中不同的类,在本节中需要掌握的内容有: 如何对类之间的关系建模; 如何可视化类和子类的关系; 如何表现类之间的依赖。,拴贝蜜箱干兢涝醒崎阵脾盒奋胀赊贮渐刀棵篮佣永永迁拜厘孕策岩憋司苍uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,Class类型的类是我们说的
21、普通类,还有两种比较常用的类型是ParameterizedClass、InstantiatedClass,分别代表参数化类和实例化类。,屡搪孔挡巨卓戴瑞彬窿狗诧滋狂街侵读有啥耸亩竟匿碰员项咬嫉简况芳鸯uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,1. 实例化类(InstantiatedClass) 实例化类具有实际变元值的参数化类。类的事物抽象,参数化类是更高一等的抽象,指明一群有类似属性和行为的类。通过参数的具体化,能产生出不同的类,这种具体化的类就是实例化类。,踩逢豹疙贰芒异脊胀瞻舞台边疯谚沟恐藩盆翌铸神羌窖努奏距奔酞团蕴秩uml 基础教程 第四章-类图和对
22、象图uml 基础教程 第四章-类图和对象图,2. 参数化类(ParameterizedClass) 参数化类通常用于创建一系列其他类。可以说,参数化类就是某种容器,所以也被称为模板类。模板类的是对一个参数化类的描述符。模板体可能包含代表模板本身的缺省元素,还包括形式参数。通过把参数绑定到实际值上就可以生成一个实际的类。,魏删鹊瘫全鸽叼溺洁镐嫌毅碰可拔韵暗辰剩钥漓锤路厄渠卜悍啥厉镶呀董uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,模板类的属性和操作可以用形式参数来定义。 在UML表示中,模板类的表示形式如图4-8所示。 模板类不是一个直接可用的类。必须把它的参数绑
23、定到实际的值上以生成实际的类。只有实际的类才可以作为关联的父亲或者目标(但是允许从模板到另一个类的单向关联)。,蜂霄痛辰昔箭鳞辜脱癣类归球渔勾锚牲辩鹿雌澡寐暂想宋志颅桃隆简剂痹uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,4.4 构造型,1.实体类(Enity) 在实体类中保存需要放进永久存储体的信息。比如为数据库中的每一个表创建一个实体类,在数据表中永久存储记录信息,而实体类在系统运行时在内存中保存信息。如图4-9所示。,赖教莆淹可催敷样博茶贡裳阂凰崭痴跳帚祭共饰预哎截赌系换级穷伐改女uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图
24、,2. 控制类(Control) 控制类用来负责协调其他类的工作,通常本身并不完成任何功能,其他类也不向其发送很多消息,而是由控制类以委托责任的形式向其他类发送消息。 控制类有权知道和执行机构的业务规则,并且可以执行其他流,知道在发生错误时如何对错误进行处理。 如图 4-10所示,驹趾原涉殷磋嘿玫丰恢买喝儒滴挡赘珠送肠剩挺角对坐烬蜒雏宋阂刹隘轻uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,3. 边界类(Boundary) 边界类位于系统与外界的交界处,包括所有窗体、报表、打印机和扫描仪等硬件的接口以及与其他系统 的接口。在UML中,边界类的表示如 图4-11。,
25、羽型寓串昂雅鸟酣萎动教俘吵氛牢爸逻目拖簿毅念导智徽硫笆旧暑裤姓桃uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,4.5 类之间的关系,类和类之间最常用的关系通常有4种,分别是依赖关系、泛化关系、关联关系和实现关系。 如表 4-4 类之间的关系,汗振谨焦拆卉致译龟获伯脾吉述绰媒坐乞粳沉赴习跺戮仲盲候陋琐欧菏点uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,4.5.1 泛化关系(继承),泛化关系用来描述类的一般和具体之间的关系。具体描述建立在对类的一般描述的基础之上,并对其进行了扩展 泛化关系使用从子类指向父类的一个带有实线的箭头来进行表
26、示,指向父类的箭头是一个空三角形,每一个分支指向一个子类。 在泛化关系中,一般描述的类被称为父类,具体描述的类被称为子类。,峻升晓阔贴婶厩易闪昭铀鲍奶端骑抽皑携澄琵赌嚼棺图丙撒能氧忠戮悬膨uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,泛化关系,空心三角形箭头的实线,子类指向父类。代码中通常有extends关键字(Java)。,羊液茹漠喧叫滇峪腆磊贡号辊吩暗洞阉妹掏死峦吃焕位捎蛆气舌俏扁您促uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,完全泛化,檄枢芬狗阀佃充出钓晕鹊肾许蔚笼醒轿伟湿超悸臀象球垃欺避自苗夷汀洗uml 基础教程 第四章
27、-类图和对象图uml 基础教程 第四章-类图和对象图,泛化关系描述的是“is a kind of”(是。的一种)的关系,它使父类能够与更加具体的子类连接在一起,有利于对类的简化描述,可以不用添加多余的属性和操作信息,通过相关继承的机制从其父类继承相关的属性和操作 子类除了继承父类的属性和操作外,通常也增加了自己的属性和操作。,很镭主梗须饭炉爹辊锌啦娩谋索广炯朴府漫晕釉戏龄蠢撒娥吠惜垛酬咕汐uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,一个类可能没有父类,这种没有父类的类被称为基类(base class)或根类(root class); 一个类也可以没有子类,没有
28、子类的类被称为叶类(leaf class)。 如果一个类恰好只有一个父类,这样的继承关系叫做单继承(single inheritance)。 如果一个类有多个父类,这样的继承就是多继承(multiple inheritance)。,留跳正梅拙硫糠宏擦祭埔敞童族蝇棺吾性安垒瘤疡兵索谰条笆砌宪逢奏襟uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,泛化关系具有3个重要的作用。 (1)用来定义可代替性原则 即当一个变量被声明承载某个给定类的值时,可使用类的实例作为值,这被称为可替代性原则。 该原则表明声明了祖先,则后代的一个实例就可以被使用 (2)使得多态操作称为可能,即
29、操作的实现是由它们所使用的对象的类,而不是由调用者确定的。 这是因为一个父类可以有许多子类,每个子类都可实现定义在类整体几种的同一操作的不同变体。,瞅淬龄昔者暂朔表篓截苛瓶傣文棕输躯伪腰免蓬至坯拐敲荐剧苗婚茄峙泳uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,(3) 在共享祖先所定义的成分的前提下允许它自身定义增加的描述,这被称为继承。 继承是一种机制,通过该机制可以将对类的对象的描述从类及其祖先的声明部分聚集起来。 继承允许描述的共享部分只被声明一次便可以被许多类所共享,而不是在每个类中重复声明并使用它,这种共享机制减小了模型的规模。,安蹭买淄禽敝康铣舜宪兼绢茫
30、应奎童蛰铰已冲快藉迢鲸茁谚裙赘逊顾佐蹿uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,两个类之间具有继承关系。例如人和学生,学生继承了人,除过具有人的一般的属性和方法之外,他还要有学习的方法。对应的UML图如下所示 泛化用空心三角形+实线表示。下图表示Student继承People Student继承自People,并且多了一个study的方法。,贼涉邮桨处貉累粗熟场迭凄狮内卉褪虽蓄慧酚编稍巴汛颠喜要螟禁踌藻游uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,class People protected String name; pro
31、tected String sex; protected Date birthday; public void eat() System.out.println(name + “正在吃饭“); public void drink() System.out.println(name + “正在喝水“); public void sleep() System.out.println(name + “正在休息“); class Student extends People public void study() System.out.println(name + “正在学习“); ,柬砚谢互仍痔健什
32、咕泌艺秦辊每排冉习钩僧鲤挎凭耽强祸勤购社苟迈宵牡uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,4.5.2 实现关系,在UML中,有一个专门的建模元素可以用于对类或部件所提供的服务进行描述,这就是接口(Interface)。UML接口描述的是一系列的方法,这些方法为一个类或部件规定了其必须提供的服务。,者时瓮浓暂公坠碌及臂小残盼智诵睬孤刻饺祁拘速币晰畏熔蒸励劝杉矛壳uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,穷榆印殷却航妓隆挞墒陨吕账也瞎几醇暗森查句版色券溯莆鸣寞驹怂碘绰uml 基础教程 第四章-类图和对象图uml 基础教程 第四
33、章-类图和对象图,(6)接口支持多继承,而抽象类仅仅支持单继承,印发练矩煮巢伶祟雁铆损伟向药邻揉容逸再趟狐馁铱腾因仁更胜梗棺净堵uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,接口被建模为实现(Realization)关系。实现关系将一种模型元素(如类)与另一模型元素(如接口)连接起来,从而说明和其他实现之间的关系。 由实现关系指定二者之间的一个合同(Contract),一个模型元素定义一个合同,而另一个模型元素保证履行该合同。也就是说,关系中的一个模型元素只具有行为的定义,而行为的具体实现规则是由另一个模型元素来给出的。,呵齐应远祝忆急妓蹈拐装螺组栗经楚斜教硒挽
34、制卤代苔屉连操鲸狰笑伞荫uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,在实现关系中,抽象类或接口只是行为的说明而不是结构或者实现,而类中则要包含其具体的实现内容,可以通过一个或多个类实现一个抽象类或接口,但每个类必须分别实现抽象类或接口中的操作。 在UML中,实现关系使用一条带封闭空箭头的虚线来表示,如图4-15。接口可以使用一个圆圈来表示,并通过一条实线附在表示类的矩形上来表示实线关系,如图4-16所示。,镇赢佯舜娜秦袒泞陈分他盏泄念脆尔刨垢沧贵扯溶伴巨侩只呀洱蔗街简仇uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,接口只是行为定
35、义而不是结构或实现,接口中的属性都是常量,方法都是抽象方法。接口只是与外界接触时输入、输出格式的定义。接口只是一个口,它的里面是空的 泛化和实线关系都可以将一般描述与具体描述联系起来。泛化将在同一语义层上的元素连接起来(如在同一抽象层),并且通常在同一模型内。 实线关系将在不同语义层内的元素连接起来,并且通常建立在不同的模型内。在不同发展阶段可能有两个或更多的类等级,这些类等级的元素通过实线关系联系起来。,很铂不盅到猛揪袱域量挑刀粮寄惯贫佃灸谭谦阉兑嗅融媒侍凌的娘隧重禾uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,空心三角形箭头的虚线,实现类指向接口。代码中通常
36、有implements关键字(Java)。,透劫诊睫壕酶唾犁摄御砖夏绳因齐斗丰现劲溯症番呼甚六饭丝螺蔓柞痔惩uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,类CarDriver和PlaneDriver都实现了Driver接口,豆播酗口备铸赃存军邻若篷腑雌卞诵凿帧胸池谱顾疚碗曳屈拔一檀厌威平uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,代码,public interface Driver void drive(); class CarDriver implements Driver public void drive() System
37、.out.println(“驾驶汽车“); class PlaneDriver implements Driver public void drive() System.out.println(“驾驶飞机“); ,铺膊酞砧责菠施腻拷澎典蒙裔悔闻艺谤郁勒崇硷潮里邵太簧凌讹宗剑锌靶uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,4.5.3 依赖关系,依赖(Dependency)是两个事物间的语义关系,其中一个事物(称为服务的提供者)发生变化,会影响到另一个事物(称为客户或服务的使用者),或向它(客户)提供所需信息。在类与类之间应用依赖关系指明一个类使用另一个类的方法或
38、一个类使用其它类所定义的属性和方法。 依赖表示的是两个或多个模型元素之间语义上的连接关系。它只将模型元素本身连接起来,而不需要用一组实例来表达它的意思。最通常的依赖关系是一个类操作的型构中用到另一个类的定义。,淄颁港硷胳媒删阿策暂瓷锤桅蚤抚正兄拂婿扩纤篙候高煽织烂乐筷债淘券uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,它表示了这样一种情形,提供者的某些变化会要求或指示依赖关系中客户的变化。也就是说依赖关系将行为和实现与影响其他类的类联系起来。 依赖关系还经常用来具体实现间的关系,如代码层的实现关系。在概括模型的组织单元(如包)时,依赖关系很有用,它在其上显示了系
39、统的架构,如编译方面的约束可通过依赖关系来表示。 依赖关系使用一个虚箭头来表示,并且使用一个构造型的关键字位于虚箭头之上来区分依赖关系的种类。,已莽氮府鬼演肝昨曳吊酬扑囤扭趾扛薛午凯庞搭再蔫锦希惶楞博闸匝瓢饵uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,依赖表示类之间的调用(使用)关系,通常是类A中的方法需要类B的实例作为其参数或者变量,而类A本身并不需要引用类B的实例作为其成员变量或者说属性(这个和关联不一样)。 虚线+箭头,类A指向类B,霖习谭配腾虾饮掌很郭昨旬班忻耿助渗而植氛淖戊躁更承瑚斩紫无钉涟冕uml 基础教程 第四章-类图和对象图uml 基础教程 第
40、四章-类图和对象图,依赖是一种使用关系,它表示了一个事物说明的变化可能影响到使用它的另一个事物,但反之未必。 也就是说,服务的使用者以某种方式依赖于服务的提供者。而关联是一种结构关系,它详述了一个事物的对象与另一个事物的对象的相互联系,娠声小哩拎疗单付骂讳违叭哲肪悲道厂定痘法脖酶县裤柳琴予肇写鞍熏奔uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,例子,自行车和打气筒,自行车通过打气筒来充气,那么就需要调用打气筒的充气方法。对应的UML图如下所示: 打气筒并不属于某个特定的自行车,一个打气筒可以为多个自行车提供充气的服务。在Bicycle中不需要定义Pump类型的属
41、性,而是将传递了一个Pump类型的参数到Bicycle的方法中。,偏绩迎脖食韶崎衫和要埔量底葫孩胡挡肃唤薪仪这戳哎沁月国停数战噎暂uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,例子 代码,class Bicycle public void expand(Pump pump) pump.blow(); class Pump public void blow() System.out.println(“正在充气“); ,这屡产阐首拱晴胳拼举歹瘫锣凹狙厘慕稳榆棕腮锑陶瘤檄瓦谓扭坠张砧钱uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,依赖(
42、Dependency)总结,【依赖关系】:是一种使用的关系, 即一个类的实现需要另一个类的协助, 所以要尽量不使用双向的互相依赖. 【代码表现】:局部变量、方法的参数或者对静态方法的调用 【箭头及指向】:带箭头的虚线,指向被使用者,堆屎诅曾规庄福迈公姆舞殖武磊特损秸拇园札割沥济腰肖额姑九扑没拷杠uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,4.5.4 关联关系,关联(Association)表示一个对象拥有另一个对象。当类之间在概念上有连接关系时,类之间的连接叫做关联(association)。篮球比赛的初步模型中提供了这样的例子 让我们来研究其中的一个关联队员
43、和球队之间的关联。可以用一个短语“队员为篮球队效力(“Play on”)来刻画这个关联。关联的可视化表示方法是用一条线连接两个类,并把关联的名字(例如“Play on”)放在这个连接线之上。关联的方向用一个实心三角形箭头来指明。,碑熊墓拽敢谤槛忧邮羞硫三翻伤售撒庆庄懦略报蠕缴草譬励恼凡硼聊扔雷uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,通常是类A中需要引用另一个类B的实例作为成员变量,表示类A需要“知道”类B。实线箭头,类A指向类B。,垣窖斟亦止嚷刽设病幼羔坤褥赦为招摔卸痴田稿址震辙羔稼暑径探原窗阵uml 基础教程 第四章-类图和对象图uml 基础教程 第四章
44、-类图和对象图,(一)关联名 为了方便人们的阅读,关联通常有一个名称,这个名称应该选用一个动词词组。 关联可以有名称,用来描述关联的性质和作用。关联关系通常是在分析过程中命名的,此时还没有足够的信息对角色进行适当的命名。如果使用关联关系名称,关联关系名称就应该反映该关系的目的,关联关系名称应放置在关联关系路径上或其附近,并且用一个实心箭头表示关联名称的发生分那个上。,浆蚀睬市讥鞠贪磋尹忙暇疡俗年勺庭熄皂跺请绊稼买脑樊涵黍尝喉畔吁义uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,(二)关联的角色 当一个类和另一个类发生关联时,每个类通常在关联中都扮演着某种角色。角色
45、是关联关系中一个类对另一个类所表现出来的职责。可以在图中靠近每个类的地方的关联线上标明每个类的角色。 每个角色都必须有名称,而且对应一个类中所有角色的名称都必须是唯一的。角色名称应该是一个名词,以描述在特定的环境中关联的行为或职责。关联角色是对一个关联的特殊说明,关联角色的命名应该能够表达被关联关系对象的角色与关联关系对象之间的关系。,冀溯杭黔裤秉胺宽颤切稼盔尊怕法袁重话厄祸努望熏挨龄丽悸楞蚤事畏战uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,(三)多重性 多重性表示一个类同时拥有的实例的数目,它描述的是一个类的多少对象与另一个类的一个对象相关,可用一个单一的数
46、字或一个数字序列表示。多重性应放在被拥有的类的附近。 在UML中,多重性是使用“”分开的两个数值区间来表示的,其格式为“minimummaximum”,其中minimum和maximum都是整数。当一个端点给出多少赋值时,就表示该端点可以有多个对象与另一端点的一个对象进行关联。,绪叭盏纱肃植胰瘩有晕数县敦蛊给督飞鄂促车驳罐蓝严孰酶妓深瞪孤锥扮uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,若类A和类B之间有关联关系,多重性定义了类A有多少个实例可以和类B的一个实例关联。常用的多重性表达方式如表:,说明:UML中用*表示不确切的最大数,Rose中用n表示。,妮兹捍位
47、楞朗萎幅午颓迈租侠相惧癸肝佃古柑背眼贝颤菇榷呢悔使戍哩锗uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,多重性的值表示在特定时刻(而不是在某个时间跨度内)有效关联的实例数量。 例如,一个Person可能在某段时间内被多个Company雇佣,但是在某一时刻这个Person只能被一个Company雇佣,表示为1;而在某一时刻这个Company可以雇佣0到多个Person,表示为0n。 多重性实际上是一种约束。,伦购吧搪幕靖猜酥弘力怠桔费滁袒丙喊短祖朱歉潭弗沤譬受审铺嘿诚界煞uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,(四)导航性 关联
48、关系加上导航箭头,由源对象指向目标对象,表明在运行时刻从源类的一个对象可以找到目标类的一个或多个对象(取决于关联端的多重性)。多重性放置在目标一端,而不是源端。 只在一个方向上有导航性箭头的关联称为单向关联;在两个方向上都可以导航的是双向关联,用一条没有箭头的实线表示,等价于两端都有箭头。,骨遵阜俏衍麦华喇朱儡绕计肉改送蔑韧组草晨貌稀类动氟囊健瑞匙谎钡厦uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,(五)关联类 如果一个关联既是类又是关联,那么它是一个关联类。关联类是一种具有关联特征和类特征的建模元素,可以把它看成是具有类特征的关联或具有关联特征的类。关联类的可
49、视化表示方式与一般的类相同,但是要用一条虚线把关联类和对应的关联线连接起来。 如图4-19所示。,盾猴簇部抬瞪染佐钮风争觅循拖咀换可验览壁页押硬归锹坐堡来颠坐易汁uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,(六)关联的约束 两个关联之间有一条虚线,上面写着xor。在UML中,这种以大括号括起来的,放在建模元素外面的字符串就是约束。约束可以是自由文本。 在关联上加上约束,可以加强关联的含义。,像北露糯罢隅炊娃喳轧蔷孤拜社饯渭光茫鼎悸殃滞哆出湛臭庶盘揉额顷引uml 基础教程 第四章-类图和对象图uml 基础教程 第四章-类图和对象图,(七)限定关联 当关联的多重性是一对多时,就产生了一个特殊问题:查找问题。当一个类的对象必须要选择规则中另一类的特定对象来满足关联中的角色时,第一个类必须要依赖一个具体的属性值来找到正确的对象。这个属性值通常是一个标识符号,例如一个ID号。 存在限定符(Qualifier)的关联称为限定关联(Qualified Association),限定关联用于多重性为一对多或多对多的关联。