架构师训练营第 2 周学习总结
本周主要学习面向对象编程和框架设计的一些指导原则。
编程简史
史前时期:可编程织布机读取打孔纸带以编织图案,这也是最开始计算机采用打孔纸带作为指令输入最初的启发来源
远古时期:基于冯诺伊曼体系的ENIAC是真正意义的计算机开端,当时编程需要插拔电线以输入数据,实操意义上的机器编程
上古时期:汇编语言让人们可以用便于记忆的指令和占位符来编程,汇编程序做编译成机器指令和地址链接的操作,指令可以输入到打孔纸带。汇编程序编写者才算得上真正意义的程序员。
中古时期:面向过程的语言,使用更解决人类语言的方式解决问题,引入循环、条件、子程序等几乎所有现代语言都有的特性
近代:面向对象语言,解决面向过程语言线性思维无法很好描述负责系统的缺陷,使用对象来对问题领域进行建模,对现实世界有更好的描述力,跟人类的思维方式更类似,这也是现在编程语言的主流
面向对象设计的原则
面向对象设计更容易达成我们希望的目标:易扩展、更强壮、可移植、更简单
达成这些目标需要遵循一些基本原则,而常见套路被总结成了设计模式
开闭原则
Open for extension; Closed for modification
实现关键是抽象,面向接口编程,当需要扩展功能时,增加新的实现类就可以。新增代码总是比修改代码要安全,也更容易维护。
依赖倒置原则
高层模块不能依赖底层模块,底层模块也不依赖高层模块,大家都依赖抽象
高层模块定义抽象
Liskov替换原则
子类型必须能够替换掉他们的基类型
里氏原则是判断正确继承关系的标准,它不是看静态的ISA关系,而是看动态的程序行为
几个有用的推论
子类必须拥有基类的整个接口
子类的访问控制不能比基类更严格
子类不能抛基类不支持的异常
单一职责原则
所谓职责指的是变化的原因,一个类只有有一个引起它变化的原因
强调程序应该是内聚的,它定义了一个类的最佳外延
违反后果是客户端会引入多余的依赖,修改类时会相互影响
接口分离原则
从客户端需要出发,客户只应看到它需要的方法,不能强迫客户依赖不需要的方法
可以通过多重继承和适配器的方式解决胖接口
评论