面向对象与面向过程编程

从语言角度来讲:

C是面向过程编程;

C++一半是面向过程编程,一半是面向对象编程;

Java是面向对象编程。

一、什么是面向对象编程与面向过程编程?

面向过程(Procedure Oriented 简称 PO):是一种以过程为中心的编程思想,分析出解决问题的步骤,然后用函数把这些步骤一步一步实现。面向过程编程,数据和对数据的操作是分离的。

面向对象(Object Oriented 简称 OO):面向对象会把事物抽象成对象的概念,先抽象出对象,然后给对象赋一些属性和方法,然后让每个对象去执行自己的方法。面向对象编程,数据和对数据的操作是绑定在一起的。

举例说明:

1. 洗衣服

面向过程:

放衣服(方法)-->加洗衣粉(方法)--> 加水(方法)--> 漂洗(方法)--> 清洗(方法)--> 甩干(方法)

面向对象:

new 出两个对象 ”人“ 和 ”洗衣机“

”人“ 加入属性和方法:放衣服(方法)、加洗衣粉(方法)、加水(方法)

”洗衣机“ 加入属性和方法:漂洗(方法)、清洗(方法)、甩干(方法)

然后执行:

人.放衣服(方法)-> 人.加洗衣粉(方法)-> 人.加水(方法)-> 洗衣机.漂洗(方法)-> 洗衣机.清洗(方法)-> 洗衣机.甩干(方法
 

2. 求一个长方形的周长和面积


面向过程的程序设计方式:
1、确定长方形周长和面积的算法。
2、编写两个方法(函数)分别计算长方形的周长和面积。
3、求周长的方法(函数)和求面积的方法(函数)需要两个参数,分别是长方形的长和宽。

面向对象的程序设计方式:
1、一个长方形可以看成一个长方形对象。
2、一个长方形对象有两个状态(长和宽)和两个行为(求周长和求面积)。
3、将所有长方形的共性抽取出来,设计一个长方形类。
4、通过长方形对象的行为,就可以求出某个具体的长方形对象的周长和面积。
 

二、面向过程与面向对象的优缺点

面向过程:

优点:效率高,因为不需要实例化对象。

缺点:耦合度高,扩展性差,不易维护(例如:每个步骤都要有,不然就不行)

面向对象:

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

缺点:效率比面向过程低。
 

三、面向对象编程:类与对象的关系

对象
对象是由数据(描述事物的属性)和作用于数据的操作(体现事物的行为)组成的封装体,描述客观事物的一个实体,是构成系统的基本单元。


类可以看作是C语言里面结构体(struct)的升级版,在C语言结构体中只能定义变量,在C++中,类不仅可以定义变量,也可以定义函数。 

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

类与对象的区别:

1)类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。

2)类是一组具有相同属性和行为的对象的抽象。我们可以将类看做是创建对象蓝图,对象根据这个蓝图去具体实现某个东西。

举例说明:

晴雨伞和剑伞具有一些共同的属性:遮阳、遮雨等。伞是对晴雨伞和剑伞的一种抽象,晴雨伞和剑伞是伞这个类的两种具体实现。

所以,类的实例化结果就是对象,而对一类对象的抽象就是类,类描述了一组有相同属性和相同方法的对象。

在这里插入图片描述

三、面向对象编程的特性

面向对象编程的三大特性为:封装、继承、多态

其中,封装和继承是为了代码重用,多态是为了接口重用。

封装(encapsulation)

将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来 和对象进行交互。封装本质上是一种管理,让用户更方便使用类。

在这里插入图片描述

举例:

对于电脑这样一个复杂的设备,提供给用户的就只有开关机键、通过键盘输入,显示器,USB插孔等,让用户和计算机进行交互,完成日常事务。但实际上电脑真正工作的却是CPU、显卡、内存等一些硬件元件。对于计算机使用者而言,不用关心内部核心部件,比如主板上线路是如何布局的,CPU内部是如何设计的等,用户只需要知道,怎么开机、怎么通过键盘和鼠标与计算机进行交互即可。因此计算机厂商在出厂时,在外部套上壳子,将内部实现细节隐藏起来,仅仅对外提供开关机、鼠标以及键盘插孔等,让用户可以与计算机进行交互即可

C++实现封装的方式:用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用。

类的封装性为类的成员提供公有(public)、缺省(默认default)、保护(protected)和私有(private)等访问权限,目的是隐藏类中的私有变量和类中方法的实现细节。

  • public : 对所有类可见。使用对象:类、接口、变量、方法
  • protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。
  • default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
  • private : 在同一类里可见。使用对象:变量、方法。 注意:不能修饰类(外部类)

class的默认访问权限为privatestructpublic(因为struct要兼容C语言)

通过以下表来说明访问权限:

具体实现:

–属性使用private权限
–方法使用public权限 

继承

允许通过继承原有类的某些特性或全部特性而产生全新的类,原有的类称为父类,产生的新类称为子类。子类不仅可以直接继承父类的共性,而且也可以创建它特有的个性。

多态性

概念:同一种事物,在不同时刻表现不同的状态。是指在基类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同行为,多态性有两种表现形式:重载和覆盖,多态最大的特征就是向上造型。

多态存在的三个必要条件

  1. 要有继承(包括接口的实现)(前提条件)
  2. 要有重写(前提条件)
  3. 父类引用指向子类对象

猜你喜欢

转载自blog.csdn.net/MWooooo/article/details/129005065
今日推荐