软件系统分析第四章_第1页
软件系统分析第四章_第2页
软件系统分析第四章_第3页
软件系统分析第四章_第4页
软件系统分析第四章_第5页
已阅读5页,还剩101页未读 继续免费阅读

下载本文档

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

文档简介

1、1第四章 面向对象的方法目录n概述n基本思想n基本概念n数据模型n图形的面向对象模型4.1 概述n面向对象是什么?nObject Orientedn一种认识和表示客观世界的方法n如何表示客观世界?n把客观世界的事物都抽象为“对象”n采用OOA和OOD以及模型面向对象的方法n面向对象技术是软件工程领域中的重要技术,这种软件开发思想比较自然地模拟了人类认识客观世界的方式,成为当前计算机软件工程学中的主流方法。应该特别强调的是,面向对象技术不仅仅是一种程序设计方法,更重要的是一种对真实世界的抽象思维方式。 n 软件工程学家Codd和Yourdon认为:面向对象对象类继承通信面向对象技术的特点n对软件

2、开发过程所有阶段进行综合考虑。n软件生存期各阶段所使用的方法、技术具有高度的连续性,用符合人类认识世界的思维方式来分析、解决问题。n将OOA、OOD、OOP有机地集成在一起nOOA(Object-Oriented Analysis)nOOD(Object-Oriented Design)nOOP(Object-Oriented Program)n合理的软件开发过程是OOA-OOD-OOP。在OOA和OOD阶段对系统需要设立的每个对象类及其内部构成与相互关系都达到透彻的认识,并建立清晰的模型;OOP只是在选定的语言环境下使用具体的数据结构来定义对象的属性,编写具体的语句来实现有关的算法。4.2

3、基本思想n客观世界是由对象组成的,任何客观的事物或实体都是对象,复杂的对象可以由简单的对象组成。n对象有静态和动态两种特性。n对象的两种特性统一成一体构成一个具有特定标识的独立实体,对外屏蔽其内部细节。n具有相同数据和相同操作的对象可以归并为一个类,对象是对象类的一个实例。基本思想n类可以派生出子类,子类继承父类的全部特性(数据和操作),又可以有自己的新特性。子类与父类形成类的层次结构。n类与类之间还存在全体与部分的关系,即组成。n对象之间通过消息传递相互联系。类具有封装性,其数据和操作等对外界是不可见的,外界只能通过消息请求进行某些操作,提供所需要的服务。 n以类为基本单位,通过类间关系及消

4、息连接,可以构成类层次结构图。4.3 基本概念-对象n对象对象(Object)是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位,由一组属性和对这组属性进行操作的一组行为组成。在这里,属性和行为是构成对象的两个基本要素,其定义是:n属性是用来描述对象静态特征的一个数据项。每个对象都有它自己的属性值,表示该对象的状态。对象中的属性只能通过该对象所提供的操作来存取或修改。n行为是用来描述对象动态特征的一个操作序列,表示对象所能提供的服务,也称方法或服务。n对象标识符:OID,对象的唯一名字,由外界赋予。n一个对象通常可由OID、属性和操作三部分组成。 对象属性行为描述静态特征描述动态特

5、征属性:品种大小重量行为:呼吸进食基本概念-类n类,Class:是一组具有相同属性和相同操作的对象的集合。一个类中的每个对象都是这个类的一个实例(instance)。 n类是创建对象的模板,从同一个类实例化的每个对象都具有相同的结构和行为。n类是对象的抽象;对象是类的具体化,是类的实例。例n在学校教学管理系统中,“学生”是一个类,其属性具有姓名、性别、年龄等,可以定义“入学注册”、“选课”等操作。一个具体的学生“王平”是一个对象,也是“学生”类的一个实例。轿轿 车车型号:字符串型号:字符串颜色:字符串颜色:字符串牌照号:字符串牌照号:字符串张经理的轿车张经理的轿车型号型号= =桑塔纳桑塔纳颜色

6、颜色= =红色红色牌照号牌照号= =沪沪AN2037AN2037类类实例对象实例对象类的命名n适合该类及其特殊类的全部对象实例 n汽车加摩托车-机动车;还有马车-车辆n反映个体而不是群体n书-书籍;船-船舶n使用名词,或带有定语的名词 ,避免无意义的符号n如线装书n把众多的事物归纳并划分成一些类是人类在认识客观世界时经常采用的思维方法,分类的原则是抽象,从那些与当前目标有关的本质特征中找出事物的共性,并将具有共同性质的事物划分成一类,得出一个抽象的概念。例如:人、房屋、树木等都是一些抽象的概念,它们是一些具有共同特征的事物的集合。类的概念使我们能对属于该类的全部个体事物进行统一的描述,树具有树

