ch4java语言中面向对象特性

上传人:繁星 文档编号:88247964 上传时间:2019-04-22 格式:PPT 页数:66 大小:394.50KB
返回 下载 相关 举报
ch4java语言中面向对象特性_第1页
第1页 / 共66页
ch4java语言中面向对象特性_第2页
第2页 / 共66页
ch4java语言中面向对象特性_第3页
第3页 / 共66页
ch4java语言中面向对象特性_第4页
第4页 / 共66页
ch4java语言中面向对象特性_第5页
第5页 / 共66页
点击查看更多>>
资源描述

《ch4java语言中面向对象特性》由会员分享,可在线阅读,更多相关《ch4java语言中面向对象特性(66页珍藏版)》请在金锄头文库上搜索。

1、Java 语言中面向对象特性,一切皆对象 think in java,面向对象编程的基本概念和特征,什么是oop? 为什么要oop? Oop的一些基本概念 Oop的一些准则,1 例子: 栈是一种由若干个按线性次序排列的元素所构成的复合数据,对栈只能实施两种操作:进栈(增加一个元素)和退栈(删除一个元素),并且这两个操作必须在栈的同一端(栈顶)进行。后进先出(LIFO)是栈的一个重要性质。,1) 非面向对象方案 struct Stack int top; int bufferSTACK_SIZE; ; void init(Stack ,bool push(Stack ,else s.top+;

2、s.buffers.top = i; return true; ,bool pop(Stack ,else i = s.buffers.top; s.top-; return true; , Stack st; int x; init(st); push(st,12); pop(st,x);,或, st.top = -1; st.top+; st.bufferst.top = 12; x = st.bufferst.top; st.top-;,2) 面向对象方案 class Stack int top; int bufferSTACK_SIZE; public: Stack() top = -

3、1; ,bool push(int i); if (top = STACK_SIZE-1) cout “Stack is overflow.n”; return false; ,else top+; buffertop = i; return true; ,bool pop(int ,else i = buffertop; top-; return true; ;,Stack st; int x; st.push(12); st.pop(x); st.top = -1; /error st.top+; /error st.bufferst.top = 12; /error,3)两种方案的简单比

4、较 方案1)中对栈的操作可以通过提供的函数来实现,也可以直接在栈的数据表示上直接进行;方案2)中只能通过提供的函数来操作栈。 直接操作数据的弊病在于: 不安全,易产生错误,并且定位错误较为困难。 一旦数据表示发生变化,将影响所有的操作。 方案1)需要显式地对栈进行初始化,方案2)则否。,2 定义 面向对象程序设计是把程序构造成由若干对象组成,每个对象由一些数据和对这些数据所实施的操作构成;对数据的操作是通过向包含数据的对象发送消息来实现(调用对象的操作);对象的特性(数据与操作)由(对象)类来描述,一个类的特性可以从其它的类继承。,上述的定义包含了下面的基本概念: 对象:对象式计算的基本单位,

5、由:接口,数据,操作构成。 通信:引起对象式计算的唯一方式。 类:对象特性的描述。 继承:复用机制。,到底什么是面向对象程序设计?,面向对象程序设计是软件系统设计与实现的新方法,这种新方法是通过增加软件可扩充性和可重用性,来改善并提高程序员的生产能力,并控制维护软件的复杂性和软件维护的开销。 首先讨论一下结构化程序设计。,1什么是结构化程序设计(Structure Programming) 结构化程序设计是上个世纪60年代诞生的,在70年代到80年代已遍及全球,成为所有软件开发设计领域及每个程序员都采用的程序设计方法,它的产生和发展形成了现代软件工程的基础。,结构化程序设计的设计思路是:自顶向

6、下、逐步求精;其程序结构是按功能划分若干个基本模块,这些模块形成一个树状结构;各模块之间的关系尽可能简单,在功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构组成;其模块化实现的具体方法是使用子程序。,结构化程序设计方法虽然具有很多的优点,但它仍是一种面向数据过程的设计方法, 它把数据和过程分离为相互独立的实体,程序员在编程时必须时刻考虑所要处理的数据的格式。对于不同的数据格式即使要做同样的处理或对相同的数据格式要做不同的处理都需编写不同的程序。因此结构化程序的可重用性不好。,另一方面,当数据和过程相互独立时,总存在着用错误的数据调用正确的程序模块或用正确的数据调用了错误的程序模块

