感性的面向对象

规则
1.密封类不可以被继承。
2.继承关系中,我们更多的是关注其共性而不是特性,因为共性是层次复用的基础,
而特性是系统扩展的基点。
3.实现单继承,接口多继承。
4.从宏观来看,继承多关注于共通性;而多态着眼于差异性。
5.继承的层次应该有所控制,否则类型之间的关系维护会消耗更多的精力。
6.面向对象的基本原则:多聚合,少继承;低耦合,高内聚。

继承:类与类之间的关系。
总结:所有的类型都最终继承自共同的根System.Object类。一切皆为对象,一切皆于继承。
例子:

定义一个Bird类和一个Chicken类,调用时Bird b = new Chicken();
b.type 值是"Bird",而b.showtype的值是 "Type is Chicken"
这时使用new 隐藏了基类实现,也就是创建了一个同名的另一个方法,在编译中这两个方法处于
动态方法表的不同地址位置,父类方法排在前面,子类方法排在后面(调用时,先父类再子类);
实现继承(通常表现为对抽象类的继承)和接口继承:
(1)抽象类适合于有族层概念的类间关系,而接口最适合为不同的类提供通用功能。
(2)接口着重于CAN-DO关系类型,而抽象类则偏重于IS-A式的关系。
(3)接口多定义对象的行为;抽象类多定义对象的属性。
(4)版本问题时使用抽象类来实现。
(5)因为值类型是密封的,所以只能实现接口,而不能继承类。
类的模式以继承方式来实现,
对象的模式以聚合方式完成。
继承:class1 ->class2,耦合度高(一个更改对另一个影响程度高)。
聚合:聚合关系是一种(HAS-A式)的关系,耦合度没有继承关系高。
(1)class1 - class2(无聚合)
(2)class1 -+ class2(共享,class1共享给class2,class1更改影响class2,反之,不影响)
(3)class1 -= class2(复合,即都共享)

封装:隐藏了类内部的具体实现细节,对外则提供统一访问接口,来操作内部数据成员。
结论:封装就是一个包装,将包装的内外分为两个空间,对内实现数据私有,对外实现方法调用,
保证了数据的完整性和安全性。
使用IL反编译器(ildasm)查看字段,属性和方法
可以通过属性get和set访问器来实现其读写控制(可以在set里写判断,以达到控制输入的作用)。

多态:提供了对同一个类对象的差异化处理方式,实现了对变化和共性的有效封装和继承,
体现了“一个接口,多种方法”的思想,使方法抽象机制成为可能。(继承和重载是多态的实现基础)
多态:分为四类:强制的,重载的,参数的和包含的。
包含的多态:
(1)基类继承式多态:关键是继承体系的设计与实现。
Files myFile = new WORDFile();
myFile.Open();
(2)接口实现式多态:通过实现接口的方法约定形成继承体系。
IFileOpen myFile = new WORDFile();
myFile.Open();
多态的运行机制:.Net的动态绑定机制成就了面向对象的多态特性。
动态绑定,又叫晚期绑定,是区别与静态绑定而言的。
静态绑定在编译期就可以确定关联,一般是以方法重载来实现的;
(所有的.NET源文件都首先被编译成IL代码和元数据,在方法执行时,
IL代码才被JIT编译器即时转换为本地CPU指令。JIT编译发生于运行时,
因此不存在完全在编译期建立的关联关系。)
动态绑定在运行期通过检查虚拟方法表来确定动态关联覆写的方法,一般以继承和虚方法来实现。

面向对象人性化的提升了代码的安全性,可操作性,使得所有的代码都有规律可循。

 

posted @ 2018-09-26 16:27  清仙童  阅读(152)  评论(0编辑  收藏  举报