7、根、树干、树枝和树叶,它能进行光合作用,这个描述适合所有树,而不必对每一棵具体的树进行描述。 类的描述n类一般采用 “类图” 来描述几何对象几何对象颜色颜色位置位置移动(移动(delta:矢量)矢量)选择(选择(P:指针型)指针型):布尔型布尔型旋转旋转(角度角度)人人姓姓 名名:字符串字符串年年 龄龄: 整整 型型改换工作改换工作改换地址改换地址文件文件文件名文件名文件大小文件大小最近更新日期最近更新日期打印打印类名类名属性属性运算运算例Class 中国人中国人中国人中国人 Attributes中国人中国人 Methods张三张三 (instance) Class 中国人中国人 张三的张三的

8、 AttributesClass 杭州人杭州人 (子类子类) 杭州人杭州人 Attributes 杭州人杭州人 Methods Class 中国人中国人李四李四 (instance) 中国人李四的中国人李四的 Attributes 杭州人李四的杭州人李四的 Attributes Class 杭州人杭州人问题?n若杭州人的 methods中有与中国人的同名,则李四执行该 method 时以杭州人为准,不执行中国人中定义的同名 method。n抽象类抽象类:有时,我们定义一个类,它把一些类组织起来,提供一些公共的行为,但并不需要使用这个类的实例,而仅使用其子类的实例。我们把这种没有实例的类称为抽象

9、类(abstract class)。在抽象类中可以定义抽象操作,抽象操作指:只定义这个类的操作接口,不定义它的实现,其实现部分由其子类定义。抽象操作操作名操作特征(signature)后面加上特征字符串abstract。面向对象的基本特征n抽象n封装n继承n多态n重载n消息抽象(Abtraction)n抽象指忽略主题中与当前目标无关的因素,以便更充分地注意与当前目标相关的因素。从众多的事物中抽取共同的、本质的特征,舍弃非本质的特征。n例如苹果、香蕉、梨子等,它们共同的特性就是水果。封装(Encapsulation)n封装可用于把操作和数据包围起来,对数据的访问只通过已定义的接口来完成。n是一种

10、信息隐蔽技术,用户只能看见对象封装界面上的信息,对象的内部实现对用户是隐蔽的。封装的目的是使对象的使用者和生产者分离,使对象的定义和实现分开。n防止意外的数据破坏,更易于隔离和修复错误n可以有选择的进行数据隐藏。n封装性主要表现在两个方面:n有固定的接口。这些接口规定了对象接受消息的格式,其他对象只有通过这些接口才能向这个对象发送消息。n保护内部实现。所有私有数据和私有操作都被封装在对象内部,其他对象不能直接访问。继承(Inheritance)n继承是父类和子类之间共享数据和方法的机制。一个子类可以继承它的父类中的属性和操作,子类还可以定义自己的属性和操作。n子类可以对父类(或祖先类)中的操作

11、重新定义其实现方法。n继承是类间的基本关系。在一个面向对象系统中,子类和父类之间的继承关系构成了系统的类层次结构。n继承的特性:n传递性n单向性n可重用性n包含性n继承种类n单继承n多继承n完全继承n选择继承例学校师生学生教师在职研究生水上交通工具水上交通工具 陆上交通工具陆上交通工具 水陆两栖交通工具水陆两栖交通工具多态(Polymorphism)n多态性是指同一个操作作用于不同的对象上可以有不同的解释,并产生不同的执行结果。也就是说,相同操作的消息发送给不同的对象时,每个对象将根据自己所属类中定义的这个操作去执行,从而产生不同的结果。n多态性举例:n在父类几何图形中定义了一个服务绘图,但并

12、不确定执行时绘制一个什么图形。子类椭圆和多边形都继承了几何图形类的绘图服务,但其功能却不相同:一个是画椭圆,一个是画多边形。当系统的其他部分请求绘制一个几何图形时,消息中的服务都是绘图,但椭圆和多边形接收到该消息时却各自执行不同的绘图算法。 n多态性机制不但为软件的结构设计提供了灵活性,减少了信息冗余,明显提高了软件的可复用性和可扩充性。多态性的实现需要OOPL提供相应的支持,与多态性实现有关的语言功能包括:重载(overload)、动态绑定(dynamic binding)、类属(generic)。 消息(message)n消息传递是对象间通信的手段,一个对象通过向另一个对象发送消息来请求其