7、的可能性。因此,要使数据与程序始终保持相容,已经成为程序员的一个沉重负担。上述这些问题,结构化程序设计方法本身是解决不了的,它需要借助于我们下面要讨论的面向对象程序设计方法给予解决。,2什么是面向对象程序设计 面向对象程序设计既吸取了结构化程序设计的一切优点,又考虑了现实世界与面向对象解空间的映射关系,它所追求的目标是将现实世界的问题求解尽可能简单化。 面向对象程序设计将数据及对数据的操作放在一起,作为一个相互依存、不可分割的整体来处理,它采用数据抽象和信息隐藏技术。,它将对象及对对象的操作抽象成一种新的数据类型类,并且考虑不同对象之间的联系和对象类的重用性。 例如我们可以将各种各样的自行车抽

8、象成一个自行车类,它所包含的数据内容有架子尺寸、车轮尺寸、颜色和原材料等,它所具有的操作有转弯、移动和修理等。每一辆具体的自行车就是属于自行车类的一个对象,如图12所示。,3.面向对象的由来和发展 面向对象方法起源于面向对象语言,编程语言得到应用和发展的同时,面向对象的方法得到了发展,发展成熟的面向对象方法反过来有推动了面向对象的编程,为其提供了新鲜的设计和指导。和任何事物一样,面向对象语言也经历了它的发生、发展阶段,走向成熟。,1.在60年代初期,Algo语言中引入程序块结构的思想,就象我们现在所说的函数一样,用函数把一些相关的语句封装起来,形成一个块的结构,这就是封装思想的诞生; 2. 在

9、60年代后期,Simula引入对象和消息机制,对象和对象之间可以通过发送消息来进行相互通信,这就是导致了数据封装与通信思想的产生。,3.到了70年代,都许多语言如CLU、Ads、Modula-2等都开始支持数据与封装,这导致了抽象数据类型概念的发展。 4.1980年,出现Smalltalk-80商品化的面向对象语言,它是纯粹的面向对象编程语言。 这种语言有3个特点: (1)它把任何事物都看成是对象,包括类本身也是更抽象的元类的一个实例,也看成是一种对象;,2)这种语言不进行类型检查,它强调的 是多态性和动态连接; 3) Smalltalk不仅是一种语言,它还是一种类库支持和交互式图形界面的一个

10、完整的程序设计环境,因为它是一种商品化的东西,所以不仅仅只是语言本身,还包括类库支持和相配套的完整的程序设计环境,,5.80年代中期到90年代,出现了大批面向对象语言,面向对象语言趋于成熟,从此面向对象方法走向实用。许多人开始研究面向对象的分析方法,面向对象的设计方法,面向对象测试方法、面向对象数据库等等。还有人把面向对象思想运用到其它领域中,使它不仅仅局限于软件系统的开发,在其它领域中,如人工智能也能发挥作用。,6.现在,面向对象的思想已经深入人心,在很多领域被广泛地接受,而且已经得到了很多的应用。 以上讲的是面向对象整个的发展过程。 其中1986年召开首届“面向对象编程、系统、语言和应用国

11、际会议“。到此时,面向对象的一些思想、概念和方法以及基本应用都逐渐趋于成熟,而且越来越受到重视。,程序设计语言是人类自己设计出来的一种复杂工具。这一工具至少涉及到三类有关人员:程序设计语言的开发者(即设计这种语言的人),必须准确地表达这种工具,使其他人能够理解它;程序设计语言的实现者(即开发编译程序或解释程序的人),必须正确理解用这种语言编写的程序,并用合适的方法转换为高效的机器代码,机器才能执行;程序设计语言的使用者(即用这种语言编写程序的人),必须完全正确理解正在使用的工具,使得编写的程序和想象中的一样。,你想做哪一种人呢?,为什么要oop?,一个好的软件开发方法或技术的评价标准:开发效率

