面向对象的编程概述

相信很多程序猿,特别是新手,对面向对象都用过而且可能用的还很熟,却没有去深入理解过,别人一问才发现,入门便是不熟。

说起 面向对象,不得不提的就是面向过程。大家应该都清楚,面向过程是具体化的,流程化的,解决一个问题,你需要一步一步的分析(变量),一步一步的实现(方法),这就是面向过程的设计。那什么是面向对象?其实,面向对象是模型化的,你只需抽象出一个类,这是一个封闭的盒子,在这里你拥有数据也拥有解决问题的方法。

话不多说,本文让我们来看看究竟什么是面向对象???

什么是面向对象的语言

面向对象语言(Object-Oriented Language)是一类以对象作为程序结构基本单位的程序设计语言,用于描述的设计是以对象为核心,并且对象是程序运行时刻的基本成分。

而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。

面向对象语言很多,如一直高居世界编程语言排行榜的 Java、Python、C++、C#、PHP 等等。


面向对象的理解

什么是对象?记住!一切皆是类,一切皆是对象。

实体、类以及对象

先来认识一下面向对象中的基本概念:

–> 什么是对象?

对象是现实世界中某一具体实体在计算机逻辑中的抽象,具有一组属性(也称为状态及行为)。

–> 什么是类?

具有相同特征的对象的集合,是一种抽象数据类型。属于某类的某一个对象,称为类的一次实例化的结果。

–> 对象属性(状态及行为)的理解

1)对象的状态:

对象的状态也称为对象的静态属性,是指对象内部包含的各种信息,也就是变量。

2)对象的行为:

对象的行为也称为对象的动态属性,也指方法,用来设置或改变对象的状态(完成一定的功能)。


给一个实例

一切都是对象 ~~~~

一切都是对象。

举一个例子:

我们用于设计的描述(实际问题)是房子,可以抽象出一个房子类 【House:Class】,故可以将一栋房子看作是房子类 【House:Class】的一次实例化结果:【HouseA:Object】。

后面我们将基于这个实例描述面向对象的四大特性:抽象、封装、继承以及多态性。

不要疑惑,就是四大特性,其实抽象性是面向对象的基本特性,也应该被包含在内。


面向对象的特性

这一部分我们来看面向对象的四大特性抽象、封装、继承以及多态性的理解:

抽象性

从对象定义来看面向对象的抽象性,对象就是现实某一具体实体在计算机逻辑中的抽象 。

在上面的实例中,我们从实际问题中抽象出了房子类 【House:Class】 以及具体的房子对象 【HouseA:Object】。


封装性

封装就是将各个独立功能设计成一个个独立的单元,尽可能的隐藏内部细节,只保留必要的对外接口,与外部联系。

高内聚,低耦合。通过封装可以减小耦合,提高内聚,避免牵一发而动全身,方便对程序的修改。

–> 实例说明

对于【HouseA:Object】,房子空间很大,但如果男男女女有十几人住,而且就一间屋子的话,很不方便,并且吃喝拉撒都一个屋,那就成难民营。

–> 这样,就要想法解决:

工人们出动了,把房子折腾折腾给分成楼上楼下两层,并说明了,一楼吃喝玩乐、二楼休息; 楼上楼下工人们又分别给隔离出几个房间,分别规划修建厨房、卫生间、卧室、娱乐室等等,这样就把房子这样改造好了。然后男男女女们过来了,大家就可以各自的房间,做爱做的事,而且不会影响到其他了。

–> 这样一个简单的封装就完成

【House:Class】 是对部分类 【房子两层:Partialclass】 的封装;而 【房子两层:Partialclass】 是对 【房间:函数/方法-function】 的封装。


继承性

继承发生在两个对象之间,是特殊类对象具有一般类对象全部的属性和行为。可以提高软件的开发效率,对软件复用有很大的意义。

–> 继续来看房子

工人们已经给分好楼层、并且根据不同的功能做好了房间。这时屋主觉得,不行啊,得有个地下室来放杂物啊。工人一听,好尼玛房子都折腾的差不多了,又要搞一个地下室,不好搞啊。

屋主发话了,要搞必须搞,不好搞也要搞,而且狠狠的搞。工人们就为难了,难道再去给盖一栋有避难所的房子?

大家集思广益最终,房子其他都还用着,再给挖个地下室就行了,于是新房子诞生了。

–> 一个简单的继承就出现了

【房子:基类-baseclass】 被 【新房子:扩展类-ExtensionClass】 继承。


多态性

多态是同一消息可以根据发送对象的不同产生多种不同的行为方式,可以说是封装的一个实现。实现多态的方法有:方法重写(覆盖)、方法重载以及接口等。

–> 仍然是房子

房子已经成型,要对房间进行装修了。工人想法很简单,都按照一种样式来,简单方便快捷。屋主不乐意了,有要在承重墙上开扇窗户的,有要在卫生间装摄像头的、要在厨房里装空调的….工人们安装要求对能实现的就开始开工了,对房子的窗户、地板、墙、楼梯等进行装修。

–> “一种多态的展现” 就出来了

【房子:类-class】 通过 【窗户、地板、墙、楼梯等:属性-Property】 体现多态。


面向对象和面向过程的比较

事实上,面向对象更符合人类的思维,面向过程则是机器的思想。

–> 面向过程:

优点:性能比面向对象好,因为类调用时需要实例化,开销比较大,比较消耗资源。

缺点:不易维护、不易复用、不易扩展。

–> 面向对象:

优点:易维护、易复用、易扩展。由于面向对象有封装、继承、多态性的特性,可以设计出高内聚,低耦合的系统,使系统更加灵活、更加易于维护 。

缺点:性能比面向过程差


面向对象的软件开发过程

  1. 面向对象分析(Object Oriented Analysis):OOA;
  2. 面向对象设计(Object Oriented Design):OOD;
  3. 面向对象实现(Object Oriented Programming):OOP,也就是面向对象的编程。

Author

Waldeinsamkeit

Posted on

2017-10-07

Updated on

2022-12-02

Licensed under

You need to set install_url to use ShareThis. Please set it in _config.yml.

Comments

You forgot to set the shortname for Disqus. Please set it in _config.yml.