13、服务。一个消息通常包括接收对象名、调用的操作名和适当的参数(如果有必要的话)。消息只告诉接收对象需要完成什么操作,但并不指示接收者怎样完成操作。消息完全由接收者解释,接收者独立决定采用什么方法完成所需的操作。n消息举例:n使用电视机时,用户通过按钮或遥控器发出转换频道的消息,电视机变换对电视台的接收信号频率,并将结果显示给用户。在这里,用户发出的信息包括:接受者-电视机;要求的服务-转换频道;输入信息-转换后的频道序号;应答信息-转换后频道的节目。 n面向对象技术的封装机制使对象各自独立,各司其职,消息通信则为它们提供了唯一合法的动态联系途径,使它们的行为能够相互配合,构成一个有机的运动的系统

14、。动态绑定(dynamic binding)n动态绑定是一种在运行时确定被执行代码的技术。n指在程序运行时才将消息所请求的操作与实现该操作的方法连接起来。n传统的程序设计语言的过程调用与目标代码的连接(即调用哪个过程)放在程序运行前(即编译时)进行(称为静态绑定),而动态绑定则是把这种连接推迟到运行时才进行。n在一般与特殊关系中,子类是父类的一个特例,所以父类对象可以出现的地方,也允许其子类对象出现。因此在运行过程中,当一个对象发送消息请求服务时,要根据接收对象的具体情况将请求的操作与实现的方法进行连接,即动态绑定。 getArea abstractpolygonareahexagongetA

15、rea() cout“3”rectanglegetArea() cout“2”lengthwidthtrianglegetArea() cout“1”polygon *p;p = new triangle;p.getArea();p = new rectangle;p.getArea();重载n重载是指同一个操作名,对于不同的参数结构,可以执行不同的操作。n重载包括普通方法及运算符两种。n重载提高了面向对象系统的灵活性和可读性。面向对象方法中对象的特点n独立性n封闭性n交互性n被动性n动态性n独立性独立性:对象是数据和对数据所有操作的统一体,对象经过消息接受、操作处理、变换对象状态,最后完成消

16、息所指定的处理任务。对象自身状态的变化,完全取决于自身的操作。n封闭性封闭性:对象以数据为中心。对象的数据被封装在对象的内部,外面是看不见的。n交互性交互性:指对象之间具有通信的能力,对象之间通过相互发送消息进行通信。通过定义的接口相互传递信息,协调完成工作流程。n并行性并行性:对象各自独立处理自己的数据,同时改变自己的状态;对象之间并行工作,通过发送消息实现相互通信。n被动性被动性:被动性是指对象的功能都是由于其他对象发送消息来启动的。一般情况下,对象不能自发启动操作。n动态性动态性:对象的动态性具有两个方面的含义,一是对象可以动态地被创建和取消,对象不是一开始运行软件就存在的,是在软件运行

17、过程中被创建的,也是在软件运行过程中被取消的;二是对象的状态是不断变化的,随着软件的运行,对象的状态不断变化。类间联系类间联系 n任何事物之间都不是互相孤立,而是彼此联系的,并因此构成一个有机的整体。n继承、依赖、关联、聚合、组合继承、依赖、关联、聚合、组合。n可以从结构和连接两个角度介绍。类间关系结构角度结构角度继承关系,即一般与特殊结构;组合关系,即整体与部分结构;一般与特殊结构n又称分类结构分类结构(classification structure),它是由一组具有一般与特殊关系(即继承关系)的类所组成的结构。其中,由一些单继承关系的类形成的结构称为层次结构,由一些多继承关系的类形成的结

18、构称为网格结构,下图显示了一般与特殊的结构。n以类为基本元素、以继承为类间结构手段可以绘制一个类的继承结构,称之为类继承层次结构图类继承层次结构图类继承层次结构图练习n现有一个超类“人人”,请从“人”派生出若干子类,并绘制类继承层次结构图。n注:子类的派生可以从任意角度考虑,至少三层。继承-类对象之间的类型转换n对象是一种引用数据类型,与基本数据类型的变量一样,不同类型的类对象之间也可以进行类型转换。规则如下规则如下:n子类对象转换为父类类型时,可以进行隐式类型转换和显示类型转换n父类对象转换为子类类型时,必须进行显示类型转换n对象的上转型对象对象的上转型对象:哺乳类是老虎类的父类,当我们说老

