zoukankan      html  css  js  c++  java
  • 感性的面向对象

    规则
    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编译发生于运行时,
    因此不存在完全在编译期建立的关联关系。)
    动态绑定在运行期通过检查虚拟方法表来确定动态关联覆写的方法,一般以继承和虚方法来实现。

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

  • 相关阅读:
    五分钟,让你明白MySQL是怎么选择索引《死磕MySQL系列 六》 咔咔
    MySQL统计总数就用count(*),别花里胡哨的《死磕MySQL系列 十》 咔咔
    C++类型转换:const_cast 和reinterpret_cast
    C++类型转换
    C++中*和&的用法
    CMake简介
    文件和流IO
    字节存储:大端字节和小端字节
    离线的Window 10无法安装.Net Framework 3.5的解决办法
    KeyTool 使用简介
  • 原文地址:https://www.cnblogs.com/Aspvn/p/9707721.html
Copyright © 2011-2022 走看看