面向对象分析.ppt_第1页
面向对象分析.ppt_第2页
面向对象分析.ppt_第3页
面向对象分析.ppt_第4页
面向对象分析.ppt_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

1、第三篇 面向对象方法案例,一、传统的软件工程方法学曾经给计算机软件产业带来了巨大的进步,使用结构化范型开发的许多中、小规模的软件项目获得了成功,从而部分地缓解了软件危机。 二、但是,当把结构化范型应用于大型软件产品的开发时,似乎很少取得成功。 三、此外,使用传统的软件工程方法学开发软件时,生产率提高的幅度远远不能满足社会对计算机软件日益增长的需要,软件重用的程度还很低,所开发出的软件产品仍然很难维护。 四、面向对象的软件开发方法在20世纪60年代后期首次提出,经过将近20年的发展,这种技术逐渐得到广泛应用。到了20世纪90年代,面向对象的软件工程方法学已经成为人们在开发软件时首选的方法学。,5

2、.1 一个面向对象的程序实例,为了介绍面向对象的软件工程方法学,我们首先从一个面向对象的程序设计实例谈起。假设对一个简单的图形程序的需求如下所述: 在显示器荧光屏上圆心坐标为(100,100)的位置画一个半径为40的圆,在圆心坐标为(200,300)的位置画一个半径为20的圆,在圆心坐标为(400,150)的位置画一条弧,弧的起始角度为30度,结束角度为120度,半径为50。 怎样设计上述这个程序呢?,返回目录,5.1.1 用对象分解取代功能分解 传统的程序设计方法把精力集中于设计解题算法(即处理数据的过程),因此也称为面向过程的程序设计方法。 这样做实质上也是在用计算机的观点进行程序设计工作

3、。因为计算机的工作过程是一步一步进行的,为了完成指定的功能必须告诉它详细的解题步骤,也就是必须向计算机详细描述解题算法。,解题步骤,人类习惯的解决问题的方法是使用“顾客服务员”的工作模式。 人类社会中不同职业的人具有不同技能,需要完成一项复杂任务时,只需把具有完成这项任务所需技能的各类人员集中起来,向每个人提出具体要求。 至于每个人如何完成自己承担的具体任务,并不需要在布置任务时详细说明,因为他们具备完成自己承担的任务所需要的技能。,把程序分解成一系列对象,每个对象都既有自己的数据(描述该对象所代表的实体的属性),又有处理这些数据的函数(通常称为服务或方法,它们实现该对象应有的行为)。 不同对

4、象之间通过发送消息向对方提出服务要求,接受消息的对象主动完成指定功能提供所要求的服务。 程序中所有对象分工协作,共同完成整个程序的功能。 事实上,对象是组成面向对象程序的基本模块。,1.这个程序中只涉及两类实体(用面向对象术语说,是两类对象),它们分别是圆(Circle)和弧(Arc)。 2.在问题域中有圆类的两个实例和弧类的一个实例。所谓“实例”也就是具体的对象。 3.从需求陈述中不难看出,圆的基本属性是圆心坐标和半径,弧的基本属性是圆心坐标、半径、起始角度和结束角度。 4.但是,通常不可能在需求陈述中找到所有属性,还必须借助于领域知识和常识,才能分析得出所需要的全部属性。众所周知,一个图形

5、既可以在荧光屏上显示出来,也可以不显示出来。也就是说,一个图形可以处于两种可能的状态之一(可见或不可见)。因此,本问题中的圆和弧都应该再增加一个属性可见性。,分析需求陈述得知,圆和弧都应该提供在荧光屏上“画自己”的服务。 所谓画自己,就是用当前的前景颜色在屏幕上显示自己的形状。 这个例子是一个相当简单的图形应用程序,它的功能很简单,在需求陈述中只提出了这一项最基本的要求。 但是,根据常识我们知道,一个图形既可以在屏幕上显示出来,也可以隐藏起来(实际上是用背景颜色显示)。 在属性中我们已经设置了“可见性”这个属性来标志图形当前是否处于可见状态,因此,相应地也应该提供“隐藏自己”这样一个服务。,此

