第1章-面向对象方法概论教学课件

上传人:沈*** 文档编号:241640241 上传时间:2024-07-12 格式:PPT 页数:79 大小:1.10MB
返回 下载 相关 举报
第1章-面向对象方法概论教学课件_第1页
第1页 / 共79页
第1章-面向对象方法概论教学课件_第2页
第2页 / 共79页
第1章-面向对象方法概论教学课件_第3页
第3页 / 共79页
点击查看更多>>
资源描述
第1章面向对象方法概论幻灯片第一部分第一部分面向对象方法概论面向对象方法概论2软件课程体系与知识结构软件课程体系与知识结构(2/2)l4、数据库技术、数据库技术pA.数据库系统原理数据库系统原理pB.数据仓库、分布式数据库数据仓库、分布式数据库l5、软件工程、软件工程pA.软件工程软件工程pB.软件项目管理、软件质量管理、软件环境与工具软件项目管理、软件质量管理、软件环境与工具l6、软件方法学、软件方法学pA.面向对象方法学面向对象方法学、结构化方法、结构化方法pB.软件复用技术、软件体系结构软件复用技术、软件体系结构51.5 1.5 面向对象方法的发展史及现状简介面向对象方法的发展史及现状简介第一章第一章 面向对象方法概论面向对象方法概论1.1 1.1 传统开发方法中存在的问题传统开发方法中存在的问题1.2 1.2 面向对象的基本思想面向对象的基本思想1.3 1.3 面向对象的主要概念及基本原则面向对象的主要概念及基本原则1.4 1.4 面向对象方法的主要优点面向对象方法的主要优点6p 在二十世纪六十年代以前在二十世纪六十年代以前 p 软件系统都是较小且相对简单的软件系统都是较小且相对简单的p 所用的编程语言都是十分简单(所用的编程语言都是十分简单(Fortran,CobolFortran,Cobol等)等)p 时兴个人英雄主义,即崇尚程序员的个人技能时兴个人英雄主义,即崇尚程序员的个人技能 p 代码是面条式的,特别是代码中含有代码是面条式的,特别是代码中含有GOTOGOTO语句语句 随着软件复杂性的增长,随心所欲的方法就不再是可接受随着软件复杂性的增长,随心所欲的方法就不再是可接受的了,因为这样的代码是很难维护的。的了,因为这样的代码是很难维护的。高层次语言的引入有助于解决一些与复杂性有关的问题,高层次语言的引入有助于解决一些与复杂性有关的问题,但这些语言并不能充分解决问题。但这些语言并不能充分解决问题。那时,无开发方法而言那时,无开发方法而言 1.1 1.1 传统开发方法中存在的问题传统开发方法中存在的问题71 1、功能分解法、功能分解法(起于二十世纪七十年代)(起于二十世纪七十年代)(1/4)(1/4)功能分解法(功能分解法(function decompositionfunction decomposition)功能分解功能分解 功能功能+子功能子功能 +功能接口功能接口以系统需要提供的功能为中心来组织系统。以系统需要提供的功能为中心来组织系统。首首先先定定义义各各种种功功能能,然然后后把把功功能能分分解解为为子子功能,同时定义功能之间的接口。功能,同时定义功能之间的接口。对对较较大大的的子子功功能能进进一一步步分分解解,直直到到可可给给出出明确的定义。明确的定义。根根据据功功能能子子功功能能的的需需要要设设计计数数据据结结构构和和算法算法。功能 功能 功能 系统 子功能子功能子功能子功能分解分解分解分解分解分解工作过程:工作过程:一层层地进行功能分解一层层地进行功能分解8功能功能模块模块功能功能模块模块功能功能模块模块功能功能模块模块功能功能模块模块功能功能模块模块功能功能模块模块功能功能模块模块功能功能模块模块功能功能模块模块得到的系统模型:得到的系统模型:由模块及其接口构成由模块及其接口构成1 1、功能分解法、功能分解法(起于二十世纪七十年代)(起于二十世纪七十年代)(2/4)9优点:优点:p 当时的计算机应用还不是很普及,只是特定的用户按自当时的计算机应用还不是很普及,只是特定的用户按自己的需要,对软件系统做出了功能性的要求,有据可寻。己的需要,对软件系统做出了功能性的要求,有据可寻。p 在相当大的程度上,解决了以前存在的问题。特别是与在相当大的程度上,解决了以前存在的问题。特别是与模块化编程结合使用,效率更高。模块化编程结合使用,效率更高。p 删除删除GOTOGOTO语句,使得软件能得到有效的维护。语句,使得软件能得到有效的维护。p 与模块化编程相结合,使得软件能得到有效的维护与模块化编程相结合,使得软件能得到有效的维护 p 直接地反映用户的需求直接地反映用户的需求,所以工作很容易开始。所以工作很容易开始。1 1、功能分解法、功能分解法(起于二十世纪七十年代)(起于二十世纪七十年代)(3/4)10缺点:缺点:p 开头容易,结束难。开头容易,结束难。p 结构化分析和设计注重处理功能,对所处理的数据放于结构化分析和设计注重处理功能,对所处理的数据放于次要的位置。次要的位置。p 对需求变化的适应能力很差。对需求变化的适应能力很差。p 局部的错误和局部的修改很容易产生全局性的影响。局部的错误和局部的修改很容易产生全局性的影响。p 不能直接地映射不能直接地映射问题域问题域,很难检验分析结果的正确性。,很难检验分析结果的正确性。1 1、功能分解法、功能分解法(起于二十世纪七十年代)(起于二十世纪七十年代)(4/4)11 数据流法数据流法 数据流数据处理(加工)数据存储端点处数据流数据处理(加工)数据存储端点处理说明数据字典理说明数据字典 又称作结构化分析。又称作结构化分析。基本策略是跟踪数据流,即研究问题域中基本策略是跟踪数据流,即研究问题域中数据如何流动以及在各个环节上进行何种处理,从而发现数据流数据如何流动以及在各个环节上进行何种处理,从而发现数据流和加工。和加工。问题域被映射为数据流图(问题域被映射为数据流图(DFDDFD),并用处理说明和数据),并用处理说明和数据字典进行详细说明。字典进行详细说明。数据流数据流加工加工数据存储数据存储端点端点处理说明处理说明数据词典数据词典2 2、数据流法(结构化分析法)、数据流法(结构化分析法)(1/2)(1/2)12数据流数据流加工加工数据存储数据存储端点端点处理说明处理说明数据字典数据字典跟踪数据流,从而发现数据跟踪数据流,从而发现数据流和加工。流和加工。优点:优点:有严格的法则,逐步求精,较强调研究问题域。有严格的法则,逐步求精,较强调研究问题域。缺点:缺点:p 在概念上,不能直接地映射到问题域中的事物在概念上,不能直接地映射到问题域中的事物p 对需求变化的适应能力较弱。对需求变化的适应能力较弱。p 大系统数据流和加工的数量太多,引起分析文档的膨胀。大系统数据流和加工的数量太多,引起分析文档的膨胀。p 系统复杂时,难以检验分析的正确性。系统复杂时,难以检验分析的正确性。p 分析与设计的概念和表示法不一致,其转换规则也不严格。分析与设计的概念和表示法不一致,其转换规则也不严格。p 容易导致模块的低内聚和模块间的高耦合,从而使得系统缺容易导致模块的低内聚和模块间的高耦合,从而使得系统缺乏灵活性和可维护性。乏灵活性和可维护性。2 2、数据流法(结构化分析法)、数据流法(结构化分析法)(2/2)(2/2)13信息建模法(信息建模法(information modelinginformation modeling)信息建模信息建模 实体(对象)属性关系父类型子类型实体(对象)属性关系父类型子类型关联对象关联对象由实体由实体-联系法(联系法(E-RE-R方法)发展而来。方法)发展而来。与数据库设计有很深的渊源。与数据库设计有很深的渊源。p 核心概念是实体和联系:核心概念是实体和联系:p实体描述问题域的事物,含有属性;实体描述问题域的事物,含有属性;p联系描述事物之间在数据方面的关系,也可以带有属性联系描述事物之间在数据方面的关系,也可以带有属性3 3、信息建模方法、信息建模方法(1/2)(1/2)p 发展之后的方法也把实体称作对象,并使用了类型和发展之后的方法也把实体称作对象,并使用了类型和子类型的概念,作为实体(对象)的抽象描述。子类型的概念,作为实体(对象)的抽象描述。14实体(对象)实体(对象)属性属性联系联系父类型父类型/子类子类型型关联对象关联对象l 强调对信息实体建模,而不是对象建模。强调对信息实体建模,而不是对象建模。l 对象只有属性,而无操作。对象只有属性,而无操作。l 父类与子类之间也只有属性继承。父类与子类之间也只有属性继承。l 没采用消息通讯。没采用消息通讯。3 3、信息建模方法、信息建模方法(2/2)(2/2)15 它是基于现实的行为视图,状态是这类系统的构造它是基于现实的行为视图,状态是这类系统的构造块,并且所操作的数据是独立于状态的。块,并且所操作的数据是独立于状态的。p 基于系统状态的处理。基于系统状态的处理。p 这一方法没有说到数据管理。这一方法没有说到数据管理。4 4、有限状态机方法、有限状态机方法16计算机是执行一套规则的推理机(计算机是执行一套规则的推理机(ifthenifthen语句语句)。)。p 基于人工智能系统基于人工智能系统 p 基于规则的系统并没有帮助我们处理数据,也基于规则的系统并没有帮助我们处理数据,也不支持过程概念不支持过程概念 如如 prolog,listprolog,list语言语言 5 5、基于规则的系统、基于规则的系统17总结总结 上述方法都仅基于一个角度看待系统,对系统的上述方法都仅基于一个角度看待系统,对系统的其它视图建模方面的能力都很弱。但对其它视图建模方面的能力都很弱。但对OOOO产生都做产生都做出了一定的贡献出了一定的贡献.18 为了克服早期的方法的不足,这时人们已经开始考虑使用为了克服早期的方法的不足,这时人们已经开始考虑使用面向对象方法来开发系统。较为完善面向对象的分析和设计面向对象方法来开发系统。较为完善面向对象的分析和设计方法出现在八十年代中后期。方法出现在八十年代中后期。早期的方法只使用一种系统的视角作为构造块,而没有容早期的方法只使用一种系统的视角作为构造块,而没有容纳其他视角。纳其他视角。功能分解法集中于将功能作为系统的构造块功能分解法集中于将功能作为系统的构造块在数据分析方法中(实体联系模型)构造块是实体,但在数据分析方法中(实体联系模型)构造块是实体,但在该方法中用来满足系统需求的功能被完全忽略掉了。在该方法中用来满足系统需求的功能被完全忽略掉了。两种方法都没有处理对动态行为的捕获,声明性语义两种方法都没有处理对动态行为的捕获,声明性语义(规规 则则)以及例外处理机制都被完全忽略了。以及例外处理机制都被完全忽略了。1.2 1.2 面向对象的基本思想面向对象的基本思想(1/11)19 面向对象方法的解决问题的思路是面向对象方法的解决问题的思路是从现实世界中从现实世界中的客观对象(如人和事物)入手,尽量运用人类的自的客观对象(如人和事物)入手,尽量运用人类的自然思维方式来构造软件系统然思维方式来构造软件系统,这与传统的结构化方法这与传统的结构化方法从功能入手和信息工程化方法从信息入手是不一样的。从功能入手和信息工程化方法从信息入手是不一样的。在面向对象方法中,在面向对象方法中,把一切都看成是对象。把一切都看成是对象。1.2 1.2 面向对象的基本思想面向对象的基本思想(2/11)20例题:编写一个开发票程序,需要对发票的名细栏进行计算。例题:编写一个开发票程序,需要对发票的名细栏进行计算。编号名称规格单位数量单价金额合计非面向对象思路:非面向对象思路:定义数据结构定义数据结构定义函数定义函数面向对象思路:面向对象思路:对象对象一组属性一组属性操作:发票总计操作:发票总计 一一切切都都是是对对象象1.2 1.2 面向对象的基本思想面向对象的基本思想(3/11)21从程序设计方法的角度看,面向对象是一种新的程序设计范从程序设计方法的角度看,面向对象是一种新的程序设计范型型(paradigm),(paradigm),其基本思想是使用其基本思想是使用对象、类、继承、封装、对象、类、继承、封装、聚合、关联、消息、多态性等基本概念聚合、关联、消息、多态性等基本概念来进行程序设计来进行程序设计.自八十年代以来,面向对象方法已自八十年代以来,面向对象方法已深入到计算机软件领域的深入到计算机软件领域的几乎所有分支。它不仅是一些具体的软件开发技术与策略,几乎所有分支。它不仅是一些具体的软件开发技术与策略,而且是一整套关于如何看待软件系统与现实世界的关系,用而且是一整套关于如何看待软件系统与现实世界的关系,用什么观点来研究问题并进行问题求解,以及如何进行系统构什么观点来研究问题并进行问题求解,以及如何进行系统构造的软件造的软件方法学方法学。从这个意义上讲:从这个意义上讲:面向对象方法是一种运用对象、类、继承、封装、聚合、面向对象方法是一种运用对象、类、继承、封装、聚合、关联、消息、多态性等概念来构造系统的软件开发方法。关联、消息、多态性等概念来构造系统的软件开发方法。什什么么是是面面向向对对象象1.2 1.2 面向对象的基本思想面向对象的基本思想(4/11)22l(1 1)从现实世界中客观存在的事物出发来建立软件系统,从现实世界中客观存在的事物出发来建立软件系统,强调直接以问题域(现实世界)中的事物为中心强调直接以问题域(现实世界)中的事物为中心来思考问题、来思考问题、认识问题,并根据这些事物的本质特征,把它们抽象地表示认识问题,并根据这些事物的本质特征,把它们抽象地表示为系统中的对象,作为系统的基本构成单位。这可以使系统为系统中的对象,作为系统的基本构成单位。这可以使系统直接映射问题直接映射问题域,保持问题域中事物及其相互关系的本来面域,保持问题域中事物及其相互关系的本来面貌貌(对象对象)1.2 1.2 面向对象的基本思想面向对象的基本思想(5/11)23l(2 2)用对象的属性表示事物的性质;用对象的操用对象的属性表示事物的性质;用对象的操作表示事物的行为。(作表示事物的行为。(属性属性与与操作操作)l(3 3)对象的属性与操作结合为一体,成为一个独对象的属性与操作结合为一体,成为一个独立的、不可分的实体,对外屏蔽其内部细节。立的、不可分的实体,对外屏蔽其内部细节。(对象的对象的封装封装)1.2 1.2 面向对象的基本思想面向对象的基本思想(6/11)24l(4)(4)对事物进行分类。把具有对事物进行分类。把具有相同属性和相同操作的对象相同属性和相同操作的对象归为一类,类是这些对象的抽象描述,每个对象是它的类归为一类,类是这些对象的抽象描述,每个对象是它的类的一个实例的一个实例.(分类分类)l(5)(5)复杂的对象可以用简单的对象作为其构成部分复杂的对象可以用简单的对象作为其构成部分.(.(聚合聚合)l(6)(6)通过在不同程度上运用抽象的原则通过在不同程度上运用抽象的原则,可以得到较一般的可以得到较一般的类和较特殊的类。特殊类继承一般类的属性与操作,从而类和较特殊的类。特殊类继承一般类的属性与操作,从而简化系统的构造过程及其文档简化系统的构造过程及其文档.(继承继承)1.2 1.2 面向对象的基本思想面向对象的基本思想(7/11)25l(7)(7)类具有封闭性,把内部的属性和操作隐藏起来,类具有封闭性,把内部的属性和操作隐藏起来,只有公共的操作对外是可见的只有公共的操作对外是可见的.(类的封闭性类的封闭性)l(8)(8)对象之间通过消息进行通讯,以实现对象之对象之间通过消息进行通讯,以实现对象之间的动态联系间的动态联系.(消息消息)l(9)(9)通过关联表达类通过关联表达类(一组对象一组对象)之间的静态关系之间的静态关系.(关联)(关联)1.2 1.2 面向对象的基本思想面向对象的基本思想(8/11)26客观世界客观世界对象对象对象对象对象对象对象对象对象对象对象对象对象对象对象对象对象对象对象对象对象名对象名属性属性操作操作类类类类类类类类分类分类类类继承继承类类类类对象对象聚合聚合抽象抽象客观事物及其客观事物及其间的联系间的联系关联关联用况图用况图类图类图顺序图顺序图状态图状态图活动图活动图构件图构件图OO模型模型对象对象对象对象对象对象对象对象对象对象对象对象对象对象对象对象计算机内计算机内的对象的对象编程编程构成构成封装封装运行运行分析分析设计设计27充分运用人类日常的思维方法充分运用人类日常的思维方法 强调运用人类在日常的逻辑思维中经常采用的思想方强调运用人类在日常的逻辑思维中经常采用的思想方法与原则,法与原则,例如抽象、分类、继承、聚合、封装、关联例如抽象、分类、继承、聚合、封装、关联等等。这使得软件开发者能更有效地思考问题,并以其等等。这使得软件开发者能更有效地思考问题,并以其他人也能看得懂的方式把自己的认识表达出来。他人也能看得懂的方式把自己的认识表达出来。1.2 1.2 面向对象的基本思想面向对象的基本思想(10/11)28l用类和对象作为系统的基本构成单位。用类和对象作为系统的基本构成单位。对象对应问题域对象对应问题域中的事物,其属性与操作刻画了事物的性质和行为,它中的事物,其属性与操作刻画了事物的性质和行为,它们之间的继承关系、聚合关系、消息和关联如实地表达们之间的继承关系、聚合关系、消息和关联如实地表达了问题域中事物之间实际存在的各种关系。了问题域中事物之间实际存在的各种关系。l 因此,无论系统的构成成分,还是通过这些成分之间的因此,无论系统的构成成分,还是通过这些成分之间的关系而体现的系统结构,都关系而体现的系统结构,都可直接地映射问题域。可直接地映射问题域。1.2 1.2 面向对象的基本思想面向对象的基本思想(11/11)总结:总结:29p 面向对象中的主要概念:面向对象中的主要概念:对象、属性、操作、类、继承、聚合、关联、永对象、属性、操作、类、继承、聚合、关联、永久对象,对象还分为主动对象和消息,泛化分为有多久对象,对象还分为主动对象和消息,泛化分为有多态性和无多态性的。态性和无多态性的。p 面向对象中的基本原则:面向对象中的基本原则:信息隐蔽或封装、消息传递、后期连接、委托、信息隐蔽或封装、消息传递、后期连接、委托、类类/对象和关系等。对象和关系等。1.3 1.3 面向对象中的主要概念及基本原则面向对象中的主要概念及基本原则30对象标识对象标识就是对象的名字,有就是对象的名字,有“外部标识外部标识”和和“内部标识内部标识”之分之分。对象对象是现实世界中某是现实世界中某个实际存在的事物,个实际存在的事物,它可以是有形的(比它可以是有形的(比如一辆汽车),也可如一辆汽车),也可以是无形的(比如一以是无形的(比如一项计划)。对象是构项计划)。对象是构成世界的一个独立单成世界的一个独立单位。它具有自己的静位。它具有自己的静态特征和动态特征。态特征和动态特征。对象对象是系统中用是系统中用来描述客观事物来描述客观事物的一个实体,它的一个实体,它是构成系统的一是构成系统的一个基本单位。一个基本单位。一个对象由一组属个对象由一组属性和对这组属性性和对这组属性进行操作的一组进行操作的一组操作构成。操作构成。对象对象属性属性操作操作对象标识对象标识属性属性是用来描述对象性质的是用来描述对象性质的一个数据项。一个数据项。操作操作是用来描述对象行为的一个是用来描述对象行为的一个动作序列。动作序列。对象,属性,操作,对象,属性,操作,对象标识对象标识抽抽 象象1.3.11.3.1面向对象中的主要概念面向对象中的主要概念(1/9)(1/9)31类,一般类,特殊类,抽象类,一般类,特殊类,抽象(2/9)抽象与分类:抽象与分类:p抽象(化抽象(化)忽略事忽略事物的非本质特征,物的非本质特征,只注意那些与当前只注意那些与当前目标有关的本质特目标有关的本质特征,从而找出事物征,从而找出事物的共性。的共性。p把具有共同性质把具有共同性质的事物划分为一类,的事物划分为一类,得出一个抽象的概得出一个抽象的概念,叫做念,叫做分类分类。类类是具有相同属性和操作的一组对象的集合,它是具有相同属性和操作的一组对象的集合,它为属于该类的全部对象提供了统一的抽象描述,为属于该类的全部对象提供了统一的抽象描述,其内部包括属性和操作两个主要部分。类的作用其内部包括属性和操作两个主要部分。类的作用是用来创建对象,对象是类的一个实例。是用来创建对象,对象是类的一个实例。不同程度的抽象可得到不同层次的分类不同程度的抽象可得到不同层次的分类较多地忽较多地忽略事物之略事物之间的差别间的差别得到较一得到较一般的类般的类较多地注较多地注意事物之意事物之间的差别间的差别得到较特得到较特殊的类殊的类运输工具运输工具火车火车汽车汽车飞机飞机卡车卡车轿车轿车轮船轮船车辆车辆32继承:继承:特殊类拥有其一般类的全部属性与操作,称特殊类拥有其一般类的全部属性与操作,称作特殊类对一般类的继承。作特殊类对一般类的继承。继承意味着自动地拥有,或隐含地继承意味着自动地拥有,或隐含地复制复制子类从父类中继承属性和操作,根子类从父类中继承属性和操作,根据需要添加自己的属性和方法。据需要添加自己的属性和方法。继承简化了人继承简化了人们对事物的认们对事物的认识和描述,非识和描述,非常有益于软件常有益于软件复用,是复用,是OOOO技技术提高软件开术提高软件开发效率的重要发效率的重要原因之一。原因之一。公司人员公司人员姓名姓名身份证号码身份证号码股东股东股份股份 职员职员工资工资例:例:由继承机由继承机制保证制保证一般类与特殊类一般类与特殊类之间的关系叫泛之间的关系叫泛化关系(继承关化关系(继承关系)系),简称简称泛化泛化。继承关系的语义:继承关系的语义:“is a kind of”继承继承(3/9)33多继承:多继承:允许一个允许一个特殊类具有一个以特殊类具有一个以上一般类的继承模式称作多继承上一般类的继承模式称作多继承多继承特殊类多继承特殊类的内部情况的内部情况在职研究生在职研究生姓名姓名学号学号班级班级专业专业职称职称专业专业在职单位在职单位来自来自“人员人员”类类来自来自“研究生研究生”类类来自来自“教职工教职工”类类本类中显示定义本类中显示定义例例:人员人员姓名姓名教职工教职工职称职称专业专业研究生研究生学号学号班级班级专业专业在职研究生在职研究生在职单位在职单位 (4/9)34 对象通过它对外提供的操作在系统中发挥作用。对象通过它对外提供的操作在系统中发挥作用。当系统中当系统中的其他对象或其他系统成分(在不要求完全对象化的语言中,的其他对象或其他系统成分(在不要求完全对象化的语言中,允许有不属于任何对象的成分,例如允许有不属于任何对象的成分,例如C+C+程序中的程序中的mainmain函数),函数),请求这个对象执行某个操作时,该对象就响应这个请求,完成请求这个对象执行某个操作时,该对象就响应这个请求,完成该操作。该操作。在在OOOO方法中,把向对象发出的操作请求称为方法中,把向对象发出的操作请求称为消息消息.目前在大部分面向对象的编程语言中,消息其实就是函数(或过程)目前在大部分面向对象的编程语言中,消息其实就是函数(或过程)调用。调用。但是,函数调用只是实现消息的方式之一,上述理解只适合于顺序但是,函数调用只是实现消息的方式之一,上述理解只适合于顺序系统。系统。例子:顾客买报纸例子:顾客买报纸 消息消息(5/9)35聚合:聚合:一个(较复杂的)对象由其他若干(较简单的)对象作为其构成一个(较复杂的)对象由其他若干(较简单的)对象作为其构成部分,称较复杂的对象为部分,称较复杂的对象为聚集聚集,称较简单的对象为,称较简单的对象为成分成分,称这种,称这种关系为关系为聚合聚合。这种关系的语义是这种关系的语义是“has a”“has a”或或“is a part of”“is a part of”聚合刻画了现实事物之间的构成关系聚合刻画了现实事物之间的构成关系两种方式:(前一种方式又称组合)两种方式:(前一种方式又称组合)部部分分对对象象部部分分对对象象整体对象整体对象嵌套对象嵌套对象整整体体对对象象部部分分对对象象部部分分对对象象整整体体对对象象对象指针或对象标识对象指针或对象标识描述紧密、描述紧密、固定的关固定的关系,例如系,例如汽车与发汽车与发动机动机描述松散、描述松散、灵活的关灵活的关系,例如系,例如公司与法公司与法律顾问律顾问(6/9)36例:例:汽汽 车车发动机发动机1 14.64.60.10.10.10.1车车 轮轮公公 司司0.*0.*法律顾问法律顾问组合关系组合关系聚合关系聚合关系聚合聚合(7/9)37关联:关联:类之间的静态联系称作类之间的静态联系称作关联。关联。在实例化后,由类产生对象,由关联产生连接对象的链。在实例化后,由类产生对象,由关联产生连接对象的链。链链是关联的实例。是关联的实例。关联的表示符号也称作关联的表示符号也称作实例连接实例连接城市城市0.*0.*有航线有航线 城市之间有航线城市之间有航线教教 师师学学 生生0.*0.*1 1指导论文指导论文 教师为学生指导论文教师为学生指导论文例:例:(8/9)38其他:其他:永久对象:永久对象:可以在程序运行后继续保存的对象可以在程序运行后继续保存的对象时间时间 空间空间意义意义实现途径:语言,实现途径:语言,OO-DBMS主动对象:主动对象:表示进程或线程的对象。表示进程或线程的对象。描述具有主动行为的事物描述具有主动行为的事物描述并发执行的任务描述并发执行的任务(9/9)39(1 1)抽象)抽象从事物中舍弃个别的非本质的特征,而抽取共同的、本质特征从事物中舍弃个别的非本质的特征,而抽取共同的、本质特征的做法叫抽象。的做法叫抽象。例如,一个现实事物,可能担任很多角色,只有与例如,一个现实事物,可能担任很多角色,只有与问题域有关的角色,才予以考虑。问题域有关的角色,才予以考虑。在不同的高度看待或解决问题。在不同的高度看待或解决问题。OO OO中的中的应用:应用:n过程抽象:任何一个完成确定功能的操作序列,其使用者都可把过程抽象:任何一个完成确定功能的操作序列,其使用者都可把它看作一个单一的实体,尽管实际上它可能是由一系列更低级的它看作一个单一的实体,尽管实际上它可能是由一系列更低级的操作完成的。操作完成的。n数据抽象数据抽象:根据施加于数据之上的操作来定义数据类型,并限定根据施加于数据之上的操作来定义数据类型,并限定数据的值只能由这些操作来修改和观察。数据的值只能由这些操作来修改和观察。n客观事物客观事物 对象对象 类类 一般类一般类n不同开发阶段需要进行不同程度的抽象不同开发阶段需要进行不同程度的抽象 n便于实现模块的可替换性便于实现模块的可替换性 1.3.21.3.2面向对象中的基本原则面向对象中的基本原则(1/14)(1/14)40(2 2)封装:)封装:把对象的属性和操作结合成一把对象的属性和操作结合成一个独立的系统单位,并尽可能隐蔽对象的内部个独立的系统单位,并尽可能隐蔽对象的内部细节。只是向外部提供接口,降低了对象间的细节。只是向外部提供接口,降低了对象间的耦合度。耦合度。售报亭售报亭属属性性服服务务报刊报刊A A报刊报刊B B钱箱钱箱报刊零售报刊零售款货清点款货清点顾顾客客由封装机制保证:由封装机制保证:数据不能被对象数据不能被对象的使用者直接访的使用者直接访问。只允许通过问。只允许通过由对象提供的方由对象提供的方法或代码访问数法或代码访问数据。据。1.3.21.3.2面向对象中的基本原则面向对象中的基本原则 (2/14)41封装的重要意义:封装的重要意义:使对象能够集中而完整地描述使对象能够集中而完整地描述并对应一个具体事物。并对应一个具体事物。体现了事物的相对独立性,使体现了事物的相对独立性,使对象外部不能随意存取对象的对象外部不能随意存取对象的内部数据,避免了外部错误对内部数据,避免了外部错误对它的它的“交插感染交插感染”。对象的内部的修改对外部的影对象的内部的修改对外部的影响很小,减少了修改引起的响很小,减少了修改引起的“波动效应波动效应”。公开静态的、不变的操作,而公开静态的、不变的操作,而把动态的、易变的操作隐藏起把动态的、易变的操作隐藏起来。来。封装带来的问题:封装带来的问题:编程的麻烦编程的麻烦执行效率的损失执行效率的损失 解决办法:解决办法:不强调严格封装,不强调严格封装,实行可见性控制。实行可见性控制。(混合型(混合型OOPLOOPL)例如:例如:C+C+1.3.21.3.2面向对象中的基本原则面向对象中的基本原则 (3/14)42信息隐蔽信息隐蔽l对象的操作定义了其他的对象怎样获得对其的访问。每一对象的操作定义了其他的对象怎样获得对其的访问。每一个对象都将提供给所有对象的公共操作个对象都将提供给所有对象的公共操作公开化公开化。它也提。它也提供仅局限于特定对象的其它的操作供仅局限于特定对象的其它的操作(受保护的和私有的)。(受保护的和私有的)。l其他的对象对被请求的对象怎样提供操作(代码其他的对象对被请求的对象怎样提供操作(代码,内部数内部数据)没有感知。据)没有感知。操作操作 操作操作操作操作 操作操作 属性集属性集(4/14)43(3 3)委托)委托 l借助消息传递,工作可从一个对象(客户)传递到另借助消息传递,工作可从一个对象(客户)传递到另一个对象(代理),因为从客户的观点,代理具有客一个对象(代理),因为从客户的观点,代理具有客户所需要的操作。工作连续地传递,直到到达了既有户所需要的操作。工作连续地传递,直到到达了既有数据又有方法(代码)能完成这项工作的对象。数据又有方法(代码)能完成这项工作的对象。例如:建造一所办公楼例如:建造一所办公楼 董事会董事会-总经理总经理-建筑公司建筑公司注意:委托是执行任务的权利,而不是责任注意:委托是执行任务的权利,而不是责任。(5/14)44(4 4)分类)分类l把具有共同性质的事物划分为一类把具有共同性质的事物划分为一类,得出一个抽象的概念。得出一个抽象的概念。l分分类类帮帮助助我我们们组组织织我我们们所所生生活活的的复复杂杂世世界界。我我们们可可以以对对在在一一个个特特殊殊分分类类中中的的对对象象做做一一些些假假设设。如如果果一一个个对对象象是是分分类类(类)的一个实例,它将符合该分类的总体模式。(类)的一个实例,它将符合该分类的总体模式。分类:对象分类:对象 类类 一般类一般类 类类/对象对象l所所有有的的对对象象都都是是类类的的实实例例。实实例例能能够够在在运运行行时时被被产产生生(初初始化)或销毁(删除)。始化)或销毁(删除)。l对象怎样提供操作对象怎样提供操作,由该对象为其实例的类所决定。由该对象为其实例的类所决定。这样这样,同一个类的所有对象在响应特定的操作请求(功能调用)同一个类的所有对象在响应特定的操作请求(功能调用)时使用相同的方法。时使用相同的方法。(6/14)45(5 5)泛化)泛化 (继承)(继承)l无无多多态态性性的的泛泛化化.类类可可以以由由层层次次继继承承结结构构所所组组织织。在在该该结结构构中中,子子类类将将从从位位于于层层次次结结构构高高层层的的父父类类中中继继承承属属性性、操作和关系。操作和关系。抽抽象象的的父父类类是是指指仅仅用用来来定定义义子子类类的的超超类类。这这样样,抽抽象象类类就没有直接的实例。就没有直接的实例。l有有多多态态的的泛泛化化.可可以以使使用用层层次次继继承承结结构构组组织织类类,子子类类可可以以继继承承位位于于层层次次结结构构的的高高层层的的父父类类的的属属性性、操操作作和和关关系系。然然而而,子子类类可可以以定定义义它它自自己己的的操操作作来来代代替替其其任任何何超超类类的的同名操作。同名操作。(7/14)46 多多态态是是指指同同一一个个命命名名可可具具有有不不同同的的语语义义。OOOO方方法法中中,常常指指在在一一般般类类中中定定义义的的属属性性或或操操作作被被特特殊殊类类继继承承之之后后,可可以具有不同的数据类型或表现出不同的行为。以具有不同的数据类型或表现出不同的行为。用途:用途:把具有共同基类的对象组成一组,并对它们进把具有共同基类的对象组成一组,并对它们进行一致的处理。行一致的处理。例如,多边形下的三角形、长方形、正多边形。例如,多边形下的三角形、长方形、正多边形。多态多态(8/14)47多态:多态:多边形多边形边数边数顶点数据顶点数据绘图绘图XY轴向矩形轴向矩形x x边数边数*顶点数据顶点数据*绘图绘图正多边形正多边形*顶点数据顶点数据*绘图绘图例:例:(9/14)48(6 6)消息通信)消息通信 即要求对象之间只能通过消息进行通讯。即要求对象之间只能通过消息进行通讯。消息传递机制与函数调用机制的区别消息传递机制与函数调用机制的区别 n第一,在消息传递机制中,每一个消息被发送给指定的接收者(对第一,在消息传递机制中,每一个消息被发送给指定的接收者(对象)。象)。在命令式编程范型中,函数调用机制没有指定的接收者。在命令式编程范型中,函数调用机制没有指定的接收者。n第二,消息的解释(用来完成操作请求的方法或操作第二,消息的解释(用来完成操作请求的方法或操作/代码集)依代码集)依赖接收者,并且因接收者的不同而异。赖接收者,并且因接收者的不同而异。n第三,在面向对象的范型中,通常在运行时才能知道给定消息的特第三,在面向对象的范型中,通常在运行时才能知道给定消息的特定的接收者定的接收者。(10/14)49(7 7)行为分析)行为分析 行为分析是我们用来考察一个对象(类)是怎行为分析是我们用来考察一个对象(类)是怎样提供它的操作的过程。样提供它的操作的过程。从分析的视点,有两种类型的行为:从分析的视点,有两种类型的行为:静态的静态的动态的动态的(11/14)50静态行为静态行为 在在静态行为静态行为中,实现操作的代码不被任何外部或内中,实现操作的代码不被任何外部或内部的事件(动作)所影响。部的事件(动作)所影响。示例:一个类中有一个示例:一个类中有一个“求平方根求平方根”的操作。如果对数码的操作。如果对数码4 4执行执行“求平方根求平方根”操作,其结果总会是操作,其结果总会是2 2。没有外部的或内部的动作能够引。没有外部的或内部的动作能够引起该类的代码改变计算平方根的结果。起该类的代码改变计算平方根的结果。实际上,只要我们使用命令式编程(如用实际上,只要我们使用命令式编程(如用C C编程)是编程)是容易做到这一点的。容易做到这一点的。(12/14)51动态行为动态行为 l在行为中发生这些变化的原因可能是由于对象存在很多不同的状态。在行为中发生这些变化的原因可能是由于对象存在很多不同的状态。随后,对象根据它的状态做出反映。随后,对象根据它的状态做出反映。使用命令式编程技术不能很好地使用命令式编程技术不能很好地处理这种类型的行为。使用另外的一种称为有限状态机的机制会更好处理这种类型的行为。使用另外的一种称为有限状态机的机制会更好地捕获这样的方法。地捕获这样的方法。例子:例子:航班订票系统中的订票过程航班订票系统中的订票过程对象对象“机票机票”的状态:的状态:预定、等待、确认、取消、使用、归档预定、等待、确认、取消、使用、归档 l系统中的对象是相互协作的,通过发消息共同完成某项功能。系统中的对象是相互协作的,通过发消息共同完成某项功能。这这种协作的交互性,可以用交互图来进行描述。种协作的交互性,可以用交互图来进行描述。l有很多系统具有并发行为。有很多系统具有并发行为。从事物的并发行为的起因上看,每个从事物的并发行为的起因上看,每个并发行为都是主动发生的。并发行为都是主动发生的。(13/14)52(8 8)复杂性控制)复杂性控制(14/14)(14/14)l引入包引入包(package)(package)的概念,使模型具有大小的概念,使模型具有大小不同的粒度层次,以利于控制复杂性。不同的粒度层次,以利于控制复杂性。如如 把分析和设计阶段的模型分别用包进行组织。把分析和设计阶段的模型分别用包进行组织。53p 从认识论角度和软件工程方法的角度看一下从认识论角度和软件工程方法的角度看一下 面向对象方法带来的好处;面向对象方法带来的好处;p 具体地描述面向对象方法的特点。具体地描述面向对象方法的特点。1 14 4 面向对象方法的特点面向对象方法的特点(1/11)54对问题域的认识(人)对问题域的认识(人)客观世界客观世界(问题域)(问题域)计算机计算机自然语言自然语言语语言言的的鸿鸿沟沟编程语言编程语言语言的过渡(人)语言的过渡(人)编程(人)编程(人)程序的理解程序的理解和执行(机器)和执行(机器)软件开发:从问题域出发,对事物进行认识和描述软件开发:从问题域出发,对事物进行认识和描述问题问题语言的鸿沟语言的鸿沟1 1、从认识论的角度可以看出,面向对象方法改变了人、从认识论的角度可以看出,面向对象方法改变了人们认识世界的方式们认识世界的方式 (2/11)55计算机计算机机器语言机器语言自然语言自然语言客观世界客观世界(问题域)(问题域)语言的鸿沟语言的鸿沟2 2、语言的发展、语言的发展鸿沟变窄鸿沟变窄面向对象的语言面向对象的语言非非OOOO的高级语言的高级语言汇编语言汇编语言程序的指令、数程序的指令、数据、地址,都是据、地址,都是由二进制的由二进制的“0”“0”和和“1”“1”构成的。构成的。离机器最近,能离机器最近,能够直接地执行,够直接地执行,然而没有丝毫形然而没有丝毫形象的意义,离人象的意义,离人类的思维最远。类的思维最远。以易理解的符号表示以易理解的符号表示指令、数据以及寄存指令、数据以及寄存器、地址等物理概念。器、地址等物理概念。稍稍适合人类的形象稍稍适合人类的形象思维,但仍然相差很思维,但仍然相差很远。因为抽象层次太远。因为抽象层次太低,仍需考虑大量的低,仍需考虑大量的机器细节。机器细节。高级语言隐蔽了机器高级语言隐蔽了机器细节,使用有形象意细节,使用有形象意义的数据命名和表达义的数据命名和表达式,可以联系到程序式,可以联系到程序所描述的具体事物。所描述的具体事物。特别是结构化编程语特别是结构化编程语言更便于体现客观事言更便于体现客观事物的结构和逻辑涵义,物的结构和逻辑涵义,与人类的自然语言更与人类的自然语言更接近,但仍有不少差接近,但仍有不少差距。距。能比较直接地反映客能比较直接地反映客观世界的本来面目,观世界的本来面目,并使软件开发人员能并使软件开发人员能够运用人类认识事物够运用人类认识事物所采用的一般思维方所采用的一般思维方法来进行软件开发。法来进行软件开发。(3/11)56问题域问题域测试测试编程编程计算机计算机编程语言编程语言自然语言自然语言需求需求分析分析总体总体设计设计详细详细设计设计3、面向对象方法使得从问题域到计算机间的鸿面向对象方法使得从问题域到计算机间的鸿沟变窄沟变窄 (4/11)分析与设计的鸿沟分析与设计的鸿沟分析与设计分析与设计概念及表示概念及表示法的不一致法的不一致软件工程学的作用软件工程学的作用结构化的软件工程方法结构化的软件工程方法57问题域问题域OOA计算机计算机自然语言自然语言面向对象的面向对象的编程语言编程语言OODOOPOOT软件工程学的作用软件工程学的作用面向对象的软件工程方法面向对象的软件工程方法(5/11)58面向对象程序设计面向对象程序设计把数据和处理数据的过把数据和处理数据的过程作为一个整体,即对程作为一个整体,即对象。象。算法算法+数据结构数据结构算法算法+数据结构数据结构算法算法+数据结构数据结构算法算法+数据结构数据结构算法算法+数据结构数据结构关系关系程序程序=对象对象=(算法)(算法)+(数据结构)(数据结构)4 4、面向对象方法有助于软件的维护与复用、面向对象方法有助于软件的维护与复用 (6/11)59结构化程序设计结构化程序设计程序程序=数据结构数据结构数据结构数据结构数据结构数据结构算法算法算法算法算法算法关系关系(7/11)60 结结构构化化方方法法:从从算算法法的的角角度度进进行行建建模模,所所有有的的软软件件都都用用过过程程或或函函数数作作为为其其主主要要构构造造块块。人人们们把把大大量量精精力力都都集集中中在在控制流程和大算法的分解上。控制流程和大算法的分解上。这种建模的缺点是模型脆弱。需求变动、维护困难。这种建模的缺点是模型脆弱。需求变动、维护困难。面面向向对对象象方方法法:以以众众多多的的类类及及交交互互模模式式(类类间间的的协协同同工工作)为中心。作)为中心。着着重重于于数数据据的的信信息息建建模模方方法法:以以实实体体-关关系系模模型型为为中中心心,该模型的行为放入触发器和存储过程中。该模型的行为放入触发器和存储过程中。几种开发方法的特点几种开发方法的特点(8/11)对于一个给定的应用系统和开发方法,上述的任何一种对于一个给定的应用系统和开发方法,上述的任何一种方法可能都是正确的。只是代价和受益是不同的。方法可能都是正确的。只是代价和受益是不同的。61(1 1)把易变的数据结构和部分功能封装在对象内并加以隐)把易变的数据结构和部分功能封装在对象内并加以隐藏,藏,一是保证了对象行为的可靠性;一是保证了对象行为的可靠性;二是对它们的修改并不会影响其他的对象,有利于维二是对它们的修改并不会影响其他的对象,有利于维护,对需求变化有较强的适应性。护,对需求变化有较强的适应性。(2 2)封装性和继承性有利于复用对象。)封装性和继承性有利于复用对象。把把对象的属性和操作捆象的属性和操作捆绑在一起,提高了在一起,提高了对象(作象(作为模模块)的内聚性,减少了与其他)的内聚性,减少了与其他对象的耦合,象的耦合,这为复用复用对象象提供了可能性和方便性。在提供了可能性和方便性。在继承承结构中,特殊构中,特殊类对一般一般类的的继承,本身就是承,本身就是对一般一般类的属性和操作的复用。的属性和操作的复用。与传统方法相比,面向对象方法的主要优点:与传统方法相比,面向对象方法的主要优点:(9/11)62这主要体现在如下几方面这主要体现在如下几方面:n 设计的投入在编程、测试时会得到回报设计的投入在编程、测试时会得到回报n OOOO方法使系统更易于理解方法使系统更易于理解n 分析文档、设计文档、源代码对应良好分析文档、设计文档、源代码对应良好n 功能变化引起的全局性修改较少功能变化引起的全局性修改较少n 有利于有利于OOAOOA结果的复用结果的复用5 5、面向对象方法有助于提高软件的质量和生产率、面向对象方法有助于提高软件的质量和生产率(10/11)63面向机器面向机器面向代数面向代数面向过程面向过程面向数据面向数据面向人面向人面向文件面向文件面向信息面向信息面面向应用向应用面向功能面向功能面向数据流面向数据流 面向对象是软件方法学的返朴归真面向对象是软件方法学的返朴归真软件科学的发展历程中软件科学的发展历程中出现过许多出现过许多“面向面向”软件开发从过分专业化的方法、规则和技软件开发从过分专业化的方法、规则和技巧中回到了客观世界,回到了人们的日常巧中回到了客观世界,回到了人们的日常思维,是软件理论的返朴归真。思维,是软件理论的返朴归真。面向对象面向对象(11/11)641 1、雏形阶段雏形阶段q6060年年代代挪挪威威计计算算中中心心开开发发的的Simula67Simula67面面向向对对象象语语言言的的先先驱驱和和第第一一个里程碑个里程碑(首先引入了类的概念和继承机制首先引入了类的概念和继承机制)。q7070年年代代CLUCLU、并并发发PascalPascal、AdaAda和和Modula-2Modula-2等等语语言言对对抽抽象象数数据据类类型型理理论的发展起到重要作用论的发展起到重要作用(支持数据与操作封装支持数据与操作封装)q犹犹他他大大学学博博士士生生Alan Alan KayKay设设计计了了一一个个实实验验性性语语言言FlexFlex。从从SimulaSimula 6767中借鉴了许多概念,如类、对象、继承等。中借鉴了许多概念,如类、对象、继承等。q19721972年年Palo Palo AlnoAlno研研究究中中心心(PARC)(PARC)发发布布了了Smalltalk-72Smalltalk-72,其其中中正正式式使使用了用了“面向对象面向对象”这个术语。这个术语。qSmalltalkSmalltalk的的问世世标志着面向志着面向对象程序象程序设计方法的正式形成方法的正式形成。但是。但是这个个时期的期的SmalltalkSmalltalk语言言还不不够完善完善.1 15 5面向对象方法的发展史及现状简介面向对象方法的发展史及现状简介(1/4)65 PARC PARC先后发布了先后发布了Smalltalk-72Smalltalk-72,7676,7878等版本,直至等版本,直至19811981年推出年推出该语言最完善的版本该语言最完善的版本Smalltalk-80Smalltalk-80。q Smalltalk-80Smalltalk-80的的问问世世被被今今认认为为是是面面向向对对象象语语言言发发展展史史上上最最重重要要的的里里程程碑碑。迄迄今今绝绝大大部部分分面面向向对对象象的的基基本本概概念念及及其其支支持持机机制制在在Smalltalk-Smalltalk-8080中都已具备。中都已具备。它是第一个完善的、能够实际应用的面向对象语言。它是第一个完善的、能够实际应用的面向对象语言。但是,但是,SmalltalkSmalltalk的应用尚不够广泛,原因是:的应用尚不够广泛,原因是:2 2、完善阶段、完善阶段(2/4)一种新的软件方法学被广泛接受需要一定的时间。一种新的软件方法学被广泛接受需要一定的时间。商品化软件开发工作到商品化软件开发工作到8787年才开始进行。年才开始进行。追求纯追求纯OOOO的宗旨使许多软件开发人员感到不便。的宗旨使许多软件开发人员感到不便。66 自自8080年代中期到年代中期到9090年代,是面向对象语言走向繁荣的阶年代,是面向对象语言走向繁荣的阶段。段。其主要表现是大批比较实用的其主要表现是大批比较实用的OOPLOOPL的涌现,例如的涌现,例如 C+C+、Objective-CObjective-C、Object PascalObject Pascal、CLOSCLOS(Common Lisp Object Common Lisp Object SystemSystem)、)、EiffelEiffel、ActorActor等。等。q OOOO编程语言分为纯编程语言分为纯OOOO语言和混合型语言和混合型OOOO语言。语言。p 混混合合型型语语言言是是在在传传统统的的过过程程式式语语言言基基础础上上增增加加OOOO语语言言成分,在实用性方面具有更大的优势。如成分,在实用性方面具有更大的优势。如C+C+。p 此此时的的纯OOOO语言也比言也比较重重视实用性。用性。如如EiffelEiffel、Smalltalk Smalltalk、ActorActor。3 3、繁荣阶段、繁荣阶段(3/4)67 在编程方面,普遍采用语言、类库和可视化编程环境相结合的方式,在编程方面,普遍采用语言、类库和可视化编程环境相结合的方式,例如,例如,Visual C+Visual C+,Visual BasicVisual Basic和和DelphiDelphi,JavaJava等。等。q 到到九九十十年年代代,面面向向对对象象的的分分析析与与设设计计方方法法已已多多达达数数十十种种,这这些些方方法法都都各有所长,现在趋于统一。各有所长,现在趋于统一。统统一一建建模模语语言言UMLUML(Unified Unified Modeling Modeling languagelanguage),其其推推荐荐的的方方法法是是USDPUSDP(Unified Unified Software Software Development Development ProcessProcess);UMLUML是是一一种种面面向向对对象象的建模语言,在软件产业界获得了很大的支持。的建模语言,在软件产业界获得了很大的支持。OPENOPEN(OO OO Process,Process,Environment Environment and and NotationNotation),OPENOPEN中中含含有有建建模模过过程程和和建建模模语语言言OMLOML(OPEN OPEN Modeling Modeling languagelanguage)。OPENOPEN在在学学术术界界影影响响面面很大,产业界
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!