概述

什么是面向对象编程?#

在本章以前,我们在编程时都将程序看作是一系列函数的集合,通过调用函数来进行流程控制,或者直接对电脑下达指令,这种传统的编程范式被称为面向过程编程

面向对象程序设计(Object-oriented programming,OOP)是另一种具有对象(object)概念的编程范式,同时也是一种程序开发的抽象方针。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。对象指的是(class)的实例,它可能包含数据、属性、代码与方法。在面向对象程序编程里,计算机程序会被设计成彼此相关的对象。

面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,因此它们都可以被看作一个小型的“机器”,即对象。面向对象程序设计提高了程序的灵活性和可维护性,在大型项目设计中被广为应用。

用史书来类比程序设计的范式:面向过程程序设计就像是编年体史书,而面向对象程序设计则像是纪传体史书。前者按事情的发展过程叙述,后者围绕特定的主角来叙述。

示例#

问题

洗衣机里有脏衣服,怎么洗干净?

面向过程的解决方法#

  1. 执行加洗衣粉函数;
  2. 执行加水函数;
  3. 执行洗衣服函数;
  4. 执行清洗函数;
  5. 执行烘干函数。

面向对象的解决方法#

  1. 创建两个对象:“洗衣机”对象和“人”对象
  2. 为“洗衣机”对象加入属性和方法:“洗衣服”、“清洗”、“烘干”
  3. 为“人”对象加入属性和方法:“加洗衣粉”、“加水”
  4. 执行:
    • 人.加洗衣粉
    • 人.加水
    • 洗衣机.洗衣服
    • 洗衣机.清洗
    • 洗衣机.烘干

类和对象#

类(Class)
用来描述具有相同的属性和方法的对象的集合,是多个实例的工厂。它定义了该集合中每个对象所共有的属性和方法。
对象(Object)
通过类定义的数据结构实例,代表程序中具体的元素。对象包括两个数据成员(类变量和实例变量)和方法。
实例化
创建一个类的实例(类的具体对象)。

例如,整数可以看作是一个类,而 33 则可以被看作是一个对象。

再如,一只名字叫阿黄的小狗就可以看作是一个对象,它是类的一个实例。

面向对象程序设计类的定义和使用