12、和软件质量保证。 开发效率指方法使用的难易程度和方法缩短开发周期的程度等。,软件质量包括:外部质量和内部质量。 外部质量:软件中与用户有关的质量因素,这里的用户包括最终用户和二次开发用户。包括:正确性(Correctness)、效率(Efficiency)、健壮性或鲁棒性(Robustness)、可靠性(Reliability)、可用性(Usability)和可复用性(Reusability)等方面。,内部质量:软件中与软件开发人员有关的质量因素。包括:可读性(Readability)和可维护性(maintainability)等。 外部质量靠内部质量来保证。,下面就能够保证软件质量的几个程序

13、设计机制来说明面向对象程序设计的优势: 1 抽象(Abstraction) 处理大而复杂问题的重要手段是抽象:强调事物本质的东西。对程序抽象而言,一个语言结构的抽象强调的是该结构外部可观察到的行为,与该结构的内部实现无关。,过程抽象(Procedural Abstraction) 结构化程序设计是其典型代表。 过程抽象来源于子程序概念。子程序的作用有两个:节省劳动力和过程抽象 。 过程抽象有着非常重要的作用: 把子程序的接口和实现分开,使用者只需要知道子程序 的接口(功能和参数)而不需要关心其内部实现,适合于 基于功能分解的逐步精化(Step-wise)程序设计。,过程抽象的不足之处在于: 数

14、据与操作的描述分离。 数据缺乏保护。 不能适应需求的改变,数据抽象(Data Abstraction) 以数据为中心,把数据及其操作作为一个整体(对象)来进行描述,对数据的操作由包含数据的对象来提供。 面向对象程序设计强调的是数据抽象,一方面加强了数据保护,另一方面实现了对现实世界活动的直接模拟,能较好地适应需求的变化。不足之处在于:对系统的整体功能缺乏清楚的描述。,2 封装(Encapsulation) 把一个语言结构的具体实现细节作为一个黑匣子对该结构的使用者隐藏起来的一种机制,从而符合信息隐藏(Information Hiding)原则。 封装考虑的是内部实现,抽象考虑的是外部行为。,过

15、程封装 实现了操作的封装,而数据是公开的。 数据封装 实现了数据及其操作的封装。 面向对象程序设计强调的是数据封装。,3 模块化(Modularity) 模块化是处理大而复杂问题的重要手段,同时也是保证软件质量的有力措施,一个好的软件开发方法应能支持模块化。 模块分软件设计中的模块和程序设计中的模块,这里只考虑程序设计中的模块。 程序设计中的模块是指: 1)可以分别编译的程序单位。 2)程序在物理上的划分。,一个模块包含接口和实现两部分。 模块化的目标:可分解性、可结合性、可理解性、连续性和保护性。 模块划分的标准:内聚性和耦合度。 面向对象对模块有更好的支持:对象/类。,4 软件复用(Reu

16、se) 软件复用的层次:代码复用、设计过程复用和分析方案复用。代码复用最直接、最广泛。 传统的复用机制:源代码的剪裁和子程序库 面向对象的复用机制:继承、聚集和类库 5 软件开发过程,软件从无到有、直到消亡,往往要经历:需求分析、软件设计、实现(编程)、测试(确认交付)、运行以及维护等阶段,这个过程称为软件生命周期 。 传统的软件开发方法通常基于的是自顶向下、功能分解的方法(如:结构化方法),它所面临的问题是:由于功能分解模型较难与现实世界的实际系统相吻合,开发出的软件系统难以适应需求的变化。,采用面向对象方法开发软件能够: 减小各阶段之间的语义间隙,使得开发过程平稳过渡 提高软件的可维护性,特别是对需求变化的适应性,面向对象的基本概念,1 对象与类(Object&Class) 对象是由数据(数据成员、成员变量、实例变量、对象的局部变量)及其操作(操作、方法,成员函数、

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 工作范文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号