架构师训练营 WEEK2 总结
编程语言的实质
编程的目的:用计算机来解决现实世界的问题
编程的过程:在计算机能理解的模型与现实世界中,建立一种联系
编程语言是一种抽象的机制,问题是对谁抽象
抽象的种类
机器代码和汇编语言:对基础机器进行抽象
非结构化的高级语言:对计算处理逻辑抽象
结构化的程序设计:开始对问题领域进行一定程度的抽象
面向对象的程序设计:直接表达问题空间的元素
什么是面向对象编程
万物皆为对象
程序是对象的集合,它们通过发送消息来告知彼此所要做的
每个对象都有自己的由其他对象所构成的存储
每个对象都拥有类型
某一特定类型的所有对象都可以接收同样的消息
什么是对象
状态:表明每个对象可以有自己的数据
行为:表明每个对象可以产生行为
标识:表明每个对象都区别于其它的对象
面向对象编程的三要素
封装性
隐藏实现细节
定义接口
继承性
IS-A关系
HAS-A关系
多态性
后期绑定
向上转型
面向对象编程不是使用面向对象的编程语言进行编程,而是利用多态特性进行编程
面向对象分析是将客观世界,即编程的业务领域进行对象分析
充血模型与贫血模型
领域驱动设计DDD
面向对象设计的目的和原则
目的:
强内聚、低耦合,从而使系统易扩展、更强壮、可移植、更简单
原则:
原则独立于编程语言,为了达到设计目标,有人总结出了多种指导原则
设计模式
用于解决某一种问题的通用解决方案
是语言中立的
贯彻了设计原则
Gang of Four提出三大类23种基本的设计模式:
创建模式
行为模式
结构模式
在更细分的领域当中还可以总结出许多设计模式:
并发编程模式
JAVAEE模式
etc.
框架
框架是用来实现某一类应用的结构性的程序,是对某一类架构方案可复用的设计与实现
如同框架结构的大厦的框架
简化应用开发者的工作
实现了多种设计模式,使应用开发者不需要花太大的力气,就能设计出结构良好的程序来
框架VS工具
框架调用应用程序代码
应用程序代码调用工具
架构师用框架保证架构的落地
架构师用工具提高开发效率
面向对象设计的基本原则
OOD原则一:开闭原则(OCP)
OCP:Open/Closed Principle
对于扩展是开放的
对于更改是封闭的
不用修改软件实体,就应该能实现功能的扩展
OOD原则二:依赖倒置原则(DIP)
DIP - Dependency Inversion Principle
高层模块不能依赖低层模块,而是大家都依赖于抽象
抽象不能依赖实现,而是实现依赖抽象
DIP倒置了什么?
模块或包的依赖关系
开发顺序和职责
软件的层次化
高层决定低层
高层被重用
框架的核心
好莱坞原则:Don't call me,I'll call you.
倒转的层次依赖关系
OOD原则三:Liskov替换原则(LSP)
一个正确的继承要符合Liskov替换原则
子类型必须能够替换掉它们的基类型
LSP要求,凡是使用基类的地方,一定也适用于其子类
从java看:
子类一定得拥有基类的整个接口
子类的访问控制不能比基类更严格
从更广泛的意义看,子类的契约不能比基类更严格
如何重构代码,解决LSP问题?
最简单的办法是,提取共性到基类
改成组合
继承VS组合
继承和组合是OOP的两中扩展手段
继承的优点:
比较容易,因为基类的大部分功能可以通过继承直接进入子类
继承的缺点:
继承破坏了封装,因为继承将基类更多的细节暴露给子类,因为继承被称为“白盒复用”
当基类发生改变时,可能会层层影响其下的子类
继承是静态的,无法在运行时改变组合
类数量的爆炸
应该优先使用组合
OOD原则四:单一职责原则(SRP)
SRP - Single Responsibility Principle
又被称为“内聚性原则(cohesion)”,意为一个模块的组成元素之间的功能相关性
将它与引起一个模块改变的作用力相联,就形成了如下描述:一个类,只能有一个引起它的变化的原因
什么是职责?一个职责是一个变化的原因
OOD原则五:接口分离原则(ISP)
ISP - Interface Segregation Principle
不应该强迫客户程序依赖他们不需要的方法
ISP和SRP的关系
ISP和SRP是相关的,都和内聚性有关
SRP指出应该如何设计一个类——只能有一种原因才能促使类发生改变
ISP指出应该如何设计一个接口——从客户的需要出发,强调不要让客户看到他们不需要的方法
评论