请输入您要查询的百科知识:

 

词条 面向对象程序设计
释义
1 一种计算机编程架构

面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。

理论历史

1967年挪威计算中心的Kisten Nygaard和Ole Johan Dahl开发了Simula67语言,它提供了比子程序更高一级的抽象和封装,引入了数据抽象和类的概念,它被认为是第一个面向对象语言。20世纪70年代初,Palo Alto研究中心的Alan Kay所在的研究小组开发出Smalltalk语言,之后又开发出Smalltalk-80,Smalltalk-80被认为是最纯正的面向对象语言,它对后来出现的面向对象语言,如Object-C,C++,Self,Eiffl都产生了深远的影响。随着面向对象语言的出现,面向对象程序设计也就应运而生且得到迅速发展。之后,面向对象不断向其他阶段渗透,1980年Grady Booch提出了面向对象设计的概念,之后面向对象分析开始。1985年,第一个商用面向对象数据库问世。1990年以来,面向对象分析、测试、度量和管理等研究都得到长足发展。

实际上,“对象”和“对象的属性”这样的概念可以追溯到20世纪50年代初,它们首先出现于关于人工智能的早期著作中。但是出现了面向对象语言之后,面向对象思想才得到了迅速的发展。过去的几十年中,程序设计语言对抽象机制的支持程度不断提高:从机器语言到汇编语言,到高级语言,直到面向对象语言。汇编语言出现后,程序员就避免了直接使用0-1,而是利用符号来表示机器指令,从而更方便地编写程序;当程序规模继续增长的时候,出现了Fortran、C、Pascal等高级语言,这些高级语言使得编写复杂的程序变得容易,程序员们可以更好地对付日益增加的复杂性。但是,如果软件系统达到一定规模,即使应用结构化程序设计方法,局势仍将变得不可控制。作为一种降低复杂性的工具,面向对象语言产生了,面向对象程序设计也随之产生。

基本概念

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

1)对象 对象是运行期的基本实体,它是一个封装了数据和操作这些数据的代码的逻辑实体。

2)类 类是具有相同类型的对象的抽象。一个对象所包含的所有数据和代码可以通过类来构造。

3)封装 封装是将数据和代码捆绑到一起,避免了外界的干扰和不确定性。对象的某些数据和代码可以是私有的,不能被外界访问,以此实现对数据和代码不同级别的访问权限。

4)继承 继承是让某个类型的对象获得另一个类型的对象的特征。通过继承可以实现代码的重用:从已存在的类派生出的一个新类将自动具有原来那个类的特性,同时,它还可以拥有自己的新特性。

5)多态 多态是指不同事物具有不同表现形式的能力。多态机制使具有不同内部结构的对象可以共享相同的外部接口,通过这种方式减少代码的复杂度。

6)动态绑定 绑定指的是将一个过程调用与相应代码链接起来的行为。动态绑定是指与给定的过程调用相关联的代码只有在运行期才可知的一种绑定,它是多态实现的具体形式。

7)消息传递 对象之间需要相互沟通,沟通的途径就是对象之间收发信息。消息内容包括接收消息的对象的标识,需要调用的函数的标识,以及必要的信息。消息传递的概念使得对现实世界的描述更容易。

8)方法 方法(Method)是定义一个类可以做的,但不一定会去做的事。

语言

一种语言要称为面向对象语言,必须支持面向对象几个主要的概念。根据支持程度的不同,通常所说的面向对象语言可以分成两类:基于对象的语言和面向对象的语言。

基于对象的语言

基于对象的语言仅支持类和对象,举例来说,Ada就是一个典型的基于对象的语言,因为它不支持继承、多态,此外其他基于对象的语言还有Alphard、CLU、Euclid、Modula。

面向对象的语言

面向对象的语言支持的概念包括:类与对象、继承、多态。

面向对象的语言中一部分是新发明的语言,如Smalltalk、Java,这些语言本身往往吸取了其他语言的精华,而又尽量剔除他们的不足,因此面向对象的特征特别明显,充满了蓬勃的生机;另外一些则是对现有的语言进行改造,增加面向对象的特征演化而来的。如由Pascal发展而来的Object Pascal,由C发展而来的Objective-C,C++ ,由Ada发展而来的Ada 95等,这些语言保留着对原有语言的兼容,并不是纯粹的面向对象语言,但由于其前身往往是有一定影响的语言,因此这些语言依然宝刀不老,在程序设计语言中占有十分重要的地位。

优点

面向对象出现以前,结构化程序设计是程序设计的主流,结构化程序设计又称为面向过程的程序设计。在面向过程程序设计中,问题被看作一系列需要完成的任务,函数(在此泛指例程、函数、过程)用于完成这些任务,解决问题的焦点集中于函数。其中函数是面向过程的,即它关注如何根据规定的条件完成指定的任务。

