
谈到面向对象,这方面的文章非常多。但是,明确地给出对象的定义或说明对象的定义的非常少——至少我现在还没有发现。其初,“面向对象”是专指在程序设计中采用封装、继承、抽象等设计方法。可是,这个定义显然不能再适合现在情况。面向对象的思想已经涉及到软件开发的各个方面。如,面向对象的分析(OOA,Object Oriented Analysis),面向对象的设计(OOD,Object Oriented Design)、以及我们经常说的面向对象的编程实现(OOP,Object Oriented Programming)。许多有关面向对象的文章都只是讲述在面向对象的开发中所需要注意的问题或所采用的比较好的设计方法。看这些文章只有真正懂得什么是对象,什么是面向对象,才能最大程度地对自己有所裨益。这一点,恐怕对初学者甚至是从事相关工作多年的人员也会对它们的概念模糊不清。
面向对象是当前计算机界关心的重点,它是90年代软件开发方法的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。
不论采用哪种方法来开发软件,分析的过程都是提取系统需求的过程。分析工作主要包括3项内容,这就是理解,表达和验证。首先,系统分析员通过用户及领域专家的充分交流,力求完全理解用户需求和该应用邻域中的关键性的背景知识,并用某种无二义性的方式把这种理解表达成文档资料。分析过程得出的最重要的文档资料是软件需求规格说明(在面向对象分析中,主要由对象模型,动态模型和功能模型组成)。
由于问题复杂,而且人与人之间的交流带有随意性和非形式化的特点,上述理解过程通常不能一次就达到理解的效果。因此,还必须进一步验证软件需求规格说明的正确性,完整性和有效性,如果发现了问题则进行修正。显然,需求分析过程是系统分析员与用户及领域专家反复交流和多次修正的过程。也就是说,理解和验证的过程通常交替进行,反复迭代,而且往往需要利用原型系统作为辅助工具。
面向对象分析(OOA)的关键是识别出问题域内的类与对象,并分析它们相互间的关系,最终建立起问题域的简洁,精确,可理解的正确模型。在用面向对象观点建立起的3种模型中,对象模型是最基本,最重要,最核心的。
下面我们来看看面向对象的开发方法。
一 .首相让我们来了解什么是面向对象:
(1)对象:对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。
(2)对象的状态和行为。
对象具有状态,一个对象用数据值来描述它的状态。
对象还有 *** 作,用于改变对象的状态,对象及其 *** 作就是对象的行为。
对象实现了数据和 *** 作的结合,使数据和 *** 作封装于对象的统一体中
(3)类:具有相同或相似性质的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象。
类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。
类具有 *** 作,它是对象的行为的抽象,用 *** 作名和实现该 *** 作的方法来描述。
(4)类的结构:在客观世界中有若干类,这些类之间有一定的结构关系。通常有两种主要的结构关系,即一般--具体结构关系,整体--部分结构关系。
①一般——具体结构称为分类结构,也可以说是“或”关系,或者是“is a”关系。
②整体——部分结构称为组装结构,它们之间的关系是一种“与”关系,或者是“has a”关系。
(5)消息和方法:对象之间进行通信的结构叫做消息。在对象的 *** 作中,当一个消息发送给某个对象时,消息包含接收对象去执行某种 *** 作的信息。发送一条消息至少要包括说明接受消息的对象名、发送给该对象的消息名(即对象名、方法名)。一般还要对参数加以说明,参数可以是认识该消息的对象所知道的变量名,或者是所有对象都知道的全局变量名。
二. 下面让我们来认识一下面向对象的特征和几大要素:
(1)对象唯一性。(2)分类性。(3)继承性。(4)多态性(多形性)
面向对象的要素:(1)抽象。 (2)封装性(信息隐藏)。(3)共享性
三. 面向对象和基于对象的区别:
很多人没有区分“面向对象”和“基于对象”两个不同的概念。面向对象的三大特点(封装,继承,多态)却一不可。通常“基于对象”是使用对象,但是无法利用现有的对象模板产生新的对象类型,继而产生新的对象,也就是说“基于对象”没有继承的特点。而“多态”表示为父类类型的子类对象实例,没有了继承的概念也就无从谈论“多态”。现在的很多流行技术都是基于对象的,它们使用一些封装好的对象,调用对象的方法,设置对象的属性。但是它们无法让程序员派生新对象类型。他们只能使用现有对象的方法和属性。所以当你判断一个新的技术是否是面向对象的时候,通常可以使用后两个特性来加以判断。“面向对象”和“基于对象” 都实现了“封装”的概念,但是面向对象实现了“继承和多态”,而“基于对象”没有实现这些,的确很饶口。
从事面向对象编程的人按照分工来说,可以分为“类库的创建者”和“类库的使用者”。使用类库的人并不都是具备了面向对象思想的人,通常知道如何继承和派生新对象就可以使用类库了,然而我们的思维并没有真正的转过来,使用类库只是在形式上是面向对象,而实质上只是库函数的一种扩展。
面向对象是一种思想,是我们考虑事情的方法,通常表现为我们是将问题的解决按照过程方式来解决呢,还是将问题抽象为一个对象来解决它。很多情况下,我们会不知不觉的按照过程方式来解决它,而不是考虑将要解决问题抽象为对象去解决它。有些人打着面向对象的幌子,干着过程编程的勾当。
在对面向对象方法学有了一定的理解后,我们可以知道,面向对象方法学的出发点和根本原则,是尽量可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,也就是使描述问题的问题空间(也称为问题域)与实现解决的解空间(也称为求解域)在结构上尽可能一致。
四 .面向对象方法学和传统方法学较之有了很大的优点:
1.它与人习惯的思维方法一致。
传统的程序设计技术是面向过程的设计方法,这种方法以计算为中心,把数据和过程作为相互独立的部分,数据代表问题空间中的客体,程序代码则用于处理这些数据。而面向对象的方法学是以对象为核心,用这种技术开发出的软件系统由对象组成的。
2.稳定性好。
传统的软件开发方法以计算法为核心,开发过程基于功能分析和功能分解,所以它很不稳定。而面向对象的方法学是基于构造问题邻域的对象模型,以对象为中心构造软件系统,它的基本做法是对象模拟问题邻域中的实体,以对象间的联系刻画实体间的联系。由于现实世界中的实体是相对稳定的,因此,以对象为中心构造的软件系统也是比较稳定的。
3.可重用性好。
传统的软件重用技术是利用标准函数库,也就是试图用标准函数库中的函数作为“预制件”来建造新的软件系统,但是,标准函数缺乏必要的“柔性”,不能适应不同应用场合的不同需要,并不时理想的可重用的软件成分。而在实际开发一个新的软件系统时,通常多数函数是开发者自己编写的,甚至绝大多数的函数都是新编的。
面向对象的软件技术在利用可用的软件成分构造新的软件系统时,有很大的灵活性。它有两种方法可以重复使用一个对象类:一种方法是创建该类的实例,从而直接使用它,另一种方法是从它派生出一个满足当前需要的新类。它所实现的重用性是自然的和准确的,不像传统的方法是刻意的。
4.较易开发大型软件产品。
在开发大型软件产品时,组织开发人员的方法不恰当往往是出现问题的主要原因。用面向对象方法学时,构成软件系统的每一个对象就像一个微型程序,有自己的数据, *** 作,功能和用途,因此,可以把一个大型软件产品分解成一系列本质上相互独立的向产品来处理,故它比较容易开发大型软件。
5.可维护性好。
用传统的方法和面向过程语言开发出来的软件很难维护,然而面向对象的方法由于存在下面几种原因故维护性好。
因素:面向对象的软件稳定性比较好。
面向对象的软件比较容易修改。
面向对象的软件比较容易理解。
面向对象的软件易于测试和调试。
最后:
目前,面向对象开发方法的研究已日趋成熟,国际上已,有不少面向对象产品出现。我相信这种方法在不断地完善下不仅现在适用,就算再将来,它也会被相当多的开发商使用的。
其实,很多理论上的理解,并不重要,在实际应用中,详细体会,感受到的才是最真实的。简单说一下体会:
c语言是比较基础的语言,他里面没有封装什么的真对windows开发的类。因此,我们在用c语言开发的时候,基本上只用来制作比较底层的开发。如果我们用c语言开发大型与复杂的程序,其工作量是异常巨大的。
当然,c语言开发的程序在效率上是要高于 c++与c#的。
c# 是非常高级的语言,又是微软近年来花巨额资金打造的产品,对于我们开发windows的各种程序,都是非常便捷和效率的。并且,c#语言还可以用来开发.net平台的网站,其功能之强,用途之广,是非常值得我们去体会的。
当然,c#也有执行效率低的缺点,不过这些都可以通过我们电脑不断的升级换代逐渐被淡化。
关于你的:谈一谈你对面向对象程序设计的理解:
这是一种概念,凡是新接触这个概念的人,都会被搞得一头雾水,甚至望而却步。
其实,这是一种完全错误的导向,其实你死记硬背,生搬硬套的去学,也完全能够进入到这个领域里,你会通过一次次的编写程序,在心中逐渐建立起这个概念。
让我用一种学术的语言来解释,我也一样说不太好,而且我也没有过多的去深入的研究这个概念,但是这并不会影响我去写程序。不过我觉得还是可以给你举例说明:
面向对象程序设计 其实就是在一间屋子里摆满了各种工具,当你需要制作生产的时候,你就把这些工具调用出来,随便的使用。这样,你写程序是多么轻松啊!
不是面对对象的语言,摆在你面前的只是一堆原料,你需要自己加工成工具,然后再用这些工具来生产。
再极限下来,如果说你用0 1 来直接写程序(最早的程序就是这样的),那么就相当于,你直接跟万物的创造者耶和华直接进行对话了! 因为你连原材料都没有,你只有一片浮云……
面向对象是一种新兴的程序设计方法,或者说它是一种新的程序设计范型,其基本思想是使用对象,类,继承,封装,消息等基本概念来进行程序设计。面向对象方法作为一种新型的独具优越性的新方法正引起全世界越来越广泛的关注和高度的重视,它被誉为"研究高技术的好方法",更是当前计算机界关心的重点。十多年来,在对OO方法如火如荼的研究热潮中,许多专家和学者预言:正象70年代结构化方法对计算机技术应用所产生的巨大影响和促进那样,90年代OO方法会强烈地影响、推动和促进一系列高技术的发展和多学科的综合。 它是从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以问题域(现实世界)中的事物为中心来思考问题,认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的对象,作为系统的基本构成单位(而不是用一些与现实世界中的事物相关比较远,并且没有对应关系的其它概念来构造系统)。这可以使系统直接地映射问题域,保持问题域中事物及其相互关系的本来面貌。 它可以有不同层次的理解: 从世界观的角度可以认为:面向对象的基本哲学是认为世界是由各种各样具有自己的运动规律和内部状态的对象所组成的;不同对象之间的相互作用和通讯构成了完整的现实世界。因此,人们应当按照现实世界这个本来面貌来理解世界,直接通过对象及其相互关系来反映世界。这样建立起来的系统才能符合现实世界的本来面目。 从方法学的角度可以认为:面向对象的方法是面向对象的世界观在开发方法中的直接运用。它强调系统的结构应该直接与现实世界的结构相对应,应该围绕现实世界中的对象来构造系统,而不是围绕功能来构造系统。 从程序设计的角度来看,面向对象的程序设计语言必须有描述对象及其相互之间关系的语言成分。这些程序设计语言可以归纳为以下几类:系统中一切皆为对象;对象是属性及其 *** 作的封装体;对象可按其性质划分为类,对象成为类的实例;实例关系和继承关系是对象之间的静态关系;消息传递是对象之间动态联系的唯一形式,也是计算的唯一形式;方法是消息的序列。欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)