2023年面向对象程序设计.doc
《2023年面向对象程序设计.doc》由会员分享,可在线阅读,更多相关《2023年面向对象程序设计.doc(94页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第3章 面向对象程序设计3.1 面向对象程序设计思想3.1.1 历史回顾1967年挪威计算中心的Kisten Nygaard和Ole Johan Dahl开发了Simula67语言,它提供了比子程序更高一级的抽象和封装,引入了数据抽象和类的概念,它被认为是第一个面向对象语言。20世纪70年代初,Palo Alto研究中心的Alan Kay所在的研究小组开发出Smalltalk语言,之后又开发出Smalltalk-80,Smalltalk-80被认为是最纯正的面向对象语言,它对后来出现的面向对象语言,如Object-C,C+,Self,Eiffl都产生了深远的影响。随着面向对象语言的出现,面向对
2、象程序设计也就应运而生且得到迅速发展。之后,面向对象不断向其他阶段渗透,1980年Grady Booch提出了面向对象设计的概念,之后面向对象分析开始。1985年,第一个商用面向对象数据库问世。1990年以来,面向对象分析、测试、度量和管理等研究都得到长足发展。事实上,“对象”和“对象的属性”这样的概念可以追溯到20世纪50年代初,它们一方面出现于关于人工智能的初期著作中。但是出现了面向对象语言之后,面向对象思想才得到了迅速的发展。过去的几十年中,程序设计语言对抽象机制的支持限度不断提高:从机器语言到汇编语言,到高级语言,直到面向对象语言。汇编语言出现后,程序员就避免了直接使用0-1,而是运用
3、符号来表达机器指令,从而更方便地编写程序;当程序规模继续增长的时候,出现了Fortran、C、Pascal等高级语言,这些高级语言使得编写复杂的程序变得容易,程序员们可以更好地对付日益增长的复杂性。但是,假如软件系统达成一定规模,即使应用结构化程序设计方法,局势仍将变得不可控制。作为一种减少复杂性的工具,面向对象语言产生了,面向对象程序设计也随之产生。3.1.2 什么是面向对象程序设计一方面我们要了解的是,什么是面向对象的程序设计方法OOP(Object Oriented Programming),它与传统的结构化程序设计方法SP(Structure Programming)的重要区别是什么。
4、要弄清什么是OOP,则应了解和回顾一下传统的结构化程序设计方法及其设计思想、程序结构与特点,以便比较对照两者之间的差异,由此领略OOP对SP的继承、丰富、发展和突破。1结构化程序设计思想结构化程序设计SP是60年代诞生的,以针对当时爆发的所谓“软件危机”的挑战,而在70、80年代遍及全球成为所有软件开发设计领域、每个程序员都广为采用的传统的结构化程序设计方法与技术的简称。它的产生和发展形成了现代软件工程学的基础。SP的总的设计思绪是两点:一是自顶向下,层次化;二是逐步求精,精细化。其程序结构是按功能划分基本模块为树型结构,使模块间的关系尽也许简朴、独立,并从而单独验证模块的对的性。每一模块均由
5、顺序、选择和循环三种基本结构组合而成。综言之,此即所谓“模块化”。因此,SP的程序的基本特点是:a按层次组织模块。(即战略上划分战役)b每一模块只有一个入口,一个出口。(每一战役尽也许简朴、明确)c代码和数据分离实现。(战术上程序=数据结构+算法)SP实现上述战略战术的具体方法和技术是:使用局部变量和子程序。SP的优点可以概括为:a子程序对程序其它部分没有或尽也许少的连带作用,从而为共享代码奠定基础。b由于SP方法的模块化分解与功能抽象,自顶向下,分而治之的手段及技术,从而能有效地将一个复杂的、中大规模的程序系统的设计任务提成许多易于控制和解决、可独立编程的子任务、子程序模块。c对于上述子程序
6、或模块中的每一个都有一个清楚的抽象界面,它只说明:相应用程序设计者来说只需了解它做什么(What to do),而不必说明:它如何去做(How to do)。但从本质上说,由Pascal和C这样的程序设计推动的传统的SP仍是一种面向数据和过程的设计方法,它把数据和过程分离为互相独立的实体,用数据代表问题空间中的客体借以表达实际问题中的信息;程序代码则体现用于解决加工这些数据的算法。于是,程序员在编程时必须时刻考虑要解决的数据结构和类型,对不同的数据格式(结构和类型)即使要作同样的解决计算,或者对于相同的数据格式要作不同的解决都要编写不同的程序,可见,使用传统SP方法设计出来的程序或系统,其可重
7、用的成分很少。另一方面,当把数据和代码作为不同的分离体时,总存在着用错误的数据调用对的的程序,或用对的的数据调用错误的程序的危险。因而,使数据与程序始终保持相容一致,已成为程序员的一个沉重的承担。这就是为什么在开发一个大型软件的过程中,假如用户在工程的中、后期对数据格式或实现方案提出任何改变请求时,变化摧毁了前面工作的一切,前功尽弃。2面向对象程序设计思想为了克服和解决当今许多大型软件项目和系统设计都接近或达成了SP方法所难以控制解决和适应其变化的上述种种矛盾及问题而产生了OOP方法与技术。OOP吸取了SP的一切优点和长处,同时又正视和顺应现实世界由物质和意识两部分组成的这一普遍原理,将其映射
8、到对象的解空间就是:具体事物对象,抽象概念类;而一个对象无非就是这样一个实体,它具有一个名字标记,并带有自身的状态(属性)和自身的功能(行为或方法)。世界上的所有事物(对象)就是如此奇妙地简朴。这正是面向对象方法和技术所追求的目的:将世界上的问题尽也许简朴化。事实上,用计算机求解的问题都是现实世界中的问题,它们无非都是由一些互相联系的,并处在不断运动变化的事物(即对象)所组成。每个具体对象都可用两个特性来把握:描述事物静态数据和可施于这些数据上的有限操作。也就是说,应当把数据结构和对数据的操作放在地起,作为一个互相依存不可分离的整体(即对象类)来解决(封装、信息隐蔽、数据抽象等)。并且要考虑不
9、同事物即对象类之间的联系(消息、通讯、协议等)和事物即对象类的重用性和变化性(继承、多态等),这才更符合客观世界的本来面目。概言之,OOP与SP不同,它除了包纳了SP的一切优特点与机制外,同时又是一个引入若干强有力的、更能反映事物本质的新概念、新机制,从而开创了一个程序新天地的强大新方法。OOP的基本原理是:用问题领域的模型来模拟现实世界,从而设计出尽也许直接、自然地表达问题求解方法的软件,这样的软件系统由对象组成,而对象则是完整反映客观世界事物具有不可分割的静态属性(数据结构)与动态行为(方法)的,并且它们是既有联系又有变化发展的实体。OOP方法所涉及的新概念,在理论上最具一般性的相应物及其
10、描述如下等等:a对象对客观世界事物的表达或描述,世界上任何具体事物均可称为对象。b类是一组对象的抽象定义(抽象概念、抽象数据类型)c方法相应于对象的功能。d消息对象之间通讯的途径。e继承对象间具有相同性和差异变化的关系。基于以上概念,面向对象就成了一个作为现实世界映射的封闭的缩微世界,一个对象具有自身的属性(私有数据成员)和可认为自己或别人工作的功能(方法、操作或称成员函数),它能通过发送消息与其它对象进行通讯,协同完毕任务。OOP并不是用一两句话就可以精拟定义描述清楚的一套方法与技术,然而在这里,我们还是非形式化地、笼统地说明和描述一下OOP的概念:OOP是SP、信息掩蔽、知识表达、并行解决
11、领域等概念的继承和发展。OOP的特点是把系统设计成将所需规定解的问题分解成一些对象及对象间传递消息的符合客观世界规律的自然过程。OOP方法使程序员摆脱具体的数据格式和过程的束缚,将精力集中到对要解决的对象的设计和研究上,从而大大减少了软件开发的复杂度。OOP涉及了功能抽象的抽象数据、信息隐蔽即封装等机理,使对象的内部实现与外界隔离,从而提供了更抱负的模块化机制,大大减少了程序间的互相干扰和副作用。OOP的抽象数据类型对象类及继承,则为我们提供了抱负的高可重用性的软件成份和机制。此外,在人工智能领域中,若用OOP方法表达知识,则更接近于自然的客观世界的知识表达和结识论,因而不仅能表达描述非常复杂
12、的客观事物和知识,并且具有模块性强、结构化限度高,便于分层实现,有助于实际开发和维护。因此OOP方法和技术的优特点将非常适合知识解决、知识库、专家系统等人工智能领域和数据库、CAD、图形解决(多媒体)、系统模拟与构造等大型复杂软件工程化开发。3.1.3 面向对象程序设计语言一个语言要称为面向对象语言必须支持几个重要面向对象的概念。根据支持限度的不同,通常所说的面向对象语言可以提成两类:基于对象的语言,面向对象的语言。基于对象的语言仅支持类和对象,而面向对象的语言支持的概念涉及:类与对象、继承、多态。举例来说,Ada就是一个典型的基于对象的语言,由于它不支持继承、多态,此外其他基于对象的语言尚有
13、Alphard、CLU、Euclid、Modula。面向对象的语言中一部分是新发明的语言,如Smalltalk、Java,这些语言自身往往吸取了其他语言的精华,而又尽量剔除他们的局限性,因此面向对象的特性特别明显,充满了蓬勃的生机;此外一些则是对现有的语言进行改造,增长面向对象的特性演化而来的。如由Pascal发展而来的Object Pascal,由C发展而来的Objective-C,C+,由Ada发展而来的Ada 95等,这些语言保存着对原有语言的兼容,并不是纯粹的面向对象语言,但由于其前身往往是有一定影响的语言,因此这些语言仍然宝刀不老,在程序设计语言中占有十分重要的地位。C+语言及环境中
14、的OOP有五个最基本概念,这五个基本概念术语是构成整个C+面向对象方法与技术的柱石。它们是:a对象(Object)b消息(Message)c方法(Method)d类(Class)e继承(Inheritence)下面我们将分别介绍它们的含义、组成和性质。1对象什么是对象?对象是私有数据及可以对这些数据施加的操作结合在一起所构成的独立实体。即一个对象基本上涉及两个重要部分:记载对象内部状态的数据和表现对象活动与功能的程序。从传统的SP观点来看,数据和解决它们的代码是两个不同的独立实体,它们之间的对的联系、选择和匹配需要应用系统的设计者时刻考虑。而OOP中,一个对象则是由私有数据和其上的一组操作代码
15、组成的一个统一体。请看如下示意图:SP观点OOP观点数据代码数据代码对象对象的动作取决于发送给该对象的消息表达式,消息告诉对象规定完毕的功能,并激活该功能,这意味着对象具有自动“知道”如何完毕相应操作代码的“智能”选择机制,正是这一机制把SP中应用系统程序员作出的选择操作数据与相应操作函数代码匹配的承担转移给了系统设计者。上述所谓的“智能化”的选择机制并不神秘,只但是是在对象的操作(过程或函数)表中对消息操作名进行按名搜索而已,相应C+来说,执行一个消息表达式就是触发选择机制在相应对象的调度表(内存控制块)中进行搜索,找到后便转向相应于该消息的成员函数代码中运营。事实上,除了上述选择匹配机制是
16、新东西外,下面这些术语的含义和传统的SP相应名词及说明是相以相应的:对象内存中的数据块对象标记符指向上述数据的指针向对象发送消息使成员函数作用于数据在OOP中,数据和代码是紧密结合在一起的计算机中的一内存分块。但局部于该对象中的数据只可以由对象中的代码块(成员函数)来访问,即数据是对象私有的(受保护的),不能被其它对象影响和修改。简朴地说,一个对象从不关心其它对象的内部细节,而只关心它自己,对象之间的通讯只是以“做什么”的消息发送为契机,并且认为接受消息的对象是知道如何去做的。对象可以非常简朴,也可以十分复杂。通常复杂对象由简朴的对象层层嵌套组合而成。此后我们将从C+程序实例中看到,对象形式上
17、只是系统程序员、应用程序员或用户定义的“类”这种数据结构类型的变量,当我们定义一个对象,就已发明出了一种新的抽象数据类型。对象可以说是构成和支撑整个OOP最重要的细胞与基石。除了上述基本组成、关系和机理特性外,对象尚有以下性质和优点:a模块独立性。逻辑上看,一个对象是独立存在的模块,从外部看这模块,只需了解它具有哪些功能,至于它如何实现这些功能和使用哪些局部数据来完毕它们的细节则“隐蔽”在模块内部。这意味着模块内部状态不受外界干扰改变,也不会殃及到其它模块。即模块间依赖性极小或几乎没有;各模块可独立为系统组合选用,也可被程序员重用,而不必紧张波及或破坏别的模块。b动态连接性。客观世界中各式各样
18、的对象,并不是孤立存在的,正是它们之间的互相作用、联系和连接,才构成了世间各种不同的系统。同时,在OOP中,通过消息(传送)激活机制,把对象之间动态联系连接起来,便称为对象的动态连接性。c易维护性。由于对象的功能被“隐蔽”和好象被一层封装壳保护在对象内部,故无论是修改,还是功能完善以及实现的细节都被囿于该对象内部,不会播及到外部去,这增长了对象和整个系统的易维护性。2消息什么是消息?消息是规定某个对象执行其中某个功能操作的规格说明。通俗地讲,OOP中的术语“消息”只但是是现实世界中的“请求”、“命令”等平常生活用语的同义词。通常,OOP的一条消息由选择器(“消息操作”或“消息名”)及若干变元(
19、0个或多个实参)和接受消息的对象三个部分组成。从程序设计语言的角度出发来说,除前面曾经提到过的消息具有提供(激活)对象的动态选择机制外,消息表达式从形式上看类似于普通的函数调用。如代码:switch(message) case WM_LBUTTONDOWN;/鼠标左按钮被按下 . break; case WM_LBUTTONUP;/ 鼠标左按钮被放开 . break;一般,我们把发送消息的对象称为发送者,接受消息的对象称为接受者。对象间的联系,只能通过传送消息即执行消息表达式来进行。对象也只有在收到消息时,才被激活,补激活的对象的代码将知道如何去进行操作它的私有数据,以完毕所发送的消息规定的功
20、能。消息发送不考虑具体的接受者,对象可以响应,也可以不响应。3方法什么是方法?OOP中的术语“方法”相应于对象的能力,即它是实现对象所具有的功能操作的代码段,是响应消息的“方法”。C+中,方法即是类中定义的成员函数,它只但是是该类对象所能执行的操作的算法实现而已。方法与消息是相应的,每当对象收到一个消息,它除了能用“智能化”的选择机制知道和决定应当去做什么(What to do)外,还要知道和决定该如何做(How to do)。而方法正是与对象相连决定怎么做的的操作执行代码。4类什么是类?类是对一组对象的抽象归纳概括,确切地说,类是对一组具有相同数据成员和相同操作成员的对象的定义和说明。而每个
21、对象都是某个类的一个具体实例。在OOP中,每个对象由一个类来定义或说明,类可以看作生产具有相同属性和行为方式对象的模板。类或分类就是所谓“物以类聚,人以群分”的意思,“类”就是具有相似性质的事物的同类特性的集中。简言之,按照对象的相似性,我们把对象提成一些类和子类,故相似对象的集合即称为类。对C+程序员而言,类事实上是一种对象类型。它描述属于该类型的具有相同结构和功能的对象的一般性质。而结构类型则是只有将相关信息(仅只是不同类型的数据集)集中在一起的一个C的变量集。从理论上讲,类(class)是一组同类对象的抽象,它将该种对象的共同特性,涉及操作特性和存储特性都集中封装起来。由属于此类的对象共
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023 面向 对象 程序设计
限制150内