在多函数程序中,许多重要的数据被放置在全局数据区,这样它们可以被所有的函数访问。每个函数都可以具有它们自己的局部数据。

这种结构很容易造成全局数据在无意中被其他函数改动,因而程序的正确性不易保证。面向对象程序设计的出发点之一就是弥补面向过程程序设计中的一些缺点:对象是程序的基本元素,它将数据和操作紧密地连结在一起,并保护数据不会被外界的函数意外地改变。

比较面向对象程序设计和面向过程程序设计,还可以得到面向对象程序设计的其他优点:

1)数据抽象的概念可以在保持外部接口不变的情况下改变内部实现,从而减少甚至避免对外界的干扰;

2)通过继承大幅减少冗余的代码,并可以方便地扩展现有代码,提高编码效率,也减低了出错概率,降低软件维护的难度;

3)结合面向对象分析、面向对象设计,允许将问题域中的对象直接映射到程序中,减少软件开发过程中中间环节的转换过程;

4)通过对对象的辨别、划分可以将软件系统分割为若干相对为独立的部分,在一定程度上更便于控制软件复杂度;

5)以对象为中心的设计可以帮助开发人员从静态(属性)和动态(方法)两个方面把握问题,从而更好地实现系统;

6)通过对象的聚合、联合可以在保证封装与抽象的原则下实现对象在内在结构以及外在功能上的扩充,从而实现对象由低到高的升级。

设计方法

在数据输入模块内部设计中,采用面向对象的设计方法。[6]面向对象的基本概念如下:

对象:对象是要研究的任何事物。从一本书到一家图书馆,单的整数到整数列庞大的数据库、极其复杂的自动化工厂、航天飞机都可看作对象,它不仅能表示有形的实体,也能表示无形的(抽象的)规则、计划或事件。对象由数据(描述事物的属性)和作用于数据的操作(体现事物的行为)构成一独立整体。从程序设计者来看,对象是一个程序模块,从用户来看,对象为他们提供所希望的行为。在对内的操作通常称为方法。

类:类是对象的模板。即类是对一组有相同数据和相同操作的对象的定义,一个类所包含的方法和数据描述一组对象的共同属性和行为。类是在对象之上的抽象,对象则是类的具体化,是类的实例。类可有其子类,也可有其它类,形成类层次结构。

消息:消息是对象之间进行通信的一种规格说明。一般它由三部分组成:接收消息的对象、消息名及实际变元。

面向对象主要特征:

封装性:封装是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接受哪些消息,具有那些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。封装的目的在于把对象的设计者和对象者的使用分开,使用者不必知晓行为实现的细节,只须用设计者提供的消息来访问该对象。

继承性:继承性是子类自动共享父类之间数据和方法的机制。它由类的派生功能体现。一个类直接继承其它类的全部描述,同时可修改和扩充。继承具有传递性。继承分为单继承(一个子类只有一父类)和多重继承(一个类有多个父类)。类的对象是各自封闭的,如果没继承性机制,则类对象中数据、方法就会出现大量重复。继承不仅支持系统的可重用性,而且还促进系统的可扩充性。

多态性:对象根据所接收的消息而做出动作。同一消息为不同的对象接受时可产生完全不同的行动,这种现象称为多态性。利用多态性用户可发送一个通用的信息,而将所有的实现细节都留给接受消息的对象自行决定,如是,同一消息即可调用不同的方法。例如:Print消息被发送给一图或表时调用的打印方法与将同样的Print消息发送给一正文文件而调用的打印方法会完全不同。多态性的实现受到继承性的支持,利用类继承的层次关系,把具有通用功能的协议存放在类层次中尽可能高的地方,而将实现这一功能的不同方法置于较低层次,这样,在这些低层次上生成的对象就能给通用消息以不同的响应。在OOPL中可通过在派生类中重定义基类函数(定义为重载函数或虚函数)来实现多态性。

综上可知,在面对对象方法中,对象和传递消息分别表现事物及事物间相互联系的概念。类和继承是是适应人们一般思维方式的描述范式。方法是允许作用于该类对象上的各种操作。这种对象、类、消息和方法的程序设计范式的基本点在于对象的封装性和类的继承性。通过封装能将对象的定义和对象的实现分开,通过继承能体现类与类之间的关系,以及由此带来的动态联编和实体的多态性,从而构成了面向对象的基本特征。

面向对象设计是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,是建立在“对象”概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而每继承性是对具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。。按照Bjarne STroustRUP的说法,面向对象的编程范式:

l 决定你要的类;