6、外,为了便于使用,通常对象的每个属性都是可以访问的。 当然,可以访问并不是可以从对象外面随意读写对象的属性,那样做将违反信息隐藏原理,也违背由对象主动提供服务而不是被动地接受处理的面向对象设计准则。 所谓可以访问是指提供了读写对象属性的服务。,图5.1 圆类和弧类,我们可以用图来形象地描绘程序中的对象(严格地说是对象类),如图5.1所示。,图中用一个矩形框代表一个对象类, 矩形框被两条水平线段分割成三个区域, 最上面那个区域中写类名, 中部区域内列出该类对象的属性, 下部区域内列出该类对象提供的服务。,5.1.2 设计类等级,类中定义的服务,是允许施加于该类对象的数据上的操作,是该类所有对象共

7、享的,并不需要为每个对象都复制操作的代码。 除了把对象分类之外,还应该进一步按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个相关的对象类组成一个层次结构的系统(也称为类等级)。 为了利用继承机制减少冗余信息,必须建立适当的类等级。 只要不违背领域知识和常识,就应该抽取出相似类的公共属性和公共服务,以建立这些相似类的父类,并在类等级的适当层次中正确地定义各个属性和服务。,如果分别定义圆类和弧类,则这些公共的属性和服务需要在每个类中重复定义,这样做势必形成许多冗余信息。 反之,如果让圆作为父类,弧作为从圆派生出来的子类,则在圆类中定义了圆心坐标、半径和可见性等属性之后。 弧类就可以直接

8、继承这些属性而无需再次重复定义它们,因此,在弧类中仅需定义本类特有的属性(起始角度和结束角度)。,类似地,在圆类中定义了读写圆心坐标、读写半径和读写可见性等服务之后, 在弧类中只需定义读写起始角度和读写结束角度等弧类特有的服务。需要注意的是, 虽然在图5.1中圆类和弧类都有名字相同的服务“显示”和“隐藏”,但是它们的具体功能是不同的(显示或隐藏的图形形状不同)。 因此,在把弧类作为圆类的子类之后,仍然需要在这两个类中分别定义“显示”和“隐藏”服务。,在我们这个简单例子中,仅涉及圆和弧两类图形,当开发更复杂的图形程序时,将涉及更多的图形种类。 但是,无论何种图形都有“坐标”和“可见性”等基本属性

9、。当然,针对不同图形“坐标”的物理含义可能不同。 例如,对圆来说指圆心坐标,对矩形来说指某个顶点的坐标。坐标和可见性实质上是荧光屏上一个“点”的属性,如果我们把这两个基本属性抽象出来,放在点(Point)类中定义,并把点类作为各种图形类的公共父类,则可进一步减少冗余信息,并能增加程序的可扩充性。 类似地,读写坐标和读写可见性等服务也应该放在点类中定义。当然,点类中还需要定义其专用的显示和隐藏服务。,进一步分析“点”的属性, 一类信息描述了点在哪儿(位置)。 另一类信息描述了点的状态(可见性)。 从位置(Location)类派生出屏幕上的点类,它继承了位置类中定义的每样东西(属性和服务),并且加

10、进了该类特有的新内容。,综上所述,得到图5.2所示的类等级。为简明起见,图中没有列出读写属性值的常规服务。注意,图中用一端为空心三角形的连线表示继承关系,三角形的顶角紧挨着基类。,图5.2 简单图形程序的类等级,5.1.3 定义属性和服务 在上述设计类等级的过程中,已经把需要的属性和服务分配到类等级的适当层次上了。但是,为了能最终实现这个程序,还必须进一步定义属性和服务。 1. 定义属性 首先考虑定义属性的问题,所谓定义属性就是确定每个属性的数据类型和数据结构,同时还要确定每个属性的访问权限。 参见图5.2,在“位置”类中应该定义属性“坐标”。由于程序处理的是平面上的点,因此坐标由X坐标和Y坐

