面向对象(摘录)
以下是一些概念性的东西。。平时看到好的,觉得不错的就摘录下来。。
规则制胜
--密封类不可以被继承。
--继承关系中,我们更多的是关注其共性而不是特性,因为共性是层次复用的基础,而特性是系统扩展的基点。
--实现单继承,接口多继承。
--从宏观来看,继承多关注于共通性;而多态多着眼于差异性。
--继承的层次应该有所控制,否则类型之间的关系维护会消耗更多的精力。
--面向对象原则:多组合,少继承;低偶合,高内聚。
接口之规则
关于接口的规则,可以有以下的归纳:
--接口隔离原则强调接口应该被实现为具有单一功能的小接口,而不要实现为具有多个功能的胖接口,类对于类的依赖应建立在最小的接口之上。
--接口支持多继承,即可以作用于值类型,也可以作用于引用类型。
--禁止为已经发布的接口,添加新的成员,这意味着你必须重新修改所有实现了该接口的类型,在实际的应用中,这往往是不可能完成的事情。
--接口不能被实例化,没有构造函数,接口成员被隐式声明为Public。
--接口可以作用于值类型和引用类型,并且支持多继承
多态的规则和意义
--多态提供了对同一类对象的差异化处理方式,实现了对变化和共性的有效封闭和继承,体现了“一个接口,多种方法”的思想,使方法抽象机制成为可能。
--在.NET中,默认情况下方法是非虚的,以C#为例必须显示地通过virtual或者abstract标记为虚方法或者抽象方法,以便在子类中覆写父类方法。
--在面向对象的基本要素中,多态和继承,多太和重载存在紧密的联系,多态的基础是建立有效的继承体系,因此继承和重载是多态的实现基础。
封装规则
现在,我们对封装特性的规则做一个总结,这些规则就是在平常的实践中提炼与完善出来的良药,我们在进行实际的开发和设计工作时,应尽量遵守规则,而不是盲目的寻求方法。
--尽可能地调用类的访问器,而不是成员,即使在类的内部。
--内部私有部分可以任意更改,但是一定要在保证外部接口稳定的前提下。
--将对字段的读写控制实现为属性,而不是方法,否则舍近而求远,非明智之选。
--类封装是由访问权限来保证的,对内实现为private,对外实现为public。再结合继承特性,还要对protected,internal有较深的理解。
--封装的精华是封装变化。张逸《软件设计精要与模式》一书中指出,封装变化是面向对象思想的核心,他提到开发者应从设计角度和使用角度两方面来分析封装。因此,我们将系统中变化频繁的部分封装为独立的部分,这种隔离选择有得于充分的软件复用和系统柔性。
继承
--继承是可传递的,子类对父类的扩展,必须继承父类方法,同时可以添加新方法。
--子类可以调用父类方法和字段,而父类不能调用子类方法和字段。
--虚方法如何实现覆写操作,使得父类指针可以指向子类对象成员。
--new关键字在虚方法继承中的阻断作用。
总结:
通常而言,良好的设计必然是面向抽象的,接口是实现这一思想的完美手段之一。通过面向接口编程,保证了系统的职责清晰分离,实体与实体之间保持相对合适的偶合度,尤其是高层模块不再依赖于底层模块,而依赖比较稳定的抽象,使得低层的更改不会婆及到高层,实现了良好的设计架构。
透彻地了解接口,认识对接口编程,体会面向对象的设计原则,是培养一个良好设计习惯的开端