2 给每个类提供完整的一组操作;

3 明确地使用继承来表现共同点。

由这个定义,我们可以看出:面向对象设计就是“根据需求决定所需的类、类的操作以及类之间关联的过程”。

特点

面向对象设计方法以对象为基础,利用特定的软件工具直接完成从对象客体的描述到软件结构之间的转换。这是面向对象设计方法最主要的特点和成就。面向对象设计方法的应用解决了传统结构化开发方法中客观世界描述工具与软件结构的不一致性问题,缩短了开发周期,解决了从分析和设计到软件模块结构之间多次转换映射的繁杂过程,是一种很有发展前途的系统开发方法。

但是同原型方法一样, 面向对象设计方法需要一定的软件基础支持才可以应用,另外在大型的MIS开发中如果不经自顶向下的整体划分,而是一开始就自底向上的采用面向对象设计方法开发系统,同样也会造成系统结构不合理、各部分关系失调等问题。所以面向对象设计方法和结构化方法目前仍是两种在系统开发领域相互依存的、不可替代的方法。

2 2010年清华大学出版社出版图书

书 名: 面向对象程序设计

作 者:董正言

出版社: 清华大学出版社

出版时间: 2010年8月1日

ISBN: 9787302227816

开本: 16开

定价: 29.50元

内容简介

《面向对象程序设计(C++版)》以面向对象程序设计技术的本质属性为主线,以C++语言为基础,全面地阐述了面向对象程序设计的基本原理。全书共分13章,前5章介绍C++语言的基本编程技术,包括C++的数据类型、常用的运算符、结构化控制语句和函数;第6章~第9章介绍面向对象程序设计方法的核心内容,包括类和对象、类的继承和多态;第10章介绍C++的程序结构、编译预处理指令和命名空间等内容;第11章介绍C++语言标准库中的输入/输出流类;第12章以C++语言为基础,介绍面向对象的异常处理机制;第13章简要介绍使用C++语言和面向对象的程序设计方法设计Windows应用程序的方法。

《面向对象程序设计(C++版)》语言简洁流畅,通俗易懂,内容全面,重点突出,对核心和重点内容都佐以大量的例证。

《面向对象程序设计(C++版)》既可以作为高等院校计算机科学与技术及相关专业“面向对象程序设计”课程的授课教材,也可以作为C++程序开发人员的参考书。

图书目录

第1章 绪论

第2章 基本数据类型和运算符

第3章 控制语句

第4章 复合数据类型

第5章 函数

第6章 类和对象(上)

第7章 类和对象(下)

3 2009年清华大学出版社出版图书

书名: 面向对象程序设计

作 者:许薇

出版社: 清华大学出版社

出版时间: 2009年09月

ISBN: 9787302202578

开本: 16开

定价: 19.00 元

内容简介

《面向对象程序设计(C++描述)》以C++语言为描述工具,描述了面向对象程序设计的主要思想和方法,并对其中的重要概念和机制做了详细论述及C++技术的实现。书中知识编排脉络清晰、主旨明确,用例简洁且针对性强,突出并实现了阅读环节对学习效果的价值。《面向对象程序设计(C++描述)》适合于具有结构化程序设计方法知识的读者使用,可作为计算机专业学生面向对象程序设计课程的教材,也可作为从事计算机软件开发人员的参考资料。

图书目录

第1章 C++基础知识

1.1 面向对象的程序设计语言

1.1.1 C++语言

1.1.2 Java语言

1.1.3 Visual Basic语言

1.2 变量

1.2.1 变量的定义方法

1.2.2 const修饰符

1.2.3 引用类型

1.3 函数

1.3.1 函数原型

1.3.2 内联函数

1.3.3 带默认参数的函数

1.3.4 函数的参数传递

1.3.5 函数重载

1.4 名字空间

1.5 动态内存分配

1.5.1 内存申请

1.5.2 内存释放

1.6 作用域

1.6.1 生存期

1.6.2 全局和局部变量

1.7 多文件结构

本章 小结

思考与练习

第2章 面向对象程序设计概述

2.1 面向对象程序设计的基本概念

2.1.1 面向对象方法的产生

2.1.2 面向对象方法的方法与结构

2.1.3 类和对象的概念

2.1.4 消息与事件的概念

2.2 面向对象程序设计的特点

2.2.1 抽象性

2.2.2 封装性

2.2.3 继承性

2.2.4 多态性

2.3 面向对象的软件开发

2.3.1 面向对象分析

2.3.2 面向对象设计

2.3.3 面向对象实现

2.3.4 面向对象测试

2.3.5 面向对象软件维护

本章 小结

思考与练习

……

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/1/29 7:14:39