11、标组成。我们用屏幕上的像素作为坐标值的单位,这样每个坐标值都是整数。根据上述分析,位置类中包含的属性坐标,由两个简单的整型变量来定义,我们把它们分别命名为X和Y。,“点”类中的属性“可见性”只有两个可能取的值:true(真,即可见)和false(假,即不可见)。通常把只能取值true或false的数据类型称为布尔型。我们把可见性属性命名为Visible。 圆的属性“半径”同样用像素为单位,因此也是整型的简单变量,我们把它命名为Radius。 弧的属性“起始角度”和“结束角度”都用度为单位,在本例中假设角度只取整数值,因此,这两个属性都用简单的整型变量来表示,我们分别把它们命名为StartAng

12、le和EndAngle。,接下来再考虑每个属性的访问权限(即可访问性)。面向对象程序的一个基本特征就是具有信息隐藏能力,这同时也是面向对象程序的一个突出优点。通常,不允许从对象外面直接访问对象的属性,只能通过对象向外界公开提供的接口访问对象的属性。 但是,父类的某些属性被子类继承之后,在子类中往往需要频繁地使用这些属性。如果子类使用从父类继承来的属性时也需要通过接口,则会明显降低效率。因此,这些属性的访问权限应该是“在本类及其子类中可以直接访问,超出上述范围则不能直接访问”。在本例中,X坐标、Y坐标、可见性(Visible)和半径(Radius)等属性的访问权限就应该是这样的,而起始角度(St

13、artAngle)和结束角度(EndAngle)这两个属性,因为没有子类需要使用它们,访问权限应该是“仅在本类中可以直接访问”。,2. 定义服务 在5.1.1小节中曾经讲过,人类习惯解决问题的方法,是采用“顾客服务员”工作模式。因此,每个对象应该知道怎样完成自己负责提供的服务功能,使用者只需向对象发送消息提出要求即可。但是,对象怎么知道完成服务功能的具体步骤呢?回答是,需要由程序的开发者设计出完成每项服务功能的算法,从而“教会”对象完成其承担任务的方法。定义服务的主要任务就是设计完成每项服务功能的算法。在设计算法时应该使用第3章3.9节中讲述过的结构程序设计技术。,面向对象(Object-Or

14、iented,缩写为OO)方法学的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,也就是使描述问题的问题空间(也称为问题域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。,6.1 面向对象方法学概述, 认为客观世界是由各种对象组成的,任何事物都是对象。 复杂的对象可以由比较简单的对象以某种方式组合而成。 按照这种观点,可以认为整个世界就是一个最复杂的对象。 , 按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。在这种层次结构中,通常下层的派生类具有和上层的基类相同

15、的特性(包括数据和方法),这种现象称为继承(Inheritance)。但是,如果在派生类中对某些特性又做了重新描述,则在派生类中的这些特性将以新描述为准,也就是说,低层的特性将屏蔽高层的同名特性。 对象彼此之间仅能通过传递消息互相联系。,综上所述,面向对象的方法学可以用下列方程来概括: OO=Objects+Classes+Inheritance+Communication with messages 也就是说,面向对象就是既使用对象又使用类和继承等机制,而且对象之间仅能通过传递消息实现彼此通信。 ,6.2面向对象方法学的主要优点,1. 与人类习惯的思维方法一致 2. 稳定性好(功能对象) 3

16、. 可重用性好 4. 较易开发大型软件产品 5. 可维护性好,1. 对象的形象表示 2. 对象的定义 (1) 定义1 对象是具有相同状态的一组操作的集合。 这个定义主要是从面向对象程序设计的角度看“对象”。 (2) 定义2 对象是对问题域中某个东西的抽象,这种抽象反映了系统保存有关这个东西的信息或与它交互的能力。也就是说,对象是对属性值和操作的封装。 这个定义着重从信息模拟的角度看待“对象”。,(3) 定义3 对象= 其中,ID是对象的标识或名字 MS是对象中的操作集合 DS是对象的数据结构 MI是对象受理的消息名集合(即对外接口) 这个定义是一个形式化的定义。,图6.2 用自动机模拟对象,3

17、. 对象的特点 以数据为中心。 对象是主动的。 实现了数据封装。 本质上具有并行性。 模块独立性好。,图6.3 实现继承机制的原理,6.4 面向对象建模,为了更好地理解问题,人们常常采用建立问题模型的方法。所谓模型,就是为了理解事物而对事物作出的一种抽象,是对事物的一种无歧义的书面描述。通常,模型由一组图示符号和组织这些符号的规则组成,利用它们来定义和描述问题域中的术语和概念。更进一步讲,模型是一种思考工具,利用这种工具可以把知识规范地表示出来。,用面向对象方法开发软件,通常需要建立三种形式的模型,它们分别是描述系统数据结构的对象模型,描述系统控制结构的动态模型和描述系统功能的功能模型。这三种

18、模型都涉及到数据、控制和操作等共同的概念,只不过每种模型描述的侧重点不同。这三种模型从三个不同但又密切相关的角度模拟目标系统,它们各自从不同侧面反映了系统的实质性内容,综合起来则全面地反映了对目标系统的需求。一个典型的软件系统组合了上述三方面内容:它使用数据结构(对象模型),执行操作(动态模型),并且完成数据值的变化(功能模型)。,6.5 对象模型,对象模型表示静态的、结构化的系统的“数据”性质。它是对模拟客观世界实体的对象以及对象彼此间的关系的映射,描述了系统的静态结构。,图6.4 表示符号,2. 命名 类名是一类对象的名字。命名是否恰当对系统的可理解性影响相当大,因此,命名时应该遵守以下几

19、条准则。 (1) 使用标准术语 (2) 使用具有确切含义的名词 (3) 必要时用名词短语作名字 总之,名字应该是富于描述性的、简洁的而且无二义性的。,6.5.2 表示结构的图形符号 类&对象间的关系可以概括为归纳关系、组合关系及关联关系。 1. 归纳关系 归纳关系就是“一般特珠”关系,它反映了一个类与若干个互不相容的子类之间的分类关系。 图6.5是表示归纳关系的图形符号。,图6.5 表示归纳关系的,2. 组合关系 组合关系就是“整体部分”关系,它反映了对象之间的构成关系。组合关系也称为聚集关系。 图6.6是表示组合关系的图形符号。 组合关系具有的最重要的性质是传递性。也就是说,如果A是B的一部

20、分,B是C的一部分,则A也是C的一部分。 当组合关系有多个层次时,可以用一棵简单的聚集树来表示它。聚集树是多级组合关系的一种简化表示形式。,图6.6 表示组合关系的,图6.7 描绘教材结构的聚集树,3. 关联关系 关联关系反映对象之间相互依赖、相互作用的关系。通常把两类对象之间的二元关系再细分为一对一(11)、一对多(1M)和多对多(MN)等三种基本类型,类型的划分依据参与关联的对象的数目。 (1) 表示符号 (2) 阶 所谓阶就是参与关联的对象的个数。,(2)重数 在类图中还可以表示关联中的数量关系,即参与关联的对象的个数。在UML中用重数说明数量或数量范围,例如, 01 表示0至1个对象

21、0*或* 表示0至多个对象 1* 表示1至多个对象 115 表示1至15个对象 8 表示8个对象 如果图中没有明确地标出关联的重数,则缺省的重数是1。,(3) 链属性 链属性就是关联链的性质。 (4) 限定 一个受限的关联由两个对象及一个限定词组成。可以把限定词看作是一种特殊的链属性。利用限定词通常能有效地减少关联的阶数。 (5) 消息连接 消息连接的表示符号,是从消息发送者指向消息接收者的箭头线,如图6.11所示。,图6.8 教师与属于他的书之间的关联关系,图6.9 链属性的表示方法,图6.10 一个受限的关联,图6.11 消息连接的表示符,(6)聚集 聚集也称为聚合,是关联的特例。聚集表示一类对象与另一类对象之间的关系,是整体与部分的关系。在陈述需求时使用的“包含”、“组成”、“分为部分”等字句,往往意味着存在聚集关系。除了一般的聚集关系之外,还有两种特殊的聚集关系,分别称为共享聚集和复合聚集,如下所述。, 共享聚集 如果在聚集关系中处于部分方的对象可以同时参与多个处于整体方对象的构成,则该聚集称为共享聚集。 例如,一个课题组包含许多成员,每个成员又可以同时是另一个课题组的成员,则课题组和成员之间是共享聚集关系,如图5.12所示。一般聚

温馨提示

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

最新文档

评论

0/150

提交评论