面向对象绪论
Guderian出品
面向对象的基本概念
- 类 Class
- 对象 Object
浅显理解:类是抽象的对象,对象是具体的类
概念之间的互用
- 属性 Attribute == 数据 Data == 状态 State == 信息 Information
- 操作 Operation == 方法 Method == 行为 Behavior == 职责 Responsibility
- 对象 Object == 实例 Instance
面向对象的核心特征
- 封装 Encapsulation
- 继承 Inheritance
- 多态 Polymorphism
封装、继承和多态被称为所谓的“面向对象三大特征”
- 聚合/组合 Aggregation / Composition
- 接口/实现 Interface / Implementation
- 抽象 Abstraction
封装 Encapsulation
是指隐藏对象的属性和实现细节,仅对外提供公共访问方式
- 封装什么?
- 内部的、不想让其他人随意了解的信息
- 类的属性 Attribute
- 类的方法 Method
- 为什么要封装?
- 保护隐私
- 保护数据安全
- 隔离复杂度
- 面向对象的封装有四种方式
- Public
- Private
- Protected
- Package
继承 Inheritance
一个类从其他类获得它的状态和行为,同时还可以加上自己额外的状态和行为
父类中的属性和方法,在子类中可以重复使用,子类就不需要再定义了,这样即可实现代码的可重用性。如以下类图例子,定义类C1Dobject
一维物体,它有一个属性x
对应x轴上的一个坐标,两个方法getx()
和setx(int)
分别表示x坐标的获取和设置。如果我们需要定义二维物体,就没有必要把x坐标重复定义。我们在类C1Dobject
的基础上派生出子类C2Dobject
,只需再定义属性y
和方法gety()
及sety(int)
就可以完整地抽象出一个二维物体;类似地,如果我们需要定义三维物体,没有必要把x坐标、y坐标重复定义,只需再类C2Dobject
的基础上派生出子类C3Dobject
,再定义属性z
和方法getz()
及setz(int)
即可。显而易见,继承提高了代码的可重用性,减少了创建类的工作量。
以上类图对应的C++
代码如下:
1 | class C1Dobject |