19、虎是哺乳动物时,老虎将失掉老虎独有的属性和功能。n上转型对象操作说明:n上转型对象不能操作子类新增的方法和成员变量n上转型对象可以操作子类继承的成员变量,也可以使用子类继承的或重写的方法n上转型对象可以通过强制类型转换再转换成为子类对象,这时,该子类对象又具备了子类所有属性和功能n注意注意n不要将父类创建的对象和子类对象的上转型对象混淆,对象的上转型对象的实体是由子类负责创建的,只不过失掉了一些属性和功能而已n对象之间的类型转换只能在父类对象和子类对象之间进行,如果没有继承关系的两个类进行类型转换,会出现编译错误n子类对象转换为父类类型时,可以进行隐式类型转换和显示类型转换;而父类对象转换为子

20、类类型时,必须进行显示类型转换思考:打印结果是?nvoid A:print()ncoutThis is A;endl;nvoid B:print()ncoutThis is B;endl;nA a;nB b;na = b;na.print();nB c = (B)(a);nc.print();A是B父类整体与部分结构n又称组装结构(composition structure),它描述对象之间的组成关系,即一个(或一些)对象是另一个对象的组成或部分。例如,大学中的系由办公室、实验室、资料室等组成, “办公室”、“实验室”、“资料室” 对象类与 “系” 对象类之间是部分与整体的关系。 n以类为基本

21、元素、以组合为类间结构手段,可以构造一个类的组合结构,称之为类组合层次结构图类组合层次结构图计算机主机显示器键盘CPU内存硬盘练习n现有一个超类“人人”,请从“人”派生出若干子类,并绘制类组合层次结构图。n注:子类的派生可以从任意角度考虑,至少三层。组合的其他语义n嵌套性n引用性n递归性组合的嵌套性n类A与类B的组合,反映了类B可以刻画类A,表示了一种类的嵌套性嵌套性(nested).AB组合的引用性n类A的属性的值是另一个类B的实例n弱引用:纯粹类中的实例引用n组合引用:弱引用的扩充,具有整体与部分关系语义 VehicleVidWeightDrivetrainManufacturerVehi

22、cle DrivetrainEngineTransimissionCompanyNameLocationPresident组合的递归性n组合一般情况下,都是单向层次性的n特殊情况下具有递归性CourseC#CnamePC#联系连接角度连接角度对象属性之间的静态联系,即实例连接对象行为之间的动态联系,即消息连接实例连接 n反映对象之间的静态联系,它是通过对象的属性来表现对象之间的依赖关系。在面向对象的术语中,对象之间的实例连接被称为链接(Link),而存在实例连接的对象类之间的联系称为关联关联(Association)。例如,教师与学生是独立的两个类,它们之间存在教学联系,这种联系是通过类中的教

23、学课程、时间、地点等属性建立起来的。消息连接n描述了对象之间的动态联系,即如果一个对象在执行自己的服务时,需要通过消息请求另一个对象为它完成某个服务,那么就说第一个对象与第二个对象之间存在着消息连接。消息连接是有向的,从消息发送者指向消息接收者。 总结n一般与特殊结构、整体与部分结构、实例连接和消息连接都是面向对象的分析和设计阶段必须考虑的重要概念,只有在分析和设计阶段认清问题域中的这些结构与连接关系,编程时才能准确而有效地反映问题域。类层次结构图n以类为基本元素、以继承与组合为类间结构手段构作一个类层次结构,称为类层次类层次结构图结构图n实线段表示继承语义,虚线段代表组合语实线段表示继承语义

24、,虚线段代表组合语义义类层次结构图-例nP73,图4.13练习n结合上两个练习,请画出你的“人”的类层次结构图对象与类的持久性n对象和类存在生命周期n如果生命周期较短,称为挥发性(挥发性(transient)对象或类)对象或类n反之,称为持久性(持久性(persistent)对象或)对象或类类挥发性对象n通常其生命周期开始于new,终于delete。最多和程序的执行时间一样。nA a = new A();nndelete a;持久对象(Persistent object)n持久对象其生存期通常可以超越程序的执行时间而长期存在。n目前多数OOPL不支持永久对象,如果一个对象要长期保存,必须依靠于

25、文件系统或数据库管理须依靠于文件系统或数据库管理系统实现系统实现,程序员需要作对象与文件系统或数据库之间数据格式的转换,以及保存和恢复所需的操作等烦琐的工作。n为了实现永久对象,使上述烦琐工作由系统自动完成,需要永久对象管理系统OMS(object management system)等相关技术支持。OO方法与传统方法比较n传统方法:面向过程设计,以计算为核心,数据与操作分离,不易理解nOOM:以object 为核心,强调对现实概念的模拟而不强调算法。面向对象方法学的基本原则,是按照人们习惯的思维方式建立问题域的模型,开发出尽可能直观、自然地表现求解方法的软件系统。nClass:由特殊到一般的

26、归纳(induction)nInheritance:由一般到特殊的演绎(deduction)n传统方法:结构依赖于功能,不稳定。nOOM:以object模拟实体,需求变化不会引起结构的整体变化,因为实体相对稳定,故系统也相应稳定。n传统方法:通过建立标准函数库来重用。但标准函数缺少必要的“柔性”,难以适应不同场合的不同需要nOOM:一个class所有的 instances 都可重用它的代码;由 inheritance 派生出的新的 class 可重用其父类的代码,并且可以修改、扩充而不影响其父类的使用。n传统方法:可维护性是最令人头痛的问题。nOOM:从以下几方面改善了可维护性 n稳定性好:软

27、件功能需求的变化不牵动全局,只需局部修改;nClass 独立性强:只要修改不涉及class的对外接口,则内部修改完全不影响外部调用;nInheritance和多态性(polymorphism)使其很容易被修改和扩充;n容易理解;n容易测试、调试。nOOM并不是减少了开发时间,而是通过提高可重用性、可维护性,进行扩充和修改的容易程度等,从长远角度改进了软件的质量。面向对象方法的优点n从认知学的角度来看,面向对象方法符合人们对客观世界的认识规律。n面向对象方法开发的软件系统易于维护,其体系结构易于理解、扩充和修改。n面向对象方法中的继承机制有力支持软件的复用。典型的面向对象过程模型n使用面向对象方

28、法学开发软件时,面向对象的分析和设计是开发的重点。这种开发方法,在整个软件开发过程中使用统一的使用统一的概念概念对象对象,各个阶段的模型概念基本一致,各个开发阶段无缝连接,在用户和软件开发人员对系统的认识深化的过程中,对各个开发步骤进行多次重复迭代对各个开发步骤进行多次重复迭代。n喷泉模型喷泉模型:该模型认为软件开发过程自下而上周期的各阶段是相互迭代和无间隙的特性。是一种典型的面向对象软件开发模型。n软件的某个部分常常被重复工作多次,相关对象在每次迭代中随之加入渐进的软件成分。无间隙指在各项活动之间无明显边界,如分析和设计活动之间没有明显的界限,由于对象概念的引入,表达分析、设计、实现等活动只

29、用对象类和关系,从而可以较为容易地实现活动的迭代和无间隙,使其开发自然地包括复用。 模型图中的箭头表示该过程的迭代,圆圈重叠表示无缝连接并且没有明确的界限。n按照喷泉模型开发软件的过程如下图所示。实箭头表示开发顺序,空箭头表示回归迭代次序,下一个阶段发现问题,可能回归到任一个先前的阶段。分析设计编码确认喷泉模型软件开发流程喷泉模型的优点n喷泉模型不像瀑布模型那样,需要分析活动结束后才开始设计活动,设计活动结束后才开始编码活动。该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是可以提高软件项目开发效率,节省开发时间。喷泉模型的缺点n由于喷泉模型在各个开发阶段是重叠的,因此在开发过

30、程中需要大量的开发人员,因此不利于项目的管理。此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。4.4 面向对象的数据模型n面向对象数据模型(Object Oriented Data Model,OODM)即是依据面向对象方法所建立的数据模型n面向对象数据模型是捕获在面向对象程序设计中所支持的对象语义的逻辑数据模型,它是持久的和共享的对象集合n面向对象数据模型把实体表示为类n面向对象数据库把数据和与对象相关的代码封装成单一组件,外面不能看到其里面的内容。因此,面向对象数据模型强调对象(由数据和代码组成)而不是单独的数据。n面向对象数据模型的结构是非常容易变化的。与传统的数据库(如层次、网状或关系)不同,对象模型没有单一固定的数据库结构。编程人员可以给类或对象类型定义任何有用的结构,例如,链表、集合、数组等。 基本特征n一般可以用OOM中的类层次结构表示OODMn面向对象数据模型的基本特征基本特征包括数据模式(数据结构)、数据操作和数据约束三

温馨提示

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

评论

0/150

提交评论