OOP 概述

面向对象程序设计基于四个基本概念:数据抽象、封装、继承和动态绑定。

类的基本思想是数据抽象和封装。

1 数据抽象

数据抽象是一种依赖于接口和实现分离的编程技术。类的接口包括用户所能执行的操作;类的实现则包括类的数据成员、负责接口实现的函数体以及定义类所需的各种私有函数。

2 封装

封装实现了类的接口和实现的分离。封装后的类隐藏了它的实现细节,也就是说,类的用户只能使用接口而无法访问实现部分。

3 继承

通过继承联系在一起的类构成一种层次关系。通常在层次关系的根部有一个基类,其他类则是直接或间接地从基类继承而来,这些继承得到的类称为派生类。基类负责定义在层次关系中所有类共同拥有的成员,而每个派生类定义各自特有的成员。

4 多态

多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。

实现多态,有二种方式,覆盖,重载。

覆盖,是指子类重新定义父类的虚函数的做法。

重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。

其实,重载的概念并不属于“面向对象编程”,重载的实现是:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数(至少对于编译器来说是这样的)。如,有两个同名函数:function func(p:integer):integer;和function func(p:string):integer;。那么编译器做过修饰后的函数名称可能是这样的:int_func、str_func。对于这两个函数的调用,在编译器间就已经确定了,是静态的(记住:是静态)。也就是说,它们的地址在编译期就绑定了(早绑定),因此,重载和多态无关!真正和多态相关的是“覆盖”。当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态(记住:是动态!)的调用属于子类的该函数,这样的函数调用在编译期间是无法确定的(调用的子类的虚函数的地址无法给出)。因此,这样的函数地址是在运行期绑定的(晚邦定)。结论就是:重载只是一种语言特性,与多态无关,与面向对象也无关!引用一句Bruce Eckel的话:“不要犯傻,如果它不是晚邦定,它就不是多态。”

那么,多态的作用是什么呢?

我们知道,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。

时间: 2024-11-05 03:03:02

OOP 概述的相关文章

JavaScript之基础-15 JavaScript OOP(概述、对象模板)

一.JavaScript OOP 概述 OOP 概述 - 面向对象的语言 - 封装 - 把相关的信息(无论数据或方法)存储在对象中 - 继承 - 从其它对象获得属性和方法 - 多态 - 能以多种不同的形式运行函数或方法 - ECMAScript支持这些要求,因此可被是看做面向对象的 封装 - 回顾直接量创建对象 - 使用new调用Object构造函数创建对象语法 继承 - 对象方法 - toString() - toLocaleString() - valueOf() 二.JavaScript

C#拾遗之类的OOP特性

OOP概述 OOP不仅是一项具体的软件开发技术,而且是一整套关于如何看待软件系统与现实世界关系,以何种观点来研究问题并进行求解以及如何进行系统构造的软件方法学. OOP方法的出现弥补了传统方法的不足,首先着眼于实际问题中所涉及的对象,包括各种客观实体及事件等,为解决问题设计所需的,各种对象以及对象的属性,必要的操作和各个对象之间的关系,从而构建出对象的结构和为解决问题需要执行的事件序列(俗称脚本).通过各个对象之间的消息连接,建立所需的功能. OOP方法中类的定义充分体现了抽象数据类型的思想,基

C++的那些事:面向对象

1 OOP概述 面向对象基于三个基本概念:数据抽象.继承和动态绑定.通过使用数据抽象,我们可以将类的接口与实现分离:使用继承,可以定义相似的类型并对其相似关系建模:使用动态绑定,可以在一定程度上忽略相似类型的区别,而以统一的方式使用它们的对象. 1.1 继承 继承是派生类与基类之间的关系,它们共享了一些公共的东西,而派生类特化了一些本质不同的东西.类与类之间的继承关系构成了继承层次.在C++中,基类必须指定希望派生类重定义哪些函数,定义为virtual的函数是基类期待派生类重新定义的,需要在派生

