【第二周】框架设计
编程语言的实质
目的:用计算机来解决现实世界的问题。
过程:在计算机所能理解的“模型”和现实世界之间建立联系。
编程方法的演进
汇编语言->高级语言->结构化程序->OOP
编程的核心要素
面向对象编程:
对象: 状态、行为和标识
三要素:
封装性: 隐藏实现细节、定义接口
继承性: IS-A关系、HAS-A关系(组合)
多态性: 后期绑定(虚函数)、向上转型(Up Casting)
目的:
强内聚、低耦合
从而使系统易扩展、更强壮、可移植、更简单
框架 VS 工具:
框架调用应用程序代码 -> 用框架保证架构的落地
应用程序代码调用工具 -> 用工具提高开发效率
坏代码的味道
僵硬、脆弱、不可移植、导致误用的陷阱、晦涩、过渡设计、copy-paste代码
OOD原则
开闭原则、里氏替换原则、依赖倒置原则、单一职责原则、接口隔离原则
开闭原则OCP
对扩展是开放的
对更改是封闭的
做到开闭原则的关键是抽象
依赖倒置原则DIP
高层模块不依赖底层模块,都依赖于抽象
抽象出的接口层属于高层
抽象不能依赖实现,而是实现依赖抽象
DIP倒置了模块或者包的依赖关系、开发顺序和职责
好莱坞规则: Don't call me, I'll call you
Liskov替换原则(LSP):
子类型必须能够替换掉他们的基类型, 子类的‘契约’不能比基类更‘严格’
需要看场景上下文来判断是否符合LSP。
继承 VS 组合:都是OOP的两种扩展手段。
继承的缺点:
“白盒复用”-破坏了封装,继承将基类更多的细节暴露给子类
基类改变时,会层层影响其下的子类。
继承是静态的,无法在运行时改变组合
类数量的爆炸。
可能违反LSP的征兆
派生类中的退化函数
派生类中跑出基类不会产生的异常
单一职责原则(SRP):
又被称为内聚性原则
一个类,只有一个引起它变化的原因
接口分离原则(ISP):
不应该强迫客户程序依赖他们不需要的方法。
SRP指出设计类时只有一种原因才能促使类发生改变, ISP指出设计接口时从客户的需要出发,强调不要让客户看到他们不需要的方法。
评论