![fcf94c2e5a6c69c4d3f17544ed6063d6.png](https://img-blog.csdnimg.cn/img_convert/fcf94c2e5a6c69c4d3f17544ed6063d6.png)
结构化程序:算法+数据结构 = 程序
(即确定如何操作数据,再决定如何组织数据的结构)
面向对象程序设计(OOP):将数据放在第一位,再考虑操作数据的算法
1. 类
- 类(class)是构造对象的模板或蓝图,就好像一个制作某件工艺品的模具,对象就是工艺品
- 由类构造(construct)对象的过程称为创建类的实例(instance)
- 封装(encapsulation)将数据和行为组合在一个包中,对对象的使用者隐藏具体的实现方式,也称为数据隐藏
- 对象中的数据称为实例字段(instance field),操作数据的过程称为方法(method)
- 对象拥有的实例字段值的集合就是这个对象的当前状态(state)
- 程序只能通过对象的方法和对象数据进行交互,提高了重用性和可靠性
- 可以通过扩展一个类来构建新的类,这使得用户自定义类更加容易。在Java中,所有类都来自于一个超类,即Object。
- 通过扩展一个类来建立一个新的类的过程就是继承(inheritance),新类具有被扩展的类的全部属性和方法,可以自定义新的属性和方法。
2. 对象
对象的3个特性
- 行为(behavior)——可以对对象完成的操作(应用的方法)
- 状态(state)——描述当前状况的信息,状态的改变必须通过调用方法实现
- 标识(identity)——每个对象有唯一的标识来区分(如两个订单的编号肯定不相同)
3. 识别类
编写程序从识别类开始,然后为各个类添加方法。
一个简单的方法是在分析问题的过程中寻找名词——类,寻找动词——方法
例如我们有商品,订单,账户这样的名词作为类,即Item,Order,Account
那么在账户这个类中,就可以有增加账户,修改账户等方法。
4. 类之间的关系
类之间最常见的关系有:
- 依赖("uses-a")
- 聚合 (”has-a“)
- 继承("is-a")
4.1 依赖(dependence)
如果一个类的方法使用或操纵另一个类的对象,我们就可以说一个类依赖于另一个类
比如Order对象访问Account对象查看信用状态,这就是一个使用("uses-a")的关系。
(尽可能减少相互依赖的类,做到低耦合)
4.2 聚合(aggregation)
类A的对象包含("has-a")类B的对象
如一个Order对象就包含了一些Item对象
4.3 继承(inheritance)
一个更特殊的类与一个更一般的类之间的关系
也就是前面提到的扩展,比如现在我们定义一个加急订单RushOrder类,
那么它是一个("is-a")Order类
也就是有Order类继承而来。
下图展示了上述的三种关系。
![1fb8757988ecf93d85707c7abcf8e722.png](https://img-blog.csdnimg.cn/img_convert/1fb8757988ecf93d85707c7abcf8e722.png)
参考:
- 《Java核心技术 卷I 基础知识》(原书第11版)