第3章类图.

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

LOGO《UML统一建模》第三章类图第三章类图•我们看到的大多数UML图都是类图[Martin,2004]。类图是最广泛的一种模型,用来表述系统中各个对象的类型以及其间存在的各种静态关系。目录3.1类图的概念3.2UML中的类3.3类图中的关系3.4阅读类图3.5如何建立对象模型3.1类图的概念•类图(Classdiagram)是最常用的UML图,显示出类、接口以及它们之间的静态结构和关系;我们常用类图描述系统的结构。•1.类图•类图是描述类、协作(类或对象间的协作)、接口及其关系的图。与所有UML的其它图一样,类图可以包括注释、约束、包。图3-1是一个典型的类图。•类图中的关系包括:依赖关系(Dependency)、泛化关系(Generalization)、关联关系(Association)、实现关系(Realization)。3.1类图的概念图3-1电子商务网站的对象模型3.1类图的概念•2.类图的作用•类图常用来描述业务或软件系统的组成、结构和关系。我们通常通过下面三种方式使用类图:••(1).为系统词汇建模型•为系统的词汇建模实际上是从词汇表中发现类,发现它的责任。•(2).模型化简单的协作•协作是指一些类、接口和其他的元素一起工作,提供一些合作的行为,这些行为不是简单地将元素加在一起就能实现的。例如:当我们为一个分布式的系统中的事务处理过程创建模型时,我们不可能只通过一个类来表明事务是怎样执行的,事实上这个过程的执行涉及到一系列的类的协同工作。使用类图来可视化这些类和他们的关系。3.1类图的概念•(3).模型化一个逻辑数据库模式•我们常用类图设计数据库的蓝图。在很多领域,我们想把持久性数据保存到关系数据库或面向对象的数据库中。我们可以用类图为这些数据库模式建立模型。•3.类图的组成元素•类图中的元素有类、接口、协作、关系、注释、约束、包。关系把类、协作、接口连接在一起构成一个图。注释的作用是对某些类和接口进行注释,约束的作用是对某些类和接口进行约束。3.2UML中的类•3.2.1类的表示•UML中,表示一个类,主要是标识它的名称、属性和操作。如图3-2所示,类由一个矩形表示,它包含3栏,在每栏中分别写入类的名称、类的属性和类的操作。•1.名称•每个类都必须有一个有别于其他类的名称,类名部分是不能省略的,其他组成部分可以省略。名称(Name)是一个文本串,表示方法有两种:•(1).简单名:如图3-2中的Order(订单),它就只是一个单独的名称。图3-2Order类3.2UML中的类•(2).全名:也称为路径名,就是在类名前面加上包的名称,例如java::awt::Rectangel、businessRule::order等。•对于类的命名规范要求,由字符、数字、下划线组成的惟一的字符串即可。但在实际应用中,有一个普遍采用的命名原则:采用CamelCase格式(大写字母开头、混合大小写,每个单词以大写开始,避免使用特殊符号),尽可能避免使用缩写。•2.属性•属性描述了类的静态特征,在面向对象编程中,把属性表示为成员变量。例如,在图3-2所示的Order类中,列出了orderDate(下订单时间)、destArea(送货区域)、price(订单总价格)、paymentType(支付类型)四个属性,它们是用来描述每个具体的订单对象的。3.2UML中的类•在属性的前面有一个修饰,用来表示属性的可见性,属性的可见性一般都是private,这样才符合面向对象的“封装”思想。通常属性名的第一个字母是小写的。•3.操作•操作是类所提供的服务,通俗地说,操作就是定义了对象所能做的事情。在面向对象编程语言中,它通常表示为成员方法。对于操作的图示,有以下几点需要说明:•(1)操作名的命名规范也未硬性规定的,大家习惯采用和属性名相同的命名规则。3.2UML中的类•(2)对于操作,也经常会提供可见性修饰,只是通常应该声明为public,否则它难以向其他类提供服务。•(3)操作在表示时可以只写出操作名,也可以将操作拥有的参数也写出来,即写成员方法的完整签名。•属性和操作名之前可附加的可见性修饰符:加号(+)表示public;减号(-)表示private;#号表示protected;省略这些修饰符表示具有package(包)级别的可见性。如果属性或操作名具有下划线,则说明它是静态的。•4.职责•职责指类承担的责任和义务。在矩形框中最后一栏中写明类的职责。如图3-3所示。•图3-3职责的表示3.2UML中的类•5.约束•约束指定了类所要满足的一个或多个规则。在UML中,约束是用花括号括起来的自由文本。如图3-4所示。•3.2.2类的种类•1.抽象类•在进行类设计时,如果一些具体类具有相同的方法或属性,我们可以把这些相同的方法或属性从这些具体类中抽取出来,把它们封装到一个抽象类中,然后,通过扩展抽象类,重新定义这些具体类。图3-4约束的表示3.2UML中的类•抽象类是一种不能直接实例化的类,也就是说不能用抽象类创建对象。•在UML中,抽象类和抽象方法的表示是将其名字用斜体表示。但是由于斜体字在草图中不容易表现,因此推荐用《abstract》构造型来表示。图3-5中列出这两种不同的表示方法。•图3-5抽象类的2种表示方法3.2UML中的类•抽象类shape(图形)中定义三个方法,drew()、getarea()是抽象方法,getboundingarea()是具体方法。在squre(正方形)和circle(圆形)两个子类中,没有定义getboundingarea(),确定义了drew()和getarea()方法。•抽象类shape定义的draw()和getarea()是抽象操作,在不同的子类中,其实现方法是不同的,即,在square和circle类中,对上面两个抽象方法,有不同的实现。•2.接口3.2UML中的类•接口是一种类似于抽象类的机制,接口中的方法都是抽象方法。在UML中,接口有如图3-6所示的两种表示方法。•图标表示方法的优点是简单,它只适用于只有单个操作的接口和草图应用中。构造符号表示法是采用类(interface实际上是一种特殊的类)的方式表示,它的优点是可以添加多个抽象方法,具有更强的表示能力。《Interface》图标表示法Collection构造符号表示法图3-6接口的两种表示法3.2UML中的类•3.关联类•在应用当中,我们发现两个类之间具有多对多的关系,并且有些属性不属于关联两端任何一个类,例如,在某个应系统中有两个类:person(人)和institute(协会),显然persong可以属于多个institute,而每个institute肯定会吸纳很多person。因此它们之间很显然就是一个多对多的关系。•如果要记录每个person在所属的institute所担任的职务,应该把这个职务属性放在哪个类中呢?这个属性既不属于person,也不属于institute。显然,这个属性应该放在关联类中(Role),如图3-7所示。图3-7关联类Role3.2UML中的类•实际上关联类既是关联又是类,它不仅象关联那样连接两个类,而且可以定义一组属于关联本身的特性。•注意:只有关联每一端的对象是1:1对应时,才能创建关联类。•4.模版类•在注入c++这样语言中,提供了一种叫做参数化类(parameterizedclass)的机制,或叫做模版(template)。例如,我们需要一些能过处理整型、浮点型、字符串的数组,普通的做法是为它们各创建一个类,这三个类除了数据类型不同之外,其他的都是相同,但是仍然要定义三次。•模版就是用来解决这个问题,可以根据占位符或者参数来定义类,而不用说明属性、方法返回值和方法参数的实际类型。通过实际值代替占位符即可创建新类。这样,就可以采用如图3-8所示的设计方案。•图3-8模板类3.2UML中的类•5.主动类•从运行的角度来看,还有一种特殊的类-主动类,主动类的实例称为主动对象,一个主动对象拥有一个控制线程并且能够控制线程的活动,具有独的控制权。•例如,命令处理程序就是一个主动类的例子,它从外面接受命令对象,然后在自身的控制线程内执行命令。在第二章中,曾经说明UML1.0中主动类的表示方法(普通类的基础上加上粗边界),但是在UML2.0中修改了主动类的表示法(在类的两边加上垂直线)。3.2UML中的类•6.嵌套类•在诸如Java的语言中,允许你将一个类的定义放在另一个类定义的内部,这就是嵌套类,在Java中也称为内层类。嵌套类是声明在它的外层类中的,因此只能够通过外层类或外层类的对象对它进行访问,在UML中,可以采用一个描图标来表示这种关系,如图3-9所示。•图3-9嵌套类表示法3.3类图中的关系•3.3.1关系分类•按照关系的性质,把关系分为4种,它们是依赖关系、泛化关系、关联关系、实现关系。下面分别说明其语义。•1.依赖关系•表示两个或多个模型元素之间语义上的关系,客户元素以某种形式依赖于提供者元素。实际上,关联、实现和泛化都是依赖关系。如图3-10所示。•图3-10依赖关系3.3类图中的关系•依赖关系可以细分为4大类:使用依赖、抽象依赖、授权依赖、绑定依赖。•(1).使用依赖•表示客户使用提供者提供的服务,以实现它的行为,下面都属于使用依赖的具体形式:•使用(《use》)•调用(《call》)•参数(《parameter》)•发送(《send》)•实例化(《instantiate》)3.3类图中的关系•(2).抽象依赖•表示客户与提供者之间的关系,客户与提供者属于不同的抽象事物,具体依赖形式:•跟踪(《trace》)•精化(《refine》)•派生(《derive》)•(3).授权依赖•表达一个事物访问另一个事物的能力,具体依赖形式:•访问(《access》)•导入(《import》)•友元(《friend》)3.3类图中的关系•(4).绑定依赖•绑定依赖属于较高级的依赖类型,用绑定模板以创建新的模型元素,具体依赖形式:绑定(《bind》)•2.泛化关系•是从特殊元素到一般元素的分类关系称为泛化关系。模型元素可以是类、用例以及其他。如图3-11所示。•3.关联关系•关联关系是较高层次的关系,它具体包括聚合关系和组合关系。•(1).聚合关系•例如,大学由多个学院组成。•图3-11泛化关系3.3类图中的关系•(2).组合关系•例如,窗口中的菜单和按钮不能离开窗口独立存在,因此,是组合关系。•注意:在Rose中表示组合的符号与在UML标准中表示组合的符号有区别。如下图所示。•图3-13组合关系图3-12聚合关系UML标准表示Rose表示3.3类图中的关系•4.实现关系•类与被类实现的接口、协作与被协作实现的用例都是实现关系。•图3-14实现关系3.3.2关联的属性•在类图中,依赖关系、泛化关系、实现关系已经是很具体的关系,而关联关系是比较抽象的高层次关系,为了对关联进一步具体化,我们需要了解关联的属性。关联的属性包括名称,角色,多重性,限定,导航。•1.名称•可以使用一个动词或动词短语给关联取名,用来描述关联的性质。在描述关联时,关联的名称并不是必需的,在关联名和角色中选一即可。可以在关联上标识阅读方向的方向指示符,以消除阅读的歧义。•下面的例子表示,关联名称是”使用”,即,用户使用计算机。•图3-15关联名称3.3.2关联的属性•2.角色•在关联关系中,角色表明了关联的每一端在关联中承担的职责,即,关联发生时,关联的每一端在关联中扮演的角色。角色的名称应该是名词或名词短语,以解释对象是如何参与关联的。如图3-16关联的角色。•学生在关联中,扮演的是学习者的角色;学校扮演的是教学者的角色。•3.多重性•图3-16关联的角色3.3.2关联的属性•多重性就是某个类有多少个对象可以和另一个类的单个对象关联。如图3-17所示。•上图的多重性表示:一个学校可以有多个学生学习;一个学生可以到多个学校去学习,或不去任何学校学习。•4.导航性•导航性描述了源对象通过链接访问目标对象。箭头表明了导航的方向性,即,只

1 / 59
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功