疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

面向对象程序设计简介


 

面向对象程序设计简介
        面向对象是一种更优秀的程序设计方法,它的基本思想是使用类、对象、继承、封装、消息等基本概念来进行程序设计。它是从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以现实世界中的事物(即对象)为中心来思考问题,认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的类,作为系统的基本构成单元(而不是用一些与现实世界中的事物相关比较远,并且没有对应关系的其他过程来构造系统),这使得系统可以直接映射客观世界,并保持客观世界中事物及其相互关系的本来面貌。
        如果采用面向对象方式开发的软件系统,其最小的程序单元是类,这些类可以生成系统中的多个对象,而这些对象则直接映射成客观世界的各种事物。采用面向对象方式开发的软件系统在逻辑上组成结构如图2.7所示。
        从世界观的角度可以认为:面向对象的基本哲学是认为世界是由各种各样具有自己的运动规律和内部状态的对象所组成的;不同对象之间的相互作用和通信构成了完整的现实世界。因此,人们应当按照现实世界这个本来面貌来理解世界,直接通过对象及其相互关系来反映世界。这样建立起来的系统才能符合现实世界的本来面目。
从方法学的角度可以认为:面向对象的方法是面向对象的世界观在开发方法中的直接运用。它强调系统的结构应该直接与现实世界的结构相对应,应该围绕现实世界中的对象来构造系统,而不是围绕功能来构造系统。
        从程序设计的角度来看,面向对象的程序设计语言必须有描述对象及其相互之间关系的语言成分。这些程序设计语言可以归纳为以下几类:系统中一切皆为对象;对象是属性及其操作的封装体;对象可按其性质划分为类,对象成为类的实例;实例关系和继承关系是对象之间的静态关系;消息传递是对象之间动态联系的唯一形式,也是计算的唯一形式;方法是消息的序列.
        对于面向对象的眼光来看,开发者从自己的使用角度或认识角度出发来定义类。就是说,我们定义类的目的是希望模拟客观世界的某种事物,并让自己明白,这种事物是用来做什么的,或者这种事物是怎么来的,对于我们有什么意义,这就是面向对象方式的主要思考方式。因此,面向对象程序设计的主要优点是:与人类习惯的思维方法一致;稳定性好;可重用性好;易于开发大型软件产品;可维护性好。
面向对象的基本特征
        面向对象方法具有三个基本特征:封装(Encapsulation)、继承(Inheritance)和多态((Polymorphism),其中,继承是面向对象实现软件复用的重要手段,当子类继承父类后,子类作为一种特殊的父类,将直接获得父类的属性和方法;封装指的是将对象的实现细节隐藏起来,然后通过一些公用方法来暴露该对象的功能;多态指的是子类对象可以直接赋给父类变量,但运行时依然表现出子类的行为特征,这意味着同一个类型的对象在运行时可能表现出不同的行为特征。
        除此之外,抽象也是面向对象的重要部分,抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是考虑部分问题。例如我们需要考察Person实体时,我们不可能在程序中将Person的所有细节都定义出来,通常只能定义Person的部分数据、部分行为特征—而这些数据、行为特征是软件系统所关心的部分。
        提示:虽然抽象是面向对象的重要部分,但他不是面向对象的特征之一,因为所有编程语言都需要抽象,当开发者进行抽象时应该考虑哪些特征是软件系统所需要的,那么这些特征就应该使用程序记录,并表现出来.因此,需要抽象哪些特征没有必然的规定,二是取决于软件系统的功能需求.
面向对象还支持如下几个功能:
        1.对象是面向对象方法中最基本的概念,它的基本特点有:标识唯一性、分类性、多态性、封装性、模块独立性好。
        2.类是具有共同属性、共同方法的对象的集合。类是对象的抽象;对象则是类的实例。而类是整个软件系统最小的程序单元,类的封装性将各种信息细节隐藏起来,并通过公用方法来暴露该类对外所提供的功能,从而提高了类的内聚性,降低了对象之间的祸合性。
        3.对象间的这种相互合作需要一个机制协助进行,这样的机制称为“消息”。消息是一个实例与另一个实例之间传递的信息。
        4.在面向对象方法中,类之间共享属性和操作的机制称为继承。己有的类可当做基类来引用,则新类相应的可当做派生类来引用。继承具有传递性。可分为单继承(一个继承只允许有一个直接父类,即类等级为树形结构)与多继承(一个类允许有多个直接父类)
        注意:由于多重继承可能引起继承结构的混乱,而且会大大降低程序的可理解性,所以Java不再支持多继承。
        在编程语言领域,还有一种“基于对象”的概念,这两个概念极易混淆:通常而言,“基于对象”也使用了对象,但是无法利用现有的对象模板产生新的对象类型,继而产生新的对象,也就是说,“基于对象”没有继承的特点。而“多态”表示为父类类型的子类对象实例,没有了继承的概念也就无从谈论“多态”。而面向对象的三大基本特征(封装,继承,多态)缺一不可,例如JavaScript语言就是基于对象的,它使用一些封装好的对象,调用对象的方法,设置对象的属性。但是它们无法让开发者派生新对象类型。他们只能使用现有对象的方法和属性。
        当你判断一门语言是否是面向对象的时候,通常可以使用后两个特性来加以判断。“面向对象”和“基于对象”都实现了“封装”的概念,但是面向对象实现了“继承和多态”,而“基于对象”没有实
现这些。
        从事面向对象编程的人按照分工来说,可以分为“类库的创建者”和“类库的使用者”。使用类库的人并不都是具备了面向对象思想的人,通常知道如何继承和派生新对象就可以使用类库了,然而我们的思维并没有真正地转过来,使用类库只是在形式上是面向对象,而实质上只是库函数的一种扩展。(摘自[疯狂JAVA讲义].李刚)