js之JavaScript 面向对象介绍 ----谷营中西软件科技园

1. 面向对象介绍 1.1. 对象 在面向对象思想中,一切皆对象.所谓的对象,实质上是指"事物"(包括人和物)在程序设计 语言中的表现形式.这里的"事物"可以是任何东西.例如,我们将一名女生作为对象的话,那么她 可能是一名美丽的.高挑的.可爱的等等,这些形容这名女生的词,我们就叫做属性.那么她可能要 上学.工作.出国等等,这些女生要做的事情,我们就叫做方法. 所以,简单来说对象,可以这样描述.我们将世界上任何的人和物都理解成对象,用来描述对象 的特征叫做属性,用来描

CH15 面向对象程序设计

面向对象程序设计是基于三个基本概念的:数据抽象.继承和多态. 第7章介绍了数据抽象的知识,简单来说,C++通过定义自己的数据类型来实现数据抽象. 数据抽象是一种依赖于接口和实现分离的编程技术:类的设计者必须关心类是如何实现的,但使用该类的程序员不必了解这些细节. 封装是一项将低层次的元素组合起来形成新的.高层次实体的技术!函数和类都是封装的具体形式.其中类代表若干成员的聚集.大多数(设计良好的)类类型隐藏了实现该类型的成员. 一个简单的PersonInfo类,包含类成员.成员函数.构造函数 1

C++ Primer笔记14_面向对象程序设计

OOP概述 面向对象程序设计(object-oriented programming)的核心思想是数据抽象.继承和动态绑定. 1.继承: 类的一种层次关系,通常在层次关系的根部有一个基类,其他类则直接或间接的继承基类而来.这些继承而来的类称为派生类. 基类希望它的派生类自定义适合自身的版本的函数,基类就将函数声明为虚函数,加上virtual关键字. 2.动态绑定: 通过动态绑定,可以使用同一段代码处理基类和子类对象. 在C++中,当我们使用基类的引用或指针调用一个虚函数时会发生动态绑定.有虚函数

Java核心技术(三) —— 对象与类(1)

本文将对Java程序设计的对象和类进行深入详细介绍,主要涉及以下内容: - 面向对象程序设计 - 如何创建标准Java类库中的类对象 - 如何编写自己的类 1.OOP概述 面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分.在OOP中,不必关心对象的具体实现,只要能够满足用户的需求即可. OOP中,数据是第一位的,然后再考虑操作数据的算法. 1.1 类 类是构造对象的模板或蓝图,可以将类想象成制作小甜饼的切割机,将对象想象成小甜饼.由类构造对象的过程称为创建类的实

《C++ Primer》读书笔记

第一章 开始 类型:程序所处理的数据都保存在变量中,而每个变量都有自己的类型 内置类型:语言自身定义的类型(而形如string等类型都是标准库定义的) main的返回值:0表示成功,非0指出错误类型 从命令行运行编译器 for语句 术语表:缓冲区.cerr.clog.表达式 第一部分 C++基础 第二章 变量和基本类型 几种字符类型:char .wchar_t .char16_t .char32_t 内置类型的机器实现:内置类型如何在内存存放 将负数转换为无符号类型:结果为无符号数的模加上这个负

【C++ Primer 第十五章】 面向对象程序设计

OOP:概述 继承:通过继承联系在一起的类构成一种层次关系,通常在层次关系的根部有一个基类,其他类则直接或间接从基类继承而来,这些继承得到的类称派生类,基类负责定义层次关系中所有类共同拥有的成员,而每个派生类定义各自特有的成员. 虚函数:在C++语言中,基类讲类型相关的函数与派生类不做直接继承的函数关系区分对待,对于某些函数,基类希望它的派生类各自定义适合自己的版本,此时基类将这些函数声明称虚函数.基类: 1 class Quote 2 { 3 public: 4 std::string isb