基础
一.面向对象程序设计的特点
1.封装(encapsulation)
- 属性私有:对外提供公有的getter/setter
- public:公有;private:私有;protected:受保护的
-
例如:树类(封装了它的价格,名字,给其提供了getter/setter,让其共有化)
。 封装
封装.png
。提供getter/setter
提供.png
2.继承(succession)
3.多态(polymorphic)
二.类之间的关系
1.纵向关系:比较清晰
- 继承:父子关系——extends
- 实现:类对接口的实现——implements
2.横向关系:取决于语义
-
依赖
。双方的地位往往是独立平等的(地位)
。 是偶尔的、临时性的、不频繁的(依赖程度)
代码层面的表现形式而言,往往是局部的变量
。类B以参数的形式传入类A的方法。
。类B以局部变量的形式存在于类A的方法中。
。类A调用类B的静态方法。 - 工人和出租车
-
关联
。双方的地位往往是独立的、平等的(地位)
。是长期的、稳定的、频繁的(依赖程度)
代码层面的表现形式而言,关联往往以全局属性的形式存在 - 程序员和电脑
-
聚合
。双方的地位不是平等的,是整体和部分之间的关系(地位)
是长期的、稳定的、频繁的,这种关系比关联更强,以至于在形式上出现了整体和部分之间的关系。整体和部分都有自己的生命周期,一方的消失另外一方不会跟着消失。(依赖程度)
。代码层面的表现形式而言可参考关联 - 公司和员工
-
组合
。双方的地位不是平等的,是整体和部分之间的关系(地位)
比聚合更强,部分的生命周期取决于整体,部分随着整体的消失而消失(依赖程度)
。代码层面的表现形式而言可参考关联
区分是聚合还是组合的核心点是在生命周期 - 小鸟和眼睛
网友评论