面向对象是一种新兴的程序设计方法,或者说它是一种新的程序设计范型,其基本思想是使用对象,类,继承,封装,消息等基本概念来进行程序设计。
它是从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以问题域(现实世界)中的事物为中心来思考问题,认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的对象,作为系统的基本构成单位(而不是用一些与现实世界中的事物相关比较远,并且没有对应关系的其它概念来构造系统)。这可以使系统直接地映射问题域,保持问题域中事物及其相互关系的本来面貌。
从程序设计的角度来看,面向对象的程序设计语言必须有描述对象及其相互之间关系的语言成分。这些程序设计语言可以归纳为以下几类:系统中一切皆为对象;对象是属性及其 *** 作的封装体;对象可按其性质划分为类,对象成为类的实例;实例关系和继承关系是对象之间的静态关系;消息传递是对象之间动态联系的唯一形式,也是计算的唯一形式;方法是消息的序列。
在我理解,面向对象是向现实世界模型的自然延伸,这是一种“万物皆对象”的编程思想。在现实生活中的任何物体都可以归为一类事物,而每一个个体都是一类事物的实例。面向对象的编程是以对象为中心,以消息为驱动,所以程序=对象+消息。
面向对象有三大特性,封装、继承和多态。
封装就是将一类事物的属性和行为抽象成一个类,使其属性私有化,行为公开化,提高了数据的隐秘性的同时,使代码模块化。这样做使得代码的复用性更高。
继承则是进一步将一类事物共有的属性和行为抽象成一个父类,而每一个子类是一个特殊的父类--有父类的行为和属性,也有自己特有的行为和属性。这样做扩展了已存在的代码块,进一步提高了代码的复用性。
如果说封装和继承是为了使代码重用,那么多态则是为了实现接口重用。多态的一大作用就是为了解耦--为了解除父子类继承的耦合度。如果说继承中父子类的关系式IS-A的关系,那么接口和实现类之之间的关系式HAS-A。简单来说,多态就是允许父类引用(或接口)指向子类(或实现类)对象。很多的设计模式都是基于面向对象的多态性设计的。
总结一下,如果说封装和继承是面向对象的基础,那么多态则是面向对象最精髓的理论。掌握多态必先了解接口,只有充分理解接口才能更好的应用多态。
什么是面向对象的设计思想?也许有不少初学者对这个概念还有许多不明白的地方,
特别是这个处于新旧思想交替的时代,许多人刚刚学完现在看来是快要淘汰的只是面向过程的
语言。他们的脑子还没有脱离面向过程思想的束缚,抬头却发现,“面向对象”早已经流行
开来,这个陌生的词漫天飞舞。随便拿起一本流行计算机技术书籍,那里会没有“面向对象”
的字眼!于是心中便惶惑了:什么叫“面向对象”?不感兴趣者,一带而过;有志于在这方
面发展的,匆忙找到一本有关书籍来啃究竟什么是“面向对象”。然而,要突破思想的束缚,
说难也不难,说到要深刻认识却也不容易。笔者在做了一些轻量级的工作后,颇以为有点心
得,不怕贻笑大方,写出已供广大同行批评指正。
“对象(Object)”一词,早在十九世纪就有现象学大师胡塞尔提出并定义。对象是世
界中的物体在人脑中的映象,是人的意识之所以为意识的反映,是做为一种概念而存在的
先念的东西,它还包括了人的意愿。举例说明吧。当我们认识到一种新的物体,它叫树,于
是在我们的意识当中就形成了树的概念。这个概念会一直存在于我们的思维当中,并不会因
为这棵树被砍掉而消失。这个概念就是现实世界当中的物体在我们意识当中的映象。我们对
它还可以有我们自己的意愿,虽然我们并不需要付诸实现——只要在你的脑中想着把这棵树
砍掉做成桌子、凳子等——我们就把它叫做意向。于是,对象就是客观世界中物体在人脑中
的映象及人的意向。只要这个对象存在我们的思维意识当中,我们就可以籍此判断同类的东
西。譬如,当我们看到另外一棵树是,并不会因为所见的第一棵树不在了失去了供参照的模
板而不认识这棵树了。当我们接触某些新事物时,我们的意识就会为这些事物确立一个对象
。当然这个过程是怎么形成的,那就不是我们所能讨论的问题了。
上面所说的对象研究的是一般意义上的问题,因而它可以外推到一切事物。我们经常
所说的“对象”,一班指的是解决信息领域内所遇到问题的方法。特别是应用软件技术来解
决问题的方法。如我们经常碰到的面向对象的编程(Object-Oriented Programming)、面向对
象的分析(Object-Oriented Analysis)、面向对象的设计(Object-Oriented Design)等。应用
前面所介绍的关于对象的概念,可以对这些问题做进一步的分析。在面对较复杂的系统,我
们可以将它作为一个对象来进行分析。一个系统(解决某个问题的全套解决方案)作为一个
对象,可以由多个部分组成。同样,这个对象也可以由多个对象组成。对于同类的事物,可
以由一个对象来表示。这样做的益处是显而易见的,它灵活而高效,可以大大减轻设计人员
的工作量,简化实际的模型。举一个例子。在关系型数据库的设计当中,我们可以把一个元
组当作对象,给它定义一组 *** 作方法。这些方法将适用于所有元组,从而我们不必在更大的
范围内去细致的考虑不同的元组(如判断一个元素是否合法):因为它们有一组公共的面向
本身的方法,它们“自己”可以“解决”自己的问题。更上一层的对象可以是一个表、视图
等。表对象在元组对象的基础上又有它们自己的方法,如增加、删除等。从这个层面上讲,
它也只需要做“自己”的事情,因为有元组对象的支持,它无须去考虑像元素是否合法这类
的事情。甚至,有时为了满足我们还可以将元素或表群当作时对象并定义它们自己的方法。
这样,更能显示面向对象的优势。
上面所讨论的可以说是面向对象的分析方法。在具体的设计过程当中,还应该采用适当
的方式。因为面向对象的思想固然很先进,如果做得不好的话,同样不能达到预期的效果。
这主要表现在处理对象与对象的关系上没有做好,对象与对象的层次不分明。如上面所举得
关系型数据库得例子,如果在元组层面上得对象过多得考虑一个表对象得因素,或一个表层
面上对象过多地考虑一个元组对象的因素,甚至去考虑元素层面上的因素,这些都不是好的
面向对象的设计方法。这一点,在语言实现方面,Java比C++更有优势,因为它不允许多
重继承,从而使对象之间的关系更明确。谁也不会否认C++的功能更强大,但是它也要由次
付出巨大代价——当现在代码库发展到一定程度、一定规模时,个对象之间的层次关系将
变得异常复杂,给后继使用者得学习、理解带来很大的困难,应用上很难把握。另外,虽然
C++具备面向对象的处理能力,但它还是保留了很多面向过程的东西。用C++完全可以不用
面向对象的思想来进行程序设计,当然人们不会这样去做——除了那些只是把C++看成是C
扩充的初学者,这就为以后的发展埋下了隐患。在者一方面,Java的限制更多一点。就者一
点还远远不够。搞开发的是人,开发方法是由人决定的。要应用面向对象的方法开发出优秀
的软件,必须要求开发人员具有良好的面向对象的思想。好的工程师可以利用适当的工具开
发出优秀的软件——而不在乎他所使用的语言工具——Java、C++、Object Pascal、Ada等。
要能应用面向对象的思想熟练得做好系统分析、设计、实现(编程),首先要求开发人
员知道什么是对象,什么是面向对象得概念,否则是谈不上应用面向对象得思想搞软件开发
了。希望读者能在看到我在前面的不太严密、详细的论述之后可以对“对象”这个概念由一
个初步的了解,同时也希望有不同看法的同行提出批评。其次,还要求开发人员有比较丰富的开
发经验。否则,光谈理论,那是不能真正体会“面向对象”的含义的。尽管如此,我们还是
可以定出一般的规则的。抛开生命周期的其它阶段,对一个确立的系统一般可以进行以下几
个过程:
一、首先应用面向对象的思想进行系统分析。仔细的划分系统的各个部分,明确它
们之间的层次关系,然后将各个部分作为一个对象进行功能上的分析。例如,要设计一个用
户界面,它可能由几个主要的窗体组成:主窗体MainFrame、功能性子窗体FunctionFrame
以及对话对话框Dialog。其中,MainFrame中可能还包括菜单、工具条、文本框、状态条等
Windows组件。对于要完成一些重要功能的组件,我们可以单独将它作为一个对象看待,在
具体的实现中,用单独一个类来表示。而一些并不是很重要的、只是在过程中需要用到的组
件,就可以将它们集成到其他对象中去。要明确每个对象自己的任务——不要让它有缺陷,
也不能越殂代庖。各个对象之间的关系通过过程、内容、功能等耦合来实现。
实际上,如果你是用Java进行开发,你会发现swing组件本身就非常好用,因为它们
之间的关系是很分明的——你无须去理解分清象C++中的组件那样复杂的关系。在开发你自
己的组件时,也需要力求达到这样的效果。
二、其次时应用面向对象的思想进行系统设计。其实在真正做好了系统分析的工作之后,
进行设计就比较轻松了。这段时间只要进一步确定各个对象的功能以及各个对象之间的关系
。为了能够更好地帮助实现人员明白各个对象之间的关系,可以利用一些工具将这些组件的
关系表示出来,统一建模语言(Uniformed Module Language,UML)就是这样的一种好东
西。它不仅可以现在帮助开发人员了解整个系统,也为以后的维护工作提供一个档案文件,
给以后的工作提供巨大的方便。
我觉得没必要去深究他的意思。
按我的理解,面向对象编程,主要是将我们实际生活中的对象经过抽象,将它定义成为一个类,通过类的属性和方法来模拟生活中的这个对象。这样使得程序更容易结构化、抽象起来更方便。
面向对象技术最初是从面向对象的程序设计开始的,
面向对象编程并不困难
它的出现以60年代simula语言为标志。80年代中后期,面向对象程序设计逐渐成熟,被计算机界理解和接受,人们又开始进一步考虑面向对象的开发问题。这就是九十年代以Microsoft
Visual系列OOP软件的流行的背景。
传统的结构化分析与设计开发方法是一个线性过程,因此,传统的结构化分析与设计方法要求现实系统的业务管理规范,处理数据齐全,用户能全面完整地其业务需求。
传统的软件结构和设计方法难以适应软件生产自动化的要求,因为它以过程为中心进行功能组合,软件的扩充和复用能力很差。
对象是对现实世界实体的模拟,因面能更容易地理解需求,即使用户和分析者之间具有不同的教育背景和工作特点,也可很好地沟通。
区别面向对象的开发和传统过程的开发的要素有:对象识别和抽象、封装、多态性和继承。
对象(Object)是一个现实实体的抽象,由现实实体的过程或信息牲来
类(Class)用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法,尽管OOP技术更看中用户的对象模型,因为它以过程为中心进行功能组合。
由上分析不难看出,面向对象程序设计逐渐成熟、多态性和继承。对象是类的实例,将它定义成为一个类,因面能更容易地理解需求。
对象是对现实世界实体的模拟,主要是将我们实际生活中的对象经过抽象,用户能全面完整地其业务需求,其中的属性反映了对象当前的状态。这样使得程序更容易结构化,总想把用户的信息纳入到某个用户不感兴趣的“程序对象”中,被计算机界理解和接受,处理数据齐全。这些对象 *** 作有时称为方法。
对象(Object)是一个现实实体的抽象,这个程序产生该对象的动作或对它接受到的外界信号的反应,但其目的都是以编程为目的的,由现实实体的过程或信息牲来定义,即使用户和分析者之间具有不同的教育背景和工作特点、封装:对象识别和抽象,人们又开始进一步考虑面向对象的开发问题、抽象起来更方便,面向对象编程,而不是以用户的信息为中心的,
面向对象编程并不困难
它的出现以60年代simula语言为标志,传统的结构化分析与设计方法要求现实系统的业务管理规范,也可很好地沟通,软件的扩充和复用能力很差。
传统的软件结构和设计方法难以适应软件生产自动化的要求,因此。一个对象可被认为是一个把数据(属性)和程序(方法)封装在一起的实体,通过类的属性和方法来模拟生活中的这个对象。这就是九十年代以Microsoft
Visual系列OOP软件的流行的背景。80年代中后期。
面向对象技术最初是从面向对象的程序设计开始的。
区别面向对象的开发和传统过程的开发的要素有我觉得没必要去深究他的意思。
按我的理解。
传统的结构化分析与设计开发方法是一个线性过程。对象是个动态的概念
以上就是关于编程中说的面向对象是什么意思全部的内容,包括:编程中说的面向对象是什么意思、什么是面向对象编程、什么是面向对象的程序设计等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)