站长 发表于 2025-9-17 03:55:30

C#编程反射与设计模式之面向对象技术应用总结

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

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

2.面向对象设计的目标
可扩展性(Extensibility)
系统可以很容易增加功能,而对原有系统影响非常小。

灵活性(Flexibility)
模块相对独立,通信尽可能少。这样当一个模块修改时,对别的模块影响很小。

可替换性(Pluggability)
当一部分不再满足需要时,可以将旧的部分用新的轻松替换。
系统 “ 在线升级 ” 功能就是很好的说明。

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

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

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

4.面向对象设计的常用原则
“开-闭”原则
约束对象如何对可变性封装问题。
一个软件系统应该对扩展开放,对修改关闭。
添加新功能时应该只是向代码集中添加新的代码,不应该修改原来的代码。

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

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

聚合复用原则
尽量使用组合/ 聚合、尽量不使用继承。
在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分。
新的对象通过向这些对象的委派达到复用这些对象的目的。

迪米特法则
耦合度问题:尽量“不要和陌生人说话”。
一个软件实体应当尽可能少的与其他实体发生相互作用。
初衷在于降低之间的耦合。由于每个类尽量减少对其他类的依赖,因此,很容易使得系统的功能模块功能独立,相互之间不存在(或很少有)依赖关系。

接口隔离原则
要求接口的职责要单一。
使用多个专门的接口比使用单一的总接口要好。也就是说,一个类对另一个类的依赖性应当是建立在最小的接口上。

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

5.面向对象设计目标与原则关系
可扩展性
系统可以很容易增加功能,而对原有系统影响非常小。
对应的原则:开/ 闭、里氏替换、依赖倒转、合成/ 聚合复用。

灵活性
模块相对独立,通信尽可能少,这样当一个模块修改时,对别的模块的影响很小。
对应原则:开/ 闭、迪米特法则、接口隔离。

可替换性
当一部分不再满足需要时,可以将旧的部分用新的替换。
对应原则:开/ 闭、里氏替换、依赖倒转、合成/ 聚合复用。


页: [1]
查看完整版本: C#编程反射与设计模式之面向对象技术应用总结