面向对象程序设计

高级编程语言的发展经历了“面向过程”的结构化程序设计和“面向对象”程序设计两个阶段,而“面向对象”程序设计是当今的主流。

面向过程(Procedure Oriented)

20世纪70年代中期以前,传统的结构化程序设计是主流,其核心思想是通过设计多个相对独立的过程,通过一系列的过程调用来解决问题(即面向过程编程),这里的过程也被称为算法、函数、子程序。

面向过程(Procedure Oriented)是一种以过程为中心的编程思想,即分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

面向过程程序设计的主要问题是,它不强调数据的存储结构和访问方式,对于过程/函数的组织也仅仅停留在一个层次上 —— 无论函数/过程数量有多少、函数/过程之间功能相关与否,均不进行分类组织和管理,永远由 main() 函数直接或间接调用。这样的话,就需要程序员直接设计和干预程序设计的所有细节,负担很重,且随着程序规模的不断增大更是举步维艰。

面向对象(Object Oriented)

面向对象程序设计技术最早出现在 20 世纪 80 年代初的 C++ 编程语言中,其核心思想是程序设计的模块化,将相关的数据和功能封装在一起,组成相对独立的代码模块。

面向对象(Object Oriented)是软件开发方法,一种编程范式。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。

面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。

面向对象程序设计强调数据的存储结构或方法的分类,分层次组织管理,这样程序员就只相当于一个装配工 —— 将多个相对独立的模块拼装到一起就完事了,而不必考虑每个模块内部的实现细节(这和我们生活中组装电脑类似,将主板模块、CPU模块、内存条模块、硬盘模块、键盘及显示器模块组装在一起,就变成了我们的电脑)。

面向对象的基本概念

对象的含义是指具体的某一个事物,即在现实生活中能够看得见摸得着的事物。在面向对象程序设计中,对象包含“数据”和“动作”,对象则是数据和动作的结合体。对象不仅能够进行操作,同时还能够及时记录下操作结果。

方法(Method)

方法是指对象能够进行的操作,方法同时还可以称为“函数”。方法是类中的定义的函数,其具体的作用就是对对象进行描述操作。

继承(Extend)

继承简单地说就是一种层次模型,这种层次模型能够被重用。层次结构的上层具有通用性,但是下层结构则具有特殊性。

继承是从一般演绎到特殊的过程,可以减少知识表示的冗余内容,知识库的维护和修正都非常方便。更有利于衍生复杂的系统。

在继承的过程中类则可以从最顶层的部分继承一些方法和变量,类除了可以继承以外同时还能够进行修改或者添加。通过这样的方式能够有效提高工作效率。

例如:当类 X 继承了类 Y 后,此时的类 X 则是一个派生类,而类 Y 属于一个基类。

类(Class)

类是具有相同特性(数据元素)和行为(功能)的对象的抽象。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型。

类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。

类映射的每一个对象都具有这些数据和操作方法,类的继承具有层次性和结构性,高层次对象封装复杂行为,具体细节对该层次保持透明,可以减小问题的复杂度。

封装

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

防止了程序相互依赖性而带来的变动影响,面向对象的封装比传统语言的封装更为清晰、更为有力。有效实现了两个目标:对数据和行为的包装和信息隐藏。

多态

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

动态绑定

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

面向对象的特征

对象唯一性

每个对象都有自身唯一的标识,通过这种标识,可找到相应的对象。在对象的整个生命期中,它的标识都不改变,不同的对象不能有相同的标识。

抽象性

抽象性是指将具有一致的数据结构(属性)和行为(操作)的对象抽象成类。一个类就是这样一种抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划分都是主观的,但必须与具体的应用有关。

继承性

继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。

继承性是面向对象程序设计语言不同于其它语言的最重要的特点,是其他语言所没有的。

在类层次中,子类只继承一个父类的数据结构和方法,则称为单重继承。

在类层次中,子类继承了多个父类的数据结构和方法,则称为多重继承。

多重继承,JAVA、VB、NET、Objective-C 均仅支持单继承,注意在 C++ 多重继承时,需小心二义性。

在软件开发中,类的继承性使所建立的软件具有开放性、可扩充性,这是信息组织与分类的行之有效的方法,它简化了对象、类的创建工作量,增加了代码的可重用性。

采用继承性,提供了类的规范的等级结构。通过类的继承关系,使公共的特性能够共享,提高了软件的重用性。

多态性

多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。

多态性允许每个对象以适合自身的方式去响应共同的消息。

多态性增强了软件的灵活性和重用性。


说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号