第一章:面向对象概念简介

面向对象学习内容

  • 面向对象的工具:UML
  • 面向对象的语言:C++,Java 等
  • 面向对象的概念:独立于前两者,应当最先学习

面向对象的根本概念

  • 继承
  • 封装
  • 多态
  • 组合(composition)

面向过程 vs 面向对象

对象组成

  • 属性(attributes),即包含的数据
  • 行为(behaviors)

面向过程的编程中,数据和行为是分离的:

  • 数据是全局的,因此数据的读写是不可预测的。可能有几个程序同时操作相同的数据
  • 调试困难

合理设计的面向对象模型不应包含全局数据。

数据隐藏(data hiding):限制属性、方法的读写权限。

小而专的对象要优于大而全的对象。

对象和类

一个对象不应该直接操作其他对象的数据,应该通过 getter(accessor) 和 setter(mutator) 或其他的方法来操作。

类可以被认为是一种高级的数据类型。

消息(message):通过调用另一个对象的方法实现信息的传递,用于对象间的交流。

封装和数据隐藏

面向对象的一个主要优势就是不必公开所有属性和方法。

接口:定义对象间交流的方式。一般是公开类型的方法,而属性一般都是私有。类的实例化和功能的使用都应该通过接口。公开的接口越少越好。

实现:用户不应该看到内部的实现,而修改实现也不应该影响用户的使用。

继承

用于抽象出不同类之间的共同点,继承的长处是抽象和层级管理能力。

is-a 关系:子类 is-a 父类。例如,人 is-a 动物

多态

多态是面向对象的最大优势。

多态的本质就是子类继承父类中定义的相同接口,但是自己进行不同的实现

多态的实现:

  • 在子类中重写(override)父类中的方法
  • 父类的指针或引用指向子类的对象

组合

对象中包含对象。

和继承与一样,组合也提供了通过其他类来构建新类的方法。

has-a 关系:汽车 has-a 引擎

UML 类图

UML 类图中包含:

  • 类名称
  • 属性
  • 方法

UML 类图中:

  • + 表示 public
  • – 表示 private
  • # 表示 protected
  • 斜体的名称表示抽象类或抽象方法