类图ppt课件.ppt_第1页
类图ppt课件.ppt_第2页
类图ppt课件.ppt_第3页
类图ppt课件.ppt_第4页
类图ppt课件.ppt_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

UML和设计模式UMLandDesignPatterns,UML和设计模式第四章类图和对象图,3,目录,4.1类图的概念,4.2UML中的类,4.3类图中的关系,4.4阅读类图,4.5如何建立对象模型,4.6对象图,4,4.1类图的概念,类图(Classdiagram)是最常用的UML图,显示出类、接口以及它们之间的静态结构和关系;我们常用类图描述系统的结构。1.类图类图是描述类、协作(类或对象间的协作)、接口及其关系的图。类图可以包括注释、约束、包。图3-1是一个典型的类图。类图中的关系包括依赖关系(Dependency)泛化关系(Generalization)关联关系(Association)实现关系(Realization),5,4.1类图的概念,图3-1电子商务网站的对象模型,6,4.1类图的概念,2.类图的作用类图常用来描述业务或软件系统的组成、结构和关系。(1)为系统词汇建模型(2)模型化简单的协作(3)模型化一个逻辑数据库模式3.类图的组成元素类图中的元素有类、接口、协作、关系、注释、约束、包。关系把类、协作、接口连接在一起构成一个图。,7,4.2UML中的类,4.2.1类的表示UML中,表示一个类,主要是标识它的名称、属性和操作。如图3-2所示,类由一个矩形表示,它包含3栏,在每栏中分别写入类的名称、类的属性和类的操作。,图3-2Order类,8,4.2.1类的表示,1名称类名部分是不能省略的,其他组成部分可以省略。名称(Name)是一个文本串,表示方法有两种:(1)简单名:如图3-2中的Order(订单),它就只是一个单独的名称。(2)全名:也称为路径名,就是在类名前面加上包的名称,例如java:awt:Rectangel、businessRule:order等。注意:有一个普遍采用的命名原则:采用CamelCase格式(大写字母开头、混合大小写,每个单词以大写开始,避免使用特殊符号),尽可能避免使用缩写。,9,4.2.1类的表示,2.属性属性描述了类的静态特征,在面向对象编程中,把属性表示为成员变量。例如,在图3-2所示的Order类中,列出了orderDate(下订单时间)、destArea(送货区域)、price(订单总价格)、paymentType(支付类型)四个属性,它们是用来描述每个具体的订单对象的。在属性的前面有一个修饰,用来表示属性的可见性,属性的可见性一般都是private,这样才符合面向对象的“封装”思想。通常属性名的第一个字母是小写的。,10,4.2.1类的表示,3.操作操作是类所提供的服务。操作名的命名规范也未硬性规定的,大家习惯采用和属性名相同的命名规则。(2)对于操作,也经常会提供可见性修饰,只是通常应该声明为public,否则它难以向其他类提供服务。(3)操作在表示时可以只写出操作名,也可以将操作拥有的参数也写出来,即写成员方法的完整签名。属性和操作名之前可附加的可见性修饰符:加号(+)表示public;减号(-)表示private;#号表示protected;省略这些修饰符表示具有package(包)级别的可见性。,11,4.2.1类的表示,4职责职责指类承担的责任和义务。在矩形框中最后一栏中写明类的职责。如图3-3所示。,12,4.2.1类的表示,5约束约束指定了类所要满足的一个或多个规则。在UML中,约束是用花括号括起来的自由文本。如图3-4所示。,图3-4约束的表示,13,4.2UML中的类,4.2.2类的种类1.抽象类把这些相同的方法或属性从这些具体类中抽取出来,把它们封装到一个抽象类中,然后,通过扩展抽象类,重新定义这些具体类。,14,4.2UML中的类,抽象类是一种不能直接实例化的类,也就是说不能用抽象类创建对象。在UML中,抽象类和抽象方法的表示是将其名字用斜体表示。但是由于斜体字在草图中不容易表现,因此推荐用abstract构造型来表示。图3-5中列出这两种不同的表示方法。,图3-5抽象类的2种表示方法,15,4.2UML中的类,2接口接口是一种类似于抽象类的机制,接口中的方法都是抽象方法。在UML中,接口有如图3-6所示的两种表示方法。,图3-6接口的两种表示法,16,4.2UML中的类,3.关联类两个类之间具有多对多的关系,并且有些属性不属于关联两端任何一个类它们之间很显然就是一个多对多的关系。如果要记录每个person在所属的institute所担任的职务,应该把这个职务属性放在哪个类中呢?这个属性既不属于person,也不属于institute。显然,这个属性应该放在关联类中(Role),如图3-7所示。,图3-7关联类Role,17,4.2UML中的类,4模版类在注入c+这样语言中,提供了一种叫做参数化类(parameterizedclass)的机制,或叫做模版(template)。,18,4.2UML中的类,5主动类从运行的角度来看,还有一种特殊的类主动类,主动类的实例称为主动对象,一个主动对象拥有一个控制线程并且能够控制线程的活动,具有独的控制权。,19,4.2UML中的类,6.嵌套类在诸如Java的语言中,允许你将一个类的定义放在另一个类定义的内部,这就是嵌套类在UML中,可以采用一个描图标来表示这种关系,如图3-9所示。,图3-9嵌套类表示法,20,4.3类图中的关系,4.3.1关系分类按照关系的性质分为依赖关系、泛化关系、关联关系、实现关系。1依赖关系表示两个或多个模型元素之间语义上的关系,客户元素以某种形式依赖于提供者元素。实际上,关联、实现和泛化都是依赖关系。如图3-10所示。,图3-10依赖关系,21,4.3类图中的关系,依赖关系可以细分为4大类:使用依赖、抽象依赖、授权依赖、绑定依赖。(1).使用依赖表示客户使用提供者提供的服务,以实现它的行为,下面都属于使用依赖的具体形式:使用(use)调用(call)参数(parameter)发送(send)实例化(instantiate),22,4.3类图中的关系,(2).抽象依赖表示客户与提供者之间的关系,客户与提供者属于不同的抽象事物,具体依赖形式:跟踪(trace)精化(refine)派生(derive)(3).授权依赖表达一个事物访问另一个事物的能力,具体依赖形式:访问(access)导入(import)友元(friend),23,4.3类图中的关系,(4).绑定依赖绑定依赖属于较高级的依赖类型,用绑定模板以创建新的模型元素,具体依赖形式:绑定(bind),24,4.3类图中的关系,2泛化关系是从特殊元素到一般元素的分类关系称为泛化关系。模型元素可以是类、用例以及其他。如图3-11所示。,图3-11泛化关系,25,4.3类图中的关系,3关联关系关联关系是较高层次的关系,它具体包括聚合关系和组合关系。(1)聚合关系(2).组合关系,26,4.3类图中的关系,4实现关系类与被类实现的接口、协作与被协作实现的用例都是实现关系。图3-14实现关系,27,4.32关联的属性,1名称可以使用一个动词或动词短语给关联取名,用来描述关联的性质。在描述关联时,关联的名称并不是必需的,在关联名和角色中选一即可。可以在关联上标识阅读方向的方向指示符,以消除阅读的歧义。下面的例子表示,关联名称是”使用”,即,用户使用计算机。,图3-15关联名称,28,4.32关联的属性,2角色在关联关系中,角色表明了关联的每一端在关联中承担的职责,即,关联发生时,关联的每一端在关联中扮演的角色。角色的名称应该是名词或名词短语,以解释对象是如何参与关联的。如图3-16关联的角色。,图3-16关联的角色,29,4.32关联的属性,3多重性多重性就是某个类有多少个对象可以和另一个类的单个对象关联。如图3-17所示。,图3-17关联的多重性,30,4导航性导航性描述了源对象通过链接访问目标对象。箭头表明了导航的方向性,即,只有源对象才能访问目标对象,反之,目标对象不能访问源对象。如图3-18所示。,图3-18导航性,31,4.32关联的属性,5限定符如果源对象到目标对象是1对多关联,为了在多个目标对象的集合中查找到需要的目标对象,我们必须在目标对象集合中,选一个唯一标识目标对象的查找键(限定符,从目标对象的属性中选择),它应该是目标对象中的某个属性,当然,也可以是表达式。,图3-19限定符,32,4.4阅读类图,4.4.1电子商务网站业务1电子商务网站假设住在厦门的张三要给住在绍兴的朋友李四送一个生日蛋糕,由于它们之间的距离太远,不可能亲自买一个送过去。但解决这个问题并不难,张三登录到一个电子商务网站购买一个,并通过该网站将其送给李四。而这个电子商务网站实际上就是通过绍兴的蛋糕店来完成这个任务的。因此,在整个传递过程中,各个实体之间的关联关系如图3-20所示。,33,4.4阅读类图,现实生活中的情况要比这个复杂得多,电子商务网站可以接受很多人的订单,也可以与不同地方的蛋糕店形成合作,以送给更多不同地方的人。因此,其可以像图3-2那样进行抽象(为了使例子简单,在此略去了“送货人”)。在图3-21中,很好地诠释了类和对象的概念。显然张三就是一个对象,它可以归位“订货人”这个类中;而绍兴蛋糕店显然也是一个对象,它可以归到“商户”这个类中。例如在上面的例子中,订货人把想完成的事(给李四送蛋糕)委托给电子商务网站,而电子商务网站又委托给具体的商户(绍兴蛋糕店),具体的商户最终通过送货人完成了这个行为。,34,4.4阅读类图,那么在实际的过程中,整个行为是怎么动起来的呢?张三在电子商务网站填写信息,电子商务平台向商户发信息,商户指挥送货人完成该动作。,图3-21抽取业务模型,35,4.4阅读类图,2建立对象模型图3-22电子商务网站的对象模型,36,4.4阅读类图,4.42阅读类图重点在于把握三项内容:类、关系、多重性。其阅读的顺序应该遵循以下原则:搞清楚每个类的语义理解类间关系结合多重性来理解类图的结构特点以及个个属性和方法的含义1.理解类的语义该图包含7个类:order(订单),orderitlm(订单项),customer(顾客),consignee(收货人).delierorder(送货单),peddlery(商户),product(产品),并且每个类都定义了若干属性和方法。,37,4.4阅读类图,2.分析类关系我们知道,关系包含关联(包括聚合、组合两种)、泛化、实现、依赖四种,在类图中,类之间存在的关系通常就包括这几种。阅读类图时,从图中最复杂的类开始阅读。在本例中,这个类就是oeder(订单)。然后逐一地分析该类与其他类之间的关系:,38,4.4阅读类图,(1)order与orderitlm之间是组合关系,根据箭头的方向可知是orderitlm组合为order。这就是说order包含了orderitlm。显然对于该应用系统而言,独立的orderltrm是没有意义的。(2)order和customer、consignee、deliverorder是关联关系,即一个订单和客户、收货人、送货单是相关的。第二复杂关系的类就是deliverorder(送货单),和它相关的也有4个类:order、orderltemcongsinee、peddlery,即表示送货单与订单是相关的,同时还关联到订单项。另外,它与商户、收货人的关联关系也是很显然的。,39,4.4阅读类图,3.分析关联的多重性order类包含了两个方法:dispatch()和close(),它们分别实现“分拆订单生成送货单“和”完成订单“,而在deliveorder()类中有一个close()方法,同理它表示”完成订单“。在orderitem中有一个statechange()方法和deliverstate,它们是用来改变其”是否交给收货人“标志位的。我们来阅读一下:先调用order的dispatche()方法,它将根据包含的orderitem中的产品信息来按供应商分拆成若干个deliverorder。商户登录系统后即可获取deliverorder,并执行完后调用close()方法。这时,将调用orderitem的statechange()方法来改变其状态。同时,再调用order的close方法。判断该order的所有的ordeitem是否都送到了,如果是就其close()掉。,40,4.4阅读类图,3.分析关联的多重性多重性用来说明关联的两个类之间的数量关系。,41,4.4阅读类图,图3-23加入了辅助元素的类图,42,4.4阅读类图,4关联的导航性我们将图3-22中的关联进一步具体化为导航箭头。对象的消息只能沿着导航箭头的方向发送给另一对象。例如,可以从对象order向对象consignee导航,但不能从consignee向Order导航。通俗的说就是在Order中可以获取其相应的Consignee,而从Consignee不能了解Order。如果没有箭头,则表示是双向关联的,也就是等价于两端都有箭头,即可互相导航。,43,4.4阅读类图,5关联的角色名称在图3-23中,在customer和order的关联中,customer端有一个“owener“字符串;在order到consignee;peddery到deliverorder再到product之间也有类似的字符串。这些字符串称为角色名称,表示customer是order的所有者(owner),order包含(including)了consignee,peddlery是product的提供者,是deliverorder的执行者。通过理解这些角色名称,使得类之间的关联关系更加具体化。,44,4.4阅读类图,6.关联的限定符图3-23中,在order和orderitem之间的组合关系中,orderitem端多了一个方框,里面写着productId,它在UML中称为限定符。存在限定符的关联称为受限关联,用来表示某种限定关系。在本例中,它的用途是说明对于一张订单,每种产品只能有一个订单项。,45,4.4阅读类图,7.约束在图3-23中,在order类的边上有一个用大括号括起的文本,里面写着“只有当所有的orderitem()已经送到,才将close()成功”,而在persongal和company类当中则有一根虚线,上面写着“xor”.在UML类图中。这种以大括号括起来的、放在建模元素外边的字符就是约束。在本例中,这两个都是自由文本。前一个约束显然是表示一种规则,也就是说每送完一个deliverorder,就会将其所包含的orderitem的deliverstate修改为ture;而对于order,调用close()成功的前提是它所包含的所有orderitem的deliverstate的值都是ture才行。而后一种约束则是一种关联间的约束,它表示一个customer要么是personal(个人用户),要么是company(公司客户)。,46,4.4阅读类图,8.职责每个类都有其要承担的职责,有时,应该在类图上标出类的职责。通常采用的方法有两种:一种是在类的原有的分栏中添加注释行(也就是以“”开头的字符串);另一方法则是新增一个分栏。但在rose中,对于后者没有提供默认的支持。,47,4.4阅读类图,9.导出属性在Order类中有一个名为price的属性,它前面加了一个“/”符号,这在UML模型中是用来表示导出(deried)属性的。导出属性的是指可以根据其他值计算出来的属性为了说明order类中的这个导出属性是如何计算出来的,还特意为其添加了一个注释。并在注释中写到:price=sum(allorderitem.price),意思是这里的price属性的值应该等于所有的orderitem类的price字段值的总和。,48,4.5如何建立对象模型,下面通过一个简单的例子来说明建立对象模型的过程。4.51问题陈述邓小平是一个爱书之人,家里各类书籍已过千册,而平时又时常有朋友外借,因此需要一个个人图书管理系统。该系统应该能够将书籍的基本信息按计算机类、非计算机类分别建档,实现按书名、作者、类别、出版社等关键字的组合查询功能。在使用该系统录入新书籍时系统会自动按规则生成书号,可以修改信息,但一经创建就不允许删除。该系统还应该能够对书籍的外借情况进行记录,可对外借情况列表打印。另外,还希望能够对书籍的购买金额、册数按特定时限、周期进行统计。,49,4.5如何建立对象模型,4.5.2寻找分析类我们以问题陈述为输入信息,采用“名词动词法”寻找分析类。名词动词法的主要规则是从名词与名词短语中提取对象与属性;从动词与动词短语中提取操作和关联。1找备选类首先。可以逐字逐句地阅读上面那段需求描述,并将其中的所有的名词及名词短语列出来,可以得到备选类列表。2从备选类中筛选出候选类并不是所有的备选类都是适合候选类,有些名词对于要开发的系统来说无关紧要。甚至不属于系统;而有些名词表述的概念则相对较小,适合某个候选类的属性。因此,需要对备选类进行一番筛选,将这些不适合的排除掉。,50,4.5如何建立对象模型,(1).“邓小平”、“人”、“家里”很明显是系统外的概念,无须对其建模;(2).而“个人图书管理系统”、“系统”指的就是将要开发的系统,即系统本身,也无须对其进行建模;(3).很明显“书籍”是一个很重要的类,而“书名”、“作者”、“类别”、“出版社”、“书号”则都是用来描述书籍的基本信息的,因此应该作为“书籍”类的属性处理,而“规则”是指书号的生成规则,而书号则是书籍的一个属性,因此“规则”可以作为编写“书籍”类构造函数的指南。(4).“基本信息”则是书名、作者、类别等描述书籍的基本信息统称,“关键字”则是代表其中之一,因此无需对其建模;,51,4.5如何建立对象模型,(5).“功能”、“新书籍”、“信息”、“记录”都是在描述需求时使用到的一些相关词语,并不是问题域的本质,因此先可以将其淘汰掉;(6).“计算机类”、“非计算机类”是该系统中图书的两大分类,因此应该对其建模,并改名为“计算机类书籍”和“非计算机类书籍”,以减少歧义;(7).“外借情况”则是用来表示一次借阅行为,应该成为一个候选类,多个外借情况将组成“外借情况列表”,而外借情况中一个很重要的角色是“朋友”借阅主体。虽然到本系统中并不需要建立“朋友”的资料库,但考虑到可能会需要列出某个朋友的借阅情况,因此还是将其列为候选类。为了能够更好地表述,将“外借情况”改名为“借阅记录”,而将“外借情况列表”改名为“借阅记录列表”;,52,4.5如何建立对象模型,(8).“购买金额”、“册数”都是统计的结果,都是一个数字,因此不用将其建模,而“特定时限”则是统计的范围,也无需将其建模;不过从这里的分析中,我们可以发现,在该需求描述中隐藏着一个关键类书籍列表,也就是执行统计的主体。通过上面的分析,得到一个候选列表:书籍计算机类书籍非计算机类书籍借阅记录借阅记录列表书籍列表,53,4.5如何建立对象模型,4.53确定类关系通过上面的工作,从需求描述中找到了6个相关的类,接下来就是确定类之间的关系。1确定类关系可以发现“计算机书籍(itbook)”、“非计算机书籍(otheritbook)”与“书籍(book)”之间是继承关系;而“书籍列表(booklist)”是多个“书籍”组成的,“借阅记录列表(brrowlist)”是由多条“借阅记录”组成的。这种组成关系使用于组合还有聚合关系呢?显然,由于本系统的“书籍”是可以独立于“书籍列表”而存在;“借阅记录”也是可以独立于“借阅记录列表”而存在,因此使用聚合更合适一些。还可以发现“借阅记录“和”“书籍”是关联的,离开“书籍”,“借阅记录”不存在意义。,54,4.5如何建立对象模型,为了反映和记录这些类之间的关系,可以使用UML中的类图将其记录下来,如图3-24所示。,图3-24最初的分析类模型,55,4.5如何建立对象模型,2给关联添加属性(1)确定关联的多重性例如一本书可以有几条借阅记录,书籍列表指的是多少本书籍,这些问题需要进一步的进行多重性分析,并修改上面所示的类图。因为是个人藏书,因此每本书都是唯一的,没有副本,要么被借出,要么未被借出,因此对于每一本书籍来说,要么只有一条借阅记录,要么没有借阅记录。所有的书籍组成书籍列表,借阅记录刘表是由所有的借阅记录组成。通过上面的分析,可以得到信息补充的类图,即可得到如图3-25所示的类模型。,56,4.5如何建立对象模型,如果系统较大,可以以上面的类图为基础,把关联度紧密的类合成一个包,以便更好的组织子系统。例如,在本例中可以将“书籍列表”、“书籍”、“计算机书籍”、非计算机书籍“合成一个包,而将“借阅记录”、“借阅记录列表”合成另一个包。但本例比较简单,类相对较少,因此无须进行这样的合成。,图3-25加入多重性的类图,57,4.5如何建立对象模型,(2).确定关联的导航性类图中的诸如导航性,角色名,导出属性,限定符及约束等高级属性不是每个类模型都必须加入的。在图3-24中,只有book和booklist之间的组合关系,brrowlrecord与borrowlist之间的组合关系、book与borrrecord之间的关联关系,这三个关系可能存在导航性。组合关系显然已经将类的关系清晰化了,因此无须对其进行导航性描述。根据对需求的理解,book与borrowrecord之间,应该是一个双向链接。因为,当浏览书籍列表时,会希望看到某本书是否被借出;当有人归还时,希望能从借阅记录中关联到book.。,58,4.5如何建立对象模型,(3).确定约束根据用户需要,我们有两个地方可以用约束来体现:一是book对象创建之后就不能被删除,只能做修改,因此在book类边上加上了一条用自由文本写的约束。二是一本书要么属于计算机类,要门属于非计算机类。因此要加一个“xor”约束。(4).确定关联的限定符由于这个系统是“个人图书管理系统”,因此特定的一本书只有一本,所以只能被借一次,因此对于一本书而言,只有一个Recordid与其对应,因此将添加一个Recordid限定符。把限定符加入图3-25中,再把类的职责(属性和方法)加入到类图后,得到的类图,如图3-26所示。,59,4.5如何建立对象模型,3给类添加职责当找到了反应问题域本质的主要类,并清理他们之间的关系之后,就可以为这些类添加相应的职责。类的职责包括以下两个内容:类所维护的信息(成员变量)和类提供的行为(成员方法)。在本阶段将主要的成员变量和成员方法标识出来,以便更好的理解问题域。书籍类:从需求描述中,可找到书名、类别、作者、出版社;同时从统计的需要中,可得知“定价”也是一个关键的成员变量。,60,4.5如何建立对象模型,书籍列表类:书籍列表就是全部的藏书列表,其主要的成员方法是新增、修改、查询(按关键字查询)、统计(按特定时限统计册数与金额)。借阅记录类:借阅人(朋友)、借阅时间。借阅记录列表类:主要职责就是添加记录(借出)、删除记录(归还)以及打印借阅记录通过上面的分析,我们对这些概念类有了更深入的了解,可以重新修改类,将这些信息加入原先的模型中。同时,把关联的属性加入类模型后,得到如图3-26所示的类图。职责(属性,方法)的添加是一个循序渐进的过程,在类分析,类设计时都是逐步对类模型进行完善的。,61,4.5如何建立对象模型,图3-26加入限定符和约束的类图,62,4.6对象图,对象图(ObjectDiagram)是显示了一组对象和他们之间的关系。使用对象图来说明数据结构,类图中的类或组件等实例的快照。对象图和类图一样,反映了系统的静态过程,但它是以实际的或原型化为基础来表达对象间的关系。对象图显示某时刻对象和对象之间的关系。一个对象图可看成一个类图的特殊实例,实例和类可在对象图中同时表示。,63,4.6.1什么是对象,1对象对象是一件事、一个实体、一个名词,是客观存在的事物。一些对象是活的,一些对象不是。现实世界中的对象有汽车、人、房子、桌子、狗、支票簿或雨衣。所有的对象都有属性,例如汽车有厂家、型号、颜色和价格。狗有种类、年龄、颜色和喜欢的玩具、对象还有行为(behavior):汽车可以从一个地方移动到另一个地方,狗会吠。2对象的特点:对象具有状态、行为和标识三个特点。状态:对象的状态指对象在某一时刻,对象所有属性值的集合。行为:没有一个对象是孤立存在的,对象可以被操作,也可以操作别的对象。而行为就是一个对象根据它的状态改变和消息传送所采取的行动和所做出的反应标识:为了将一个对象与其它所有对象区分开来,我们通常会给它起一个“标识”,64,4.6.1什么是对象,3对象与类的区别(1)对象是一个存在于时间和空间中的具体实体,而类是一个模型,该模型抽象出对象的“本质”:一组公共属性和一组公共方法。(2)类是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论