《软件工程 第7章 面向对象方法概论.ppt》由会员分享,可在线阅读,更多相关《软件工程 第7章 面向对象方法概论.ppt(85页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、软件工程软件工程Software Engineering2023年1月3日1广东工业大学计算机学院第第7章章 面向对象方法概论面向对象方法概论o本章内容:本章内容:o7.1 面向对象简介面向对象简介o7.2 面向对象的相关概念面向对象的相关概念o7.3 链接与关联链接与关联o7.4 构造分组构造分组2023/1/32广东工业大学计算机学院第第7章章 面向对象方法概论面向对象方法概论 o面面向向对对象象方方法法的的基基本本思思想想是是从从现现实实世世界界中中客客观观存存在在的的事事物物出出发发来来构构造造软软件件系系统统,并并在在系系统统构构造造中中尽尽可可能能地地运运用用人人类类的的自自然然思
2、思维维方方式式。面面向向对对象象开开发发是是现现实实世世界界中中以以抽抽象象为为基基础础的的软软件件思思维维的的一一种种崭崭新新方方式式。“开开发发”的的含含义义延延伸伸至至软软件件生生命命周周期期的的前前期期部部分分:分分析析、设设计计和和实实现现。本本章章介介绍绍面面向向对对象象方方法法的的主主要要概概念念,包包括括对对象象、类类、属属性性、方方法法、封封装装等等,并并将将介介绍绍建建立立的的对对象象之之间间、类类之之间间以以及及对对象象和和类类之之间间的的联系,同时还将介绍概括和分组等相关知识。联系,同时还将介绍概括和分组等相关知识。2023/1/33广东工业大学计算机学院o7.1 面向
3、对象简介面向对象简介 o“面向对象面向对象”是把一组相互之间没有联系的对象有是把一组相互之间没有联系的对象有效地集成在一起,这些对象都是将数据结构和行为效地集成在一起,这些对象都是将数据结构和行为紧密地结合在一起的。紧密地结合在一起的。o通常面向对象方法至少包含四个方面:标识、分类、通常面向对象方法至少包含四个方面:标识、分类、多态和继承。多态和继承。o通过将抽象、封装和模块结合在一起的方法,从而通过将抽象、封装和模块结合在一起的方法,从而使面向对象的思想贯穿于整个软件开发生命周期中。使面向对象的思想贯穿于整个软件开发生命周期中。2023/1/34广东工业大学计算机学院o7.1.1 什么是面向
4、对象什么是面向对象 o面向对象方法的基本思想是从现实世界中客观存在面向对象方法的基本思想是从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统的事物(即对象)出发来构造软件系统,并在系统构造中尽可能地运用人类的自然思维方式。开发一构造中尽可能地运用人类的自然思维方式。开发一个软件是为了解决某些问题,这些问题所涉及的业个软件是为了解决某些问题,这些问题所涉及的业务范围称作该软件的问题域。面向对象方法强调直务范围称作该软件的问题域。面向对象方法强调直接以问题域(客观世界)中的事物为中心来思考问接以问题域(客观世界)中的事物为中心来思考问题、认识问题,并根据这些事物的本质特征,把它题、认
5、识问题,并根据这些事物的本质特征,把它们抽象地表示为系统中的对象,作为系统的基本构们抽象地表示为系统中的对象,作为系统的基本构成单位。成单位。2023/1/35广东工业大学计算机学院o具体地讲,面向对象方法有以下一些主要特点:具体地讲,面向对象方法有以下一些主要特点:o(1)从问题域中客观存在的事物出发来构造软件)从问题域中客观存在的事物出发来构造软件系统,用对象作为对这些事物的抽象表示,并以此系统,用对象作为对这些事物的抽象表示,并以此作为系统的基本构成单位。作为系统的基本构成单位。o(2)事物的静态特征(即可能用一些数据来表达)事物的静态特征(即可能用一些数据来表达的特征)用对象的属性表示
6、,事物的动态特征(即的特征)用对象的属性表示,事物的动态特征(即事物的行为)用对象的服务表示。事物的行为)用对象的服务表示。o(3)对象的属性与服务结合为一体,成为一个独)对象的属性与服务结合为一体,成为一个独立的实体,对外屏蔽其内部细节(称作封装)。立的实体,对外屏蔽其内部细节(称作封装)。o(4)对事物进行分类。把具有相同属性和服务的)对事物进行分类。把具有相同属性和服务的对象归为一类,类是这些对象的抽象描述,每个对对象归为一类,类是这些对象的抽象描述,每个对象是它的类的一个实例。象是它的类的一个实例。2023/1/36广东工业大学计算机学院o(5)通过在不同程度上运用抽象的原则(较多或)
7、通过在不同程度上运用抽象的原则(较多或较少地忽略事物之间的差异),可以得到较一般的较少地忽略事物之间的差异),可以得到较一般的类和较特殊的类。特殊类继承一般类的属性与服务,类和较特殊的类。特殊类继承一般类的属性与服务,面向对象方法支持对这种继承关系的描述与实现,面向对象方法支持对这种继承关系的描述与实现,从而简化系统的构造过程及其文档。从而简化系统的构造过程及其文档。o(6)复杂的对象可以用简单的对象作为其构成部)复杂的对象可以用简单的对象作为其构成部分(称作聚合)。分(称作聚合)。o(7)对象之间通过消息进行通信,以实现对象之)对象之间通过消息进行通信,以实现对象之间的动态联系。间的动态联系
8、。o(8)通过关联表达对象之间的静态关系。)通过关联表达对象之间的静态关系。2023/1/37广东工业大学计算机学院o定义定义7-1:面向对象方法是一种运用对象、类、:面向对象方法是一种运用对象、类、继承、封装、聚合、消息传送、多态性等概念来构继承、封装、聚合、消息传送、多态性等概念来构造系统的软件开发方法。造系统的软件开发方法。o面向对象方法的基本概念与原则、发展历史与现状面向对象方法的基本概念与原则、发展历史与现状以及它对改进软件开发的重要意义等,将在以后各以及它对改进软件开发的重要意义等,将在以后各节中详细介绍。节中详细介绍。2023/1/38广东工业大学计算机学院7.1.2 面向对象方
9、法的历史及现状面向对象方法的历史及现状o面向对象方法的某些概念,可以追溯到面向对象方法的某些概念,可以追溯到20世纪世纪50年代人工智能的早期研究。年代人工智能的早期研究。o但是人们一般把但是人们一般把20世纪世纪60年代由挪威计算中心开年代由挪威计算中心开发的发的Simula-67语言看作面向对象语言发展史上语言看作面向对象语言发展史上的第一个里程碑。的第一个里程碑。o但是直到但是直到20世纪世纪80年代后期,年代后期,SmallTalk的应的应用尚不够广泛。用尚不够广泛。o20世纪世纪80年代中期到年代中期到90年代,是面向对象语言走年代,是面向对象语言走向繁荣的阶段。从向繁荣的阶段。从2
10、0世纪世纪80年代后期开始,国际年代后期开始,国际上有一批论述面向对象的分析与设计(或面向对象上有一批论述面向对象的分析与设计(或面向对象的建模与设计)的专著相继问世。的建模与设计)的专著相继问世。2023/1/39广东工业大学计算机学院7.2 面向对象的相关概念面向对象的相关概念 o7.2.1 对象对象o对象是构成世界的一个独立单位,它具有自己的静对象是构成世界的一个独立单位,它具有自己的静态特征和动态特征。静态特征即可以用某种数据来态特征和动态特征。静态特征即可以用某种数据来描述的特征,动态特征即对象所表现的行为或对象描述的特征,动态特征即对象所表现的行为或对象所具有的功能。所具有的功能。
11、o属性和服务,是构成对象的两个主要因素。其中属属性和服务,是构成对象的两个主要因素。其中属性是用来描述对象静态特征的一个数据项;服务是性是用来描述对象静态特征的一个数据项;服务是用来描述对象动态特征(行为)的一个操作序列,用来描述对象动态特征(行为)的一个操作序列,也可称为操作或方法。也可称为操作或方法。2023/1/310广东工业大学计算机学院o定义定义7-2:对象是系统中用来描述客观事物的一:对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务构成。由一组属性和对这组属性进行操作的一
12、组服务构成。o附属定义:附属定义:o属性:是用来描述对象静态特征的一个数据项。属性:是用来描述对象静态特征的一个数据项。o服务:是用来描述对象动态特征(行为)的一个操服务:是用来描述对象动态特征(行为)的一个操作序列。作序列。2023/1/311广东工业大学计算机学院o特例:特例:o(1)有属性,没有服务。例如信息系统中的人员)有属性,没有服务。例如信息系统中的人员信息、物质信息。信息、物质信息。o(2)有服务,没有属性。例如操作系统中的屏幕)有服务,没有属性。例如操作系统中的屏幕中断:中断:disable();控制结束检查:;控制结束检查:getclork()。2023/1/312广东工业大
13、学计算机学院o对象有如下一些基本特点:对象有如下一些基本特点:o(1)以数据为中心。)以数据为中心。o(2)对象是主动的。)对象是主动的。o(3)实现了数据封装。)实现了数据封装。o(4)本质上具有并行性。)本质上具有并行性。o(5)模块独立性好。)模块独立性好。2023/1/313广东工业大学计算机学院o7.2.2 类类 o人类在认识客观世界时经常采用的思维方法,就是人类在认识客观世界时经常采用的思维方法,就是把众多的事物归纳、划分成一些类。依据抽象的原把众多的事物归纳、划分成一些类。依据抽象的原则进行分类,即忽略事物的非本质特征,只注意那则进行分类,即忽略事物的非本质特征,只注意那些与当前
14、目标有关的本质特征,从而找出事物的共些与当前目标有关的本质特征,从而找出事物的共性;把具有共同性质的事物划分为一类,得出一个性;把具有共同性质的事物划分为一类,得出一个抽象的概念。抽象的概念。o定义定义7-3:类是具有相同属性和服务的一组对象:类是具有相同属性和服务的一组对象的集合,它为属于该类的全部对象提供了统一的抽的集合,它为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。象描述,其内部包括属性和服务两个主要部分。2023/1/314广东工业大学计算机学院o类与对象的关系如同一个模具与用这个模具铸造出类与对象的关系如同一个模具与用这个模具铸造出来的铸件之间的关系。
15、它们的关系可以用图来的铸件之间的关系。它们的关系可以用图7-1表表示。示。图7-1 类与对象的关系2023/1/315广东工业大学计算机学院o同类对象具有相同的属性与服务,是指它们的定义同类对象具有相同的属性与服务,是指它们的定义形式相同,而不是说每个对象的属性值都相同。形式相同,而不是说每个对象的属性值都相同。o运用抽象的原则舍弃对象的特殊性,抽取其共同性,运用抽象的原则舍弃对象的特殊性,抽取其共同性,则得到适应一批对象的类,称这个类为一般类。则得到适应一批对象的类,称这个类为一般类。o在一般类的基础上,如果定义一个新类时考虑其某在一般类的基础上,如果定义一个新类时考虑其某些特殊性。则这个类
16、是前一般类的特殊类。些特殊性。则这个类是前一般类的特殊类。o如果考虑若干类所具有的共同的特征,舍弃它们各如果考虑若干类所具有的共同的特征,舍弃它们各自的特殊性,则得到这些类的一般类。一般类和特自的特殊性,则得到这些类的一般类。一般类和特殊类是相对而言的,它们之间是一种真包含的关系。殊类是相对而言的,它们之间是一种真包含的关系。2023/1/316广东工业大学计算机学院o7.2.3 对象图对象图o对象图提供了对象、类和它们相互之间联系的建模对象图提供了对象、类和它们相互之间联系的建模规范化图形表示。规范化图形表示。o对象图有两种类型:类图和实例图。对象图有两种类型:类图和实例图。o类图是描述许多
17、可能的数据实例的一种模式或模板,类图是描述许多可能的数据实例的一种模式或模板,类图也就是描述对象类。类图也就是描述对象类。o实例图是描述对象之间相互关系的一种特殊的集合,实例图是描述对象之间相互关系的一种特殊的集合,实例图也就是描述对象实例。实例图也就是描述对象实例。2023/1/317广东工业大学计算机学院o7.2.4 属性属性 o属性是一个类中对象所具有的数据值。对每个对象属性是一个类中对象所具有的数据值。对每个对象实例来说,每个属性都是一个值。实例来说,每个属性都是一个值。o一个属性应是纯数据值,而不是一个对象。与对象一个属性应是纯数据值,而不是一个对象。与对象不同,纯数据值没有标识。不
18、同,纯数据值没有标识。o属性置于类矩形框的第二个部分,每个属性名有可属性置于类矩形框的第二个部分,每个属性名有可供选择项,如类型和缺省值供选择项,如类型和缺省值。2023/1/318广东工业大学计算机学院o7.2.5 服务(操作或方法)服务(操作或方法)o服务是一种功能或一种转换,它应用于类中的对象服务是一种功能或一种转换,它应用于类中的对象或被类中对象使用。或被类中对象使用。o相同的服务可用于许多不同的类中,这样的服务是相同的服务可用于许多不同的类中,这样的服务是多态的。多态的。o每种服务有一个内含参数的目标对象,该服务的行每种服务有一个内含参数的目标对象,该服务的行为依赖于它的目标类。一个
19、对象为依赖于它的目标类。一个对象“知道知道”它的类,它的类,并能正确实现该服务。并能正确实现该服务。o一种服务可对它的目标对象添加参数,这种以参数一种服务可对它的目标对象添加参数,这种以参数化表示的服务并不影响方法的选择,方法仅依赖于化表示的服务并不影响方法的选择,方法仅依赖于该目标对象的类该目标对象的类 2023/1/319广东工业大学计算机学院o服务列置于类矩形框的第三部分,也是最低的部分,服务列置于类矩形框的第三部分,也是最低的部分,每种服务名可跟有可任选的部分,诸如参数表和结每种服务名可跟有可任选的部分,诸如参数表和结果类型。果类型。2023/1/320广东工业大学计算机学院o7.2.
20、6 封装封装 o封装是面向对象方法的一个重要原则。它有两个涵封装是面向对象方法的一个重要原则。它有两个涵义:第一个涵义是把对象的全部属性和全部服务结义:第一个涵义是把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(即对象)合在一起,形成一个不可分割的独立单位(即对象);第二个涵义也称作;第二个涵义也称作“信息隐蔽信息隐蔽”,即尽可能隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个边界(或者说形成对象的内部细节,对外形成一个边界(或者说形成一道屏障),只保留有限的对外接口使之与外部发一道屏障),只保留有限的对外接口使之与外部发生联系。生联系。o定义定义7-4:封装就是把对象的属性、
21、服务结合成:封装就是把对象的属性、服务结合成为一个独立的系统单位,并尽可能隐蔽对象的内部为一个独立的系统单位,并尽可能隐蔽对象的内部细节。细节。2023/1/321广东工业大学计算机学院o封装是一种机制,封装的信息隐蔽作用反映了事物封装是一种机制,封装的信息隐蔽作用反映了事物的相对独立性。的相对独立性。o前面已经讨论了封装的好处,然而封装也有它的副前面已经讨论了封装的好处,然而封装也有它的副作用。如果强调严格的封装,则对象的任何属性都作用。如果强调严格的封装,则对象的任何属性都不允许外部直接存取,因此就要增加许多没有其他不允许外部直接存取,因此就要增加许多没有其他意义、只负责读或写的服务。这为
22、编程工作增加了意义、只负责读或写的服务。这为编程工作增加了负担,增加了运行开销,并且使程序显得臃肿。为负担,增加了运行开销,并且使程序显得臃肿。为了避免这一点,语言往往采取一种比较现实的灵活了避免这一点,语言往往采取一种比较现实的灵活态度态度允许对象有不同程度的可见性。允许对象有不同程度的可见性。2023/1/322广东工业大学计算机学院o7.2.7 继承继承o定义定义7-5:特殊类的对象拥有其一般类的全部属:特殊类的对象拥有其一般类的全部属性与服务,就是称作特殊类对一般类的继承。性与服务,就是称作特殊类对一般类的继承。o继承意味着继承意味着“自动地拥有自动地拥有”或或“隐含地复制隐含地复制”
23、,即特,即特殊类中不必重新定义已在它的一般类中定义过的属殊类中不必重新定义已在它的一般类中定义过的属性和服务,而它却自动地、隐含地拥有其一般类的性和服务,而它却自动地、隐含地拥有其一般类的所有属性与服务。所有属性与服务。2023/1/323广东工业大学计算机学院o下面给出用下面给出用C+写的在日期表示形式上的类继承。写的在日期表示形式上的类继承。Class DATE /用于表示亚洲日期的类用于表示亚洲日期的类DATE(int yy=0;int mm=0;int dd=0;)voide set_date(intyy,int mm,ntdd);void get_date(int yy,intmm,
24、intdd);void printed()();protected:int year,month,day;class E-DATE:public DATE/用于表示欧洲日用于表示欧洲日期的类,继承了用于表示亚洲日期的类期的类,继承了用于表示亚洲日期的类 void printed-de();2023/1/324广东工业大学计算机学院o继承关系是传递的。继承关系是传递的。o继承具有重要的实际意义,它简化了人们对事物的继承具有重要的实际意义,它简化了人们对事物的认识和描述。认识和描述。o继承对于软件复用是很有益的。继承对于软件复用是很有益的。o一个类可以是多个一般类的特殊类,它从多个一般一个类可以是
25、多个一般类的特殊类,它从多个一般类中继承了属性与服务,这种继承模式叫作多继承。类中继承了属性与服务,这种继承模式叫作多继承。o但在实现时能不能做到这一点却取决于编程语言是但在实现时能不能做到这一点却取决于编程语言是否支持多继承。继承是任何一种否支持多继承。继承是任何一种OOPL必须具备的必须具备的功能,多继承则未必,现在有许多功能,多继承则未必,现在有许多OOPL只支持单只支持单继承而不支持多继承。继承而不支持多继承。2023/1/325广东工业大学计算机学院o所谓命名冲突是指当一个特殊类继承了多个所谓命名冲突是指当一个特殊类继承了多个一般类时,如果这些一般类中的属性或服务一般类时,如果这些一
26、般类中的属性或服务有彼此同名的现象,则当特殊类中引用这样有彼此同名的现象,则当特殊类中引用这样的属性名或者服务名时,系统无法判定它的的属性名或者服务名时,系统无法判定它的语义到底是指哪个一般类中的属性和服务。语义到底是指哪个一般类中的属性和服务。2023/1/326广东工业大学计算机学院1)“命名冲突命名冲突”问题问题 例如:例如:Class base public:int a,b;class de:public base public:int b,c:2023/1/327广东工业大学计算机学院ovoid f()ode d;ode.a=1;od.b=2;/如果改成这样:如果改成这样:d.bas
27、e:b=2;就可以就可以od.b=3;od.c=4;obase*dp=&d;/也不行。也不行。o2023/1/328广东工业大学计算机学院作者是希望在单元的结果如下图作者是希望在单元的结果如下图7-4所示所示 o图图7-4 希望在单元的结果希望在单元的结果o但实际结果是如图但实际结果是如图7-5这样这样:2023/1/329广东工业大学计算机学院2)函数名冲突)函数名冲突 例:例:oclass base 1opublic:o void show()o o couti”n”;oprotected:o int i;o2023/1/330广东工业大学计算机学院oclass base 2opublic
28、:o void show()o o coutj”n”;oprotected:o int j;o 2023/1/331广东工业大学计算机学院class de:public base1,public base2 void set(int x,int y)i=x;j=y;main()de obj;obj.set(5,7);obj.show();/有二义性有二义性 obj.base1:show();obj.base2:show();return;2023/1/332广东工业大学计算机学院o解决的办法有两种解决的办法有两种:o(1)不允许多继承结构中的各个一般类的属性及)不允许多继承结构中的各个一般类的
29、属性及服务取相同的名字,这会为开发者带来一些不便。服务取相同的名字,这会为开发者带来一些不便。o(2)由)由OOPL提供一种更名机制,使程序可以在提供一种更名机制,使程序可以在特殊类中更换从各个一般类继承来的属性或服务的特殊类中更换从各个一般类继承来的属性或服务的名字。名字。2023/1/333广东工业大学计算机学院o7.2.8 多重继承多重继承o多多重重继继承承允允许许一一个个类类有有多多个个超超类类,并并从从多多个个超超类类中中继继承承属属性性、操操作作和和关关联联。这这些些混混合合信信息息来来自自于于两两个个或多个原始信息。或多个原始信息。o1.有有不不同同鉴鉴别别器器的的多多重重继继承
30、承在在图图7-4中中,人人可可以以通通过过管管理理状状态态的的基基本本前前提提(经经理理或或职职员员)和和雇雇佣佣状状态态(全全部部工工作作时时间间或或部部分分工工作作时时间间的的职职员员)来来判判别别这这个个人人是是否否是是经经理理或或他他是是不不是是独独立立的的雇雇佣佣状状态态。四四个个子子类类尽尽可可能能把把管管理理状状态态和和雇雇佣佣状状态态组组合合在在一一起起,图中表示了一个全部工作时间的职员情况。图中表示了一个全部工作时间的职员情况。2023/1/334广东工业大学计算机学院图7-4 多重继承2023/1/335广东工业大学计算机学院o2.无公共祖先的多重继承无公共祖先的多重继承
31、o多重继承,甚至有时超类也可能没有公共祖先,这多重继承,甚至有时超类也可能没有公共祖先,这通常发生在软件库的混合功能方面。当软件库重叠通常发生在软件库的混合功能方面。当软件库重叠或抵触时,多重继承就成问题了或抵触时,多重继承就成问题了 图7-5 对象多重继承 2023/1/336广东工业大学计算机学院o3.多重继承的工作环境多重继承的工作环境o用角色的聚合授权。带多个独立概括的超类能重构用角色的聚合授权。带多个独立概括的超类能重构成一个其元素各表示一个概括的聚合。这种方法是成一个其元素各表示一个概括的聚合。这种方法是通过一组构成扩展对象的对象来替代确定的单一对通过一组构成扩展对象的对象来替代确
32、定的单一对象。通过该聚合的继承操作不是自动的,必须由连象。通过该聚合的继承操作不是自动的,必须由连接类出发传给合适的成员。接类出发传给合适的成员。o继承最重要的类并授权其余的类。构造了它本身的继承最重要的类并授权其余的类。构造了它本身的是最重要超类的子类的一种连接类。这个连接类作是最重要超类的子类的一种连接类。这个连接类作为余下的超类的聚合对待,它们的操作作为前面的为余下的超类的聚合对待,它们的操作作为前面的替换授权。这种方法通过一个概括提供了标识和继替换授权。这种方法通过一个概括提供了标识和继承。承。2023/1/337广东工业大学计算机学院o嵌套概括嵌套概括 o分解技术分解技术 o分割一个
33、子类分割一个子类 o用关联替代概括用关联替代概括 2023/1/338广东工业大学计算机学院o为选择最好的工作环境必须考虑以下一些问题:为选择最好的工作环境必须考虑以下一些问题:o(1)如子类有好几个同样重要的超类,那么最好)如子类有好几个同样重要的超类,那么最好用用“授权方法授权方法”并保持该模型的对称性。并保持该模型的对称性。o(2)如某一超类明显地处于支配地位,而其他的)如某一超类明显地处于支配地位,而其他的类处于相对次要地位时,用单一继承和授权方法来类处于相对次要地位时,用单一继承和授权方法来实现多重继承是最佳选择。实现多重继承是最佳选择。o(3)如组合数目少,则可考虑嵌套概括;如果组
34、)如组合数目少,则可考虑嵌套概括;如果组合数目多,则避免使用嵌套概括。合数目多,则避免使用嵌套概括。o(4)如一超类比其他的超类有更多的特征,或明)如一超类比其他的超类有更多的特征,或明显的是执行的瓶颈,则通过该路径来保持继承。显的是执行的瓶颈,则通过该路径来保持继承。2023/1/339广东工业大学计算机学院o(5)如选择嵌套概括,那么首先要考虑的是最重)如选择嵌套概括,那么首先要考虑的是最重要的分解因素,然后考虑第二个重要的分解因素。要的分解因素,然后考虑第二个重要的分解因素。o(6)如果需要复制大量代码,那就尽量避免用嵌)如果需要复制大量代码,那就尽量避免用嵌套概括。套概括。o(7)要维
35、护严格标识的重要性,只有嵌套概括才)要维护严格标识的重要性,只有嵌套概括才能保证这一点。能保证这一点。o(8)2023/1/340广东工业大学计算机学院要注意的问题:避免太多层次的继承要注意的问题:避免太多层次的继承o例如:例如:2023/1/341广东工业大学计算机学院o一般化后一般化后的情况:的情况:2023/1/342广东工业大学计算机学院问题讨论:问题讨论:o1、当对象类、当对象类e出现要修改的问题时,而要修改的出现要修改的问题时,而要修改的根源却不在对象类根源却不在对象类e中。而是存在在被其继承的上中。而是存在在被其继承的上源对象中。源对象中。o2、要查找到修改源,就要遍历这棵、要查
36、找到修改源,就要遍历这棵“树树”。o3、现在没有这样的查找修改源的软件工具。、现在没有这样的查找修改源的软件工具。o4、人工遍历。修改源如果在、人工遍历。修改源如果在c、d、f、g、h、j或或者者an这些对象类中,或者在这些对象类附近,遍这些对象类中,或者在这些对象类附近,遍历工程就容易。如果是在历工程就容易。如果是在j1、i1或者杂其附近,那或者杂其附近,那么遍历工程就大了。么遍历工程就大了。o结论:继承应选择小于等于在结论:继承应选择小于等于在3、4层内层内。2023/1/343广东工业大学计算机学院o7.2.9 消息消息o在在OO方法中把向对象发出的服务请求称作消息。方法中把向对象发出的
37、服务请求称作消息。通过消息进行对象之间的通信,也是通过消息进行对象之间的通信,也是OO方法的一方法的一个原则,它与封装的原则有密切的关系。个原则,它与封装的原则有密切的关系。oOO方法中对消息的定义是:方法中对消息的定义是:o定义定义7-6:消息就是向对象发出的服务请求,它:消息就是向对象发出的服务请求,它应该含有下述信息:提供服务的对象标识、服务标应该含有下述信息:提供服务的对象标识、服务标识、输入信息和回答信息。识、输入信息和回答信息。o内容:提供服务的对象标识、服务标识、输入信息内容:提供服务的对象标识、服务标识、输入信息和回答信息。和回答信息。2023/1/344广东工业大学计算机学院
38、o消息的格式,这种规定称作消息协议。消息的格式,这种规定称作消息协议。o消息的接收者是提供服务的对象。在设计时,它对消息的接收者是提供服务的对象。在设计时,它对外提供的每个服务应规定消息的格式,这种规定称外提供的每个服务应规定消息的格式,这种规定称作消息协议。作消息协议。2023/1/345广东工业大学计算机学院o作为作为OO方法中的一个基本概念,采用方法中的一个基本概念,采用“消息消息”这个这个术语有以下好处:术语有以下好处:o(1)更接近人们日常思维所采用的术语。)更接近人们日常思维所采用的术语。o(2)其涵义更具有一般性,而不限制采用何种实)其涵义更具有一般性,而不限制采用何种实现技术。
39、现技术。2023/1/346广东工业大学计算机学院o7.2.10 结构与连接结构与连接o系统开发者需认识并描述对象之间的以下几种关系:系统开发者需认识并描述对象之间的以下几种关系:o(1)对象的分类关系。)对象的分类关系。o(2)对象之间的组成关系。)对象之间的组成关系。o(3)对象属性之间的静态联系。)对象属性之间的静态联系。o(4)对象行为之间的动态联系。)对象行为之间的动态联系。2023/1/347广东工业大学计算机学院o1.一般一般-特殊结构特殊结构o一般一般-特殊结构又称作分类结构(特殊结构又称作分类结构(Classification Structure),它是由一组具有一般),它是
40、由一组具有一般-特殊关系特殊关系(继承关系)的类所组成的结构。它是一个以类为(继承关系)的类所组成的结构。它是一个以类为结点,以继承关系为边的连通有向图。结点,以继承关系为边的连通有向图。2023/1/348广东工业大学计算机学院图7-6 一般-特殊结构2023/1/349广东工业大学计算机学院o2.整体整体-部分结构部分结构o整体整体-部分结构又称作组装结构(部分结构又称作组装结构(Composition Structure),它描述对象之间的组成关系),它描述对象之间的组成关系 图7-7 整体-部分结构 2023/1/350广东工业大学计算机学院o3.实例连接实例连接o实例连接反映对象与对
41、象之间的静态联系。实例连接反映对象与对象之间的静态联系。o4.消息连接消息连接o消息连接描述对象之间的动态联系消息连接描述对象之间的动态联系 2023/1/351广东工业大学计算机学院o7.2.11 多态性多态性 o对象的多态性是指在一般类中定义的属性或对象的多态性是指在一般类中定义的属性或服务被特殊类继承之后,可以具有不同的数服务被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为据类型或表现出不同的行为 o支持多态性的实现的语言应具备的功能是:支持多态性的实现的语言应具备的功能是:o重载重载在特殊类中对继承来的属性或服务在特殊类中对继承来的属性或服务进行重新定义。进行重新定义。o动态
42、绑定动态绑定在运行时根据对象接收的消息在运行时根据对象接收的消息动态地确定要连接哪一段服务代码。动态地确定要连接哪一段服务代码。2023/1/352广东工业大学计算机学院o重载重载在特殊中对继承来的属性或服在特殊中对继承来的属性或服务进行重新定义。务进行重新定义。o例如:例如:oo#include ooint abs(int x)ooo2023/1/353广东工业大学计算机学院odouble abs(double x)oooolong abs(long x)ooo2023/1/354广东工业大学计算机学院oMain()oocoutabs(-5)”n”;ocoutabs(-5L)”n”;ocou
43、tabs(3.14)”n”;oreturn;o2023/1/355广东工业大学计算机学院动态绑定动态绑定o例如:例如:o#include“”/虚函数虚函数o oclass men /基类基类opublic:ovirtual void ans()ocout”I am a member”n”;oreturn;oo2023/1/356广东工业大学计算机学院oclass te:public men /继承继承类类1opublic:ovirtual void ans()ocout”I am a teacher”n”;oreturn;oo2023/1/357广东工业大学计算机学院oclass st:pub
44、lic men /继承继承类类2opublic:ovirtual void ans()ocout”I am a student”ans();owho=&teacher;/访问继承类中的函数访问继承类中的函数owho-ans();owho=&student;/访问继承类中的函数访问继承类中的函数owho-ans();oreturn 0;2023/1/359广东工业大学计算机学院o得出结果:得出结果:I am a membero I am a teachero I am a studento将基类将基类mem定义的定义的ans()前的前的virtual保留保留字删除,输出结果变为:字删除,输出结果
45、变为:o I am a membero I am a membero I am a member2023/1/360广东工业大学计算机学院类属类属服务参量的类型可以是参数化的。服务参量的类型可以是参数化的。o例:定义链表类属类例:定义链表类属类GLIST的界面的界面oTemplate 2023/1/361广东工业大学计算机学院oClass leoPublic:oList(int lenth)/构造构造ov=new ELELENTH;o:oolist()/析构析构oo2023/1/362广东工业大学计算机学院oELEoperator(int index)o:ooPrivate:oELE*V;o2
46、023/1/363广东工业大学计算机学院o7.2.12 永久对象永久对象o所谓永久对象,就是生存期可以超越程序的执行时所谓永久对象,就是生存期可以超越程序的执行时间而长期存在的对象。间而长期存在的对象。o永久对象的实现需要有较强的技术支持。它需要一永久对象的实现需要有较强的技术支持。它需要一个能够描述和处理永久对象的编程语言。个能够描述和处理永久对象的编程语言。2023/1/364广东工业大学计算机学院o7.2.13 主动对象主动对象o在在OOD阶段进行任务管理部分的设计时用主动对阶段进行任务管理部分的设计时用主动对象表示每个任务。其定义是:主动对象是一组属性象表示每个任务。其定义是:主动对象
47、是一组属性和一组服务的封装体,其中至少有一个服务不需要和一组服务的封装体,其中至少有一个服务不需要接收消息就能主动执行。接收消息就能主动执行。2023/1/365广东工业大学计算机学院o7.2.14 对象类的表示方法对象类的表示方法o在图在图7-8中小结了类的对象模型表示。中小结了类的对象模型表示。图7-8 类的对象模型 2023/1/366广东工业大学计算机学院7.3 链接与关联链接与关联 o7.3.1 一般概念一般概念o链接是在对象实例之间的一种物理或概念连接链接是在对象实例之间的一种物理或概念连接 o关联描述了具有公共结构和共同语义的链接的组合关联描述了具有公共结构和共同语义的链接的组合
48、 o关联本来就是双向的关联本来就是双向的 o一种链接表示两个或两个以上对象之间的联系一种链接表示两个或两个以上对象之间的联系 o关联可以是二元、三元或更高阶的关联可以是二元、三元或更高阶的 2023/1/367广东工业大学计算机学院o7.3.2 重数重数 o重数指定一个类的多少个实例与另一个关联类的单重数指定一个类的多少个实例与另一个关联类的单一实例有关一实例有关 o重数依赖于假定和如何定义问题的边界重数依赖于假定和如何定义问题的边界 o最重要的重数差别是最重要的重数差别是“一一”和和“多多”之间之间 2023/1/368广东工业大学计算机学院o7.3.3 关联的重要性关联的重要性 o大多数面
49、向对象语言用对象指针实现关联,指针在大多数面向对象语言用对象指针实现关联,指针在设计的最后阶段,被看作是为实现优化而引入的,设计的最后阶段,被看作是为实现优化而引入的,它也可能直接实现关联对象,但在实现期间,关联它也可能直接实现关联对象,但在实现期间,关联对象的使用的确是一个设计的策略对象的使用的确是一个设计的策略 2023/1/369广东工业大学计算机学院7.3.4 三元关联三元关联o三元关联是具有三个角色的关联,不能重新声明为三元关联是具有三个角色的关联,不能重新声明为二元关联二元关联 o三元关联可以有链接属性,或者作为关联类处理,三元关联可以有链接属性,或者作为关联类处理,如图如图7-9
50、所示所示 图7-9 多元关联 2023/1/370广东工业大学计算机学院o7.3.5 关联的候选关键字关联的候选关键字 o在图在图7-9中,在三元关联类中或下一个菱形中没有中,在三元关联类中或下一个菱形中没有重数存在,虽然期望对三元关联用重数表示,但最重数存在,虽然期望对三元关联用重数表示,但最好还是用候选关键字,以避免混淆。一个关联的候好还是用候选关键字,以避免混淆。一个关联的候选关键字是角色的组合,并在一个关联内惟一标识选关键字是角色的组合,并在一个关联内惟一标识链接的资格符。因为角色和资格符是用属性来实现链接的资格符。因为角色和资格符是用属性来实现的,所以对类和关联都使用术语的,所以对类