面向对象学习内容
- 面向对象的工具: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
- 斜体的名称表示抽象类或抽象方法