面向对象概念理解
面向对象以对象为中心,以类和继承为构造机制,充分利用接口和多态提供灵活性,来认识、理解、分析客户实际需求、最后按照面向对象的方法、原则来编写程序,实现软件功能。

面向对象的特征总结
抽象:先不考虑细节,降低系统复杂性
封装:隐藏内部实现,保证系统安全性
继承:复用现有代码,减少代码重复性
多态:改变对象行为,实现功能多样性

面向对象设计的目标
1.可扩展性(Extensibility)
系统可以很容易增加功能,而原有影响非常小。
2.灵活性(Flexibility)
模块相对独立,通信尽可能减少。
这样修改一个模块时,对别的模块影响小
3.可替换性(Pluggability)
当一部分不在满足需求时,可以将旧的部分用新的轻松代替
系统“在线升级”功能就是很好的说明

面向对象设计的总体原则
1.针对接口编程,而不是针对实现编程。
客户无需知道使用对象的特定类型
只需知道对象拥有客户所期望的缺口。

2.优先使用对象组合,而不是类继承
一个含有其他对象的类称为组合类,比如我们使用的扩展实体。
继承在某种程度上破坏了封装性,子类父类耦合度高,父类修改后会影响左右的子类。
而对象组合只要求被组合对象具有良好定义的接口,耦合度底,一个类的修改对其他类影响非常小。

3.封装变化点
使用封装来创建对象之间的分界层的一侧进行修改,而不会对另一侧产生影响,从而实现层次之间的耦合,
同一个层如果某个接口不固定也可以通过多态封装变化点,简单工厂的使用就是一个典型的例子。

面向对象设计常用原则
“开-闭”原则(Open-Closed Principle,OCP)
约束对象对象如何对可变性封装问题。
一个系统应当对拓展开放,修改关闭
添加新功能时应当只是向代码集中添加新的代码,不应改修改原来的代码

2.里氏替换原则(Liskov Substitution Principle,LSP)
约束子类和父类如何替换的问题
要求子类可以无条件替换父类,比如多态的时候使用父类作为参数,但实际传递的是子类对象

3.依赖倒置原则(dependence inversion principle,DIP)
要求开发中针对接口编程(业务依赖接口而不是实现)
在进项业务设计时,应尽量在接口或抽象类中定义方法,并通过具体实现类(或子类)来实现业务方法,业务方法的修改不会影响到业务运行时的调用,比如抽象工厂IDAL和DAL之间的关系

4.聚合复用原则(Composite/Aggregete Reuse Principle或CARP)
尽量使用组合/聚合,尽量不适用继承
在一个新的对象中使用已有对象,使之称为新对象的一部分。
新的对象向这些对象委派达到复用这些对象的目的

5.迪米特原则(Law of Demeter ,Lod)
耦合度问题:尽量“不要和陌生人说话”
一个软件实体应当尽可能少的与其他实体发生相互作用。
初衷在于降低之间的耦合。由于每个类尽可能的降低其他类的依赖,因此,很容易使得系统功能模块功能独立,相互之间不存在(或很少)依赖关系
6.接口隔离原则(Interface Separate Principle,ISP)
职责单一 - 恰当划分配觉得和接口
使用很多专门的接口比使用单一接口要好。也就是说,一个类对另外一个类的依赖性应当建立在最小接口上。

其他原则:类的职责明确原则等