`
jws132
  • 浏览: 18032 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

面向对象的三个基本概念

    博客分类:
  • JAVA
 
阅读更多
封装

  封装(Encapsulation ) 是将代码及其处理的数据绑定在一起的一种编程机制,该机制保证了程序和数据都不受外部干扰且不被误用。理解封装性的一个方法就是把它想成一个黑匣子,它可 以阻止在外部定义的代码随意访问内部代码和数据。对黑匣子内代码和数据的访问通过一个适当定义的接口严格控制。如果想与现实生活中的某个事物作对比,可考 虑汽车上的自动传送。自动传送中包含了有关引擎的数百比特的信息,例如你正在以什么样的加速度前进,你行驶路面的坡度如何,以及目前的档位。作为用户,你 影响这个复杂封装的方法仅有一个:移动档位传动杆。例如,你不能通过使用拐弯信号或挡风玻璃擦拭器影响传动。所以档位传动杆是把你和传动连接起来的惟一接 口。此外,传动对象内的任何操作都不会影响到外部对象,例如,档位传动装置不会打开车前灯!因为自动传动被封装起来了,所以任何一家汽车制造商都可以选择 一种适合自己的方式来实现它。然而,从司机的观点来看,它们的用途都是一样的。与此相同的观点能被用于编程。封装代码的好处是每个人都知道怎么访问它,但 却不必考虑它的内部实现细节,也不必害怕使用不当会带来负面影响。

  Java封装的基本单元是类。尽管类将在以后章节详细介绍。现在仍有必要对它作一下简单的讨论。一个类(class)定义了将被一个对象集共享的结构和行为(数据和代码)。一个给定类的每个对象都包含这个类定义的行为和结构,好像它们是从同一个类的模子中铸造出来似的。因为这个原因,对象有时被看作是类的实例(instances of a class)。所以,类是一种逻辑结构,而对象是真正存在的物理实体。当创建一个类时,你要指定组成那个类的代码和数据。从总体上讲,这些元素都被称为该类的成员(members)。具体地说,类定义的数据称为成员变量(member variables)或实例变量(instance variables)。操作数据的代码称为成员方法(member methods )或简 称方法(methods )。如果你对C/C++熟悉,可以这样理解:Java程序员所称的方法,就是C/C++程序员所称的函数(function)。在完全用Java编写的程序中,方法定义如何使用成员变量。这意味着一个类的行为和接口是通过方法来定义的,类这些方法对它的实例数据进行操作。既然类的目的是封装复杂性,在类的内部就应该有隐藏实现复杂性机制。类中的每个方法或变量都可以被标记为私有(private )或公共(public )。 类的公共接口代表类的外部用户需要知道或可以知道的每件事情;私有方法和数据仅能被一个类的成员代码所访问,其他任何不是类的成员的代码都不能访问私有的 方法或变量。既然类的私有成员仅能被程序中的其他部分通过该类的公共方法访问,那么你就能保证不希望发生的事情就一定不会发生。当然,公共接口应该小心仔 细设计,不要过多暴露类的内部内容。



继承

  继承(Inheritance) 是一个对象获得另一个对象的属性的过程。继承很重要,因为它支持了按层分类的概念。如前面提到的,大多数知识都可以按层级(即从上到下)分类管理。例如, 尊贵的猎犬是狗类的一部分,狗又是哺乳动物类的一部分,哺乳动物类又是动物类的一部分。如果不使用层级的概念,我们就不得不分别定义每个动物的所有属性。 使用了继承,一个对象就只需定义使它在所属类中独一无二的属性即可,因为它可以从它的父类那儿继承所有的通用属性。所以,可以这样说,正是继承机制使一个 对象成为一个更具通用类的一个特定实例成为可能。下面让我们更具体地讨论这个过程。大多数人都认为世界是由对象组成的,而对象又是按动物、哺乳动物和狗这 样的层级结构相互联系的。如果你想以一个抽象的方式描述动物,那么你可以通过大小、智力及骨胳系统的类型等属性进行描述。动物也具有确定的行为,它们也需 要进食、呼吸,并且睡觉。这种对属性和行为的描述就是对动物类的定义。如果你想描述一个更具体的动物类,比如哺乳动物,它们会有更具体的属性,比如牙齿类 型、乳腺类型等。我们说哺乳类动物是动物的子类(subclass),而动物是哺乳动物的超类(superclass)。由于哺乳动物类是需要更加精确定义的动物,所以它可以从动物类继承所有的属性。一个深度继承的子类继承了类层级(class hierarchy)中它的每个祖先的所有属性。

  继承性与封装性相互作用。如果一个给定的类封装了一些属性,那么它的任何子类将具有同样的属性,而且还添加了子类自己特有的属性。这是面向对象的程序在复杂性上呈线性而非几何性增长的一个关键概念。新的子类继承它的所有祖先的所有属性。它不与系统中其余的多数代码产生无法预料的相互作用。

多态性

  多态性(Polymorphism,来自于希腊语,表示“多种形态”)是允许一个接口被多个同类动作使用的特性,具体使用哪个动作与应用场合有关,下面我们以一个后进先出型堆栈为例进行说明。假设你有一个程序,需要3种不同类型的堆栈。一个堆栈用于整数值,一个用于浮点数值,一个用于字符。尽管堆栈中存储的数据类型不同,但实现每个栈的算法是一样的。如果用一种非面向对象的语言,你就要创建3个不同的堆栈程序,每个程序一个名字。但是,如果使用Java,由于它具有多态性,你就可以创建一个通用的堆栈程序集,它们共享相同的名称。



多态性的概念经常被说成是“一个接口,多种方法”。这意味着可以为一组相关的动作设计一个通用的接口。多态性允许同一个接口被必于同一类的多个动作使用,这样就降低了程序的复杂性。选择应用于每一种情形的特定的动作(specific action) 即方法)是编译器的任务,程序员无需手工进行选择。你只需记住并且使用通用接口即可。再拿狗作比喻,一条狗的嗅觉是多态的。如果狗闻到猫的气味,它会在吠 叫并且追着它跑。如果狗闻到食物的气味,它将分泌唾液并向盛着食物的碗跑去。两种状况下是同一种嗅觉器官在工作,差别在于闻到了什么气味,也就是有两种不 同类型的数据作用于狗的鼻子!在一个Java程序中使用方法时,也可以采用这个通用的概念。

多态性、封装性与继承性相互作用

  如果用得当,在由多态性、封装性和继承性共同组成的编程环境中可以写出比面向过程模型环境更健壮、扩展性更好的程序。精心设计的类层级结构是重用你花时间和 努力改进并测试过的程序的基础,封装可以使你在不破坏依赖于类公共接口的代码基础上对程序进行升级迁移,多态性则有助于你编写清楚、易懂、易读、易修改的 程序。在前面两个与现实生活有关的实例中,汽车更能全面说明面向对象设计的优点,为介绍继承而用狗作类比也很有趣。总的来说,汽车与程序很相似,所有的驾 驶员依靠继承性很快便能掌握驾驶不同类型(子类)车辆的技术。不管是接送学生的校车,或是默西迪斯私家轿车,或是保时捷汽车,或是家庭汽车,司机差不多都 能找到方向盘、制动闸和加速器,并知道如何操作。经过一段驾驶,大多数人甚至能知道手动档与自动档之间的差别,因为他们从根本上理解这两个档的超类――传动。人们在汽车上看见的总是封装好的特性。刹车和踏脚板隐蔽着不可思议的复杂性,但接口却是如此简单,你的脚就可以操作它们!引擎、制动闸及轮胎的大小对于你如何定义踏脚板类的接口没有任何影响。



最后的属性,多态性,在汽车制造商基于相同的交通工具所提供的多种选择的能力上得到了充分反映。例如,刹车系统有正锁和反锁之分,方向盘有带助力或不带助力之分,引擎有4缸、6缸或8缸之分。无论设置如何,你都得脚踩刹车板来停车,转动方向盘来转向,按离合器来制动。同样的接口能被用来控制许多不同的实现过程。



正如你所看到的,通过封装、继承及多态性原理,各个独立部分组成了汽车这个对象。这在计算机程序设计中也是一样的。通过面向对象原则的使用,可以把程序的各个复杂部分组合成一个一致的、健壮的、可维护的程序整体。

分享到:
评论

相关推荐

    面向对象的三个基本特征和概念.doc

    面向对象的三个基本特征和概念.doc

    JavaScript面向对象三个基本特征实例详解【封装、继承与多态】

    本文实例讲述了JavaScript面向对象三个基本特征。分享给大家供大家参考,具体如下: 了解过面向对象的同学应该都知道,面向对象三个基本特征是:封装、继承、多态,但是对于这三个词具体可能不太了解。对于前端来讲...

    c++面向对象程序设计语言重点难点复习题及答案-整理.pdf

    C++语言支持面向对象编程的所有基本概念,并提供了一些独特的特点,例如: 3.1 构造函数和析构函数 * 构造函数(Constructor):是一种特殊的成员函数,用于初始化对象。 * 析构函数(Destructor):是一种特殊的...

    面向对象的分析和设计(教学大纲)

    1、讲解面向对象的基本概念、原理; 2、讲解面向对象方法的三种模型:对象模型、动态模型和功能模型; 3、介绍面向对象的过程分析,软件需求描述方法,以及对象模型、功能模型的建立方法等; 4、介绍面向对象遵循...

    Java面向对象程序设计(清华版)压缩卷3

    本书内容翔实全面,涵盖了从基本概念到高级主题(联网、多线程和反射等)等内容,并介绍了面向对象设计的实用知识。书中给出大量经过调试运行良好的实例,便于初学者入门,同时有助于提高读者解决实际问题的能力。...

    Java语言程序设计(第二版)\第04章 面向对象编程.ppt

    构成消息的三个要素是:接收消息的对象、接收消息后进行处理的方法、方法所需要的参数。 4. 类和对象 类是对象的软件图纸、模板或原型,它定义了同类对象共有的变量和方法。类和对象二者不太容易区分,经常不加...

    JAVA面向对象编程基础PPT教案学习.pptx

    JAVA面向对象编程基础PPT教案学习是面向对象编程(OOP)的入门教材,该教程旨在帮助学生理解面向对象编程的基本概念和原理。下面是该教程的知识点总结: 一、面向对象编程的基本概念 * 对象:是类的实例,能够在...

    开源面向对象数据库 db4o 之旅

    1.介绍了面向对象数据库 db4o 的基本特性,并且与传统关系型数据库以及 OR 映射技术做了比较分析,读者可以体验到 db4o 的全新的面向对象存储的理念,并且给出了性能测试数据。 2.介绍了面向对象数据库 db4o 的安装...

    C++面向对象程序设计——复习大纲.pdf

    本文档为C++面向对象程序设计的复习大纲,涵盖了面向对象编程的基本概念、标准名字空间、Const的使用、内联函数、函数重载、函数模板等多个方面的知识点。 一、面向对象编程的基本概念 面向对象是一种新的软件工程...

    UML面向对象设计与分析基础教程课件第三章

    UML面向对象设计与分析基础教程课件第三章 本章主要讲解了类图、对象图和包图的概念,用于描述系统的结构或静态特征。类图是面向对象系统建模中最常用和最基本的图之一,其他许多图,如状态图、协作图、组件图和...

    Java程序设计:第三章 面向对象程序设计.ppt

    封装性是面向对象程序设计的第三个基本特性。封装性使得类的成员域和方法被封装在类中,外部世界无法直接访问类的成员域和方法。关键字 abstract、static、final 和 this 是面向对象程序设计中常用的关键字。 接口...

    C++面向对象程序设计课件

    面向对象程序设计中的概念主要包括:对象、类、数据抽象、继承、动态绑定、数据封装、多态性、消息传递。通过这些概念面向对象的思想得到了具体的体现。 面向对象编程(Object Oriented Programming,OOP,面向对象...

    漫谈设计模式:从面向对象开始(带书签扫描版).刘济华.pdf

    本书主要从最基本的设计模式入手,并结合一些J2EE开发过程经常遇见的技术和概念,你将全面理解这10多个设计模式,并在开发过程中,让你真正体会和思考面向对象编程的思想,也只有掌握这些,你才会能成为一位真正的...

    Java面向对象程序设计(清华版)压缩卷1

    本书内容翔实全面,涵盖了从基本概念到高级主题(联网、多线程和反射等)等内容,并介绍了面向对象设计的实用知识。书中给出大量经过调试运行良好的实例,便于初学者入门,同时有助于提高读者解决实际问题的能力。...

    18春季北理工《面向对象程序设计》在线作业.doc

    本文档总结了面向对象程序设计的相关知识点,涵盖了面向对象编程的基本概念、对象生命期、构造函数、复制构造函数、函数重载、运算符重载、继承、多态、虚函数、静态成员、友元函数等方面。 1. 构造函数:构造函数...

    李爱华、程磊-面向对象程序设计课后答案(完整版.docx

    类和对象是面向对象程序设计的基本概念,例如`class box`声明了一个名为`box`的类。类中的成员变量和成员函数是类的组成部分,例如`int len1, len2, len3;`声明了三个整型成员变量,`long volumn() { return len1 * ...

    UML面向对象的系统分析与设计实验指导书

    本课程主要介绍系统原理的基本概念、系统开发过程RUP、对面向对象分析和面向对象设计的方法、对面向对象分析和设计的建模标准UML等内容。通过本课程的学习,学生掌握的知识、内容及掌握的程度要求为: 1. 使学生...

    PHP_面向对象教程(强力推荐)

    达到了软件工程的三个目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收 信息、处理数据和向其它对象发送信息。面向对象一直是软件开发领域内比较热门的话题,首先, 面向对象符合人类看待事物...

    Python 面向对象编程

    "Python 面向对象编程基础知识点" Python 面向对象编程是 Python 编程语言的基础,它具有独特的编程风格和语法规则。本文将从逻辑行和物理行、缩进、注释、main 函数、变量、表达式、语句、数据类型和运算等方面...

Global site tag (gtag.js) - Google Analytics