架构师第二课总结
本次课程主要讲了编程的历史以及面向对象的常用设计模式
1、历史上推动软件编程重大革新的人
莱布尼茨的奇思怪想
法国人雅尔卡的可编程织布机
英国人Ada的打孔纸袋编程
现代的图灵、冯诺伊曼
2、形形色色的编程语言
汇编语言、早期的Basic语言、结构化Basic语言(Quick Basic、Visual Basic等)
Perl语言、C语言、C++语言、JAVA语言、等等
3、编程语言的实质
编程的目的:是用计算机来解决现实世界的问题
编程的过程:是在计算机所能理解的模型(解空间)和现实世界(问题空间)之间,建立一种联系
编程语言是一种‘抽象’ 的机制,问题是对‘谁’来抽象
4、编程方法的演进
5、什么是面向对象编程
1.万物皆对象
2.程序是对象的集合,它们通过发送消息来告知彼此所要做的
3.每个对象都有自己的由其他对象所构成的存储
4.每个对象都拥有其类型
5.某一特定类型的所有对象都可以接收同样的消息
6、什么是对象? 对象具有状态、行为、标识
7、面向对象编程的三要素? 封装性、继承性、多态性
8、面向对象设计的目的
目的是为了强内聚、低耦合,从而使系统易扩展、更强壮、可移植、更简单
9、不好的软件设计有那些标志
僵硬 - 不易改变
脆弱 - 只想改A,结果B也被改变
不可移植 - 不能适应环境的变化
导致错误的陷阱 - 做错误的事比做正确的事更容易,引诱程序员破坏原有的设计
晦涩 - 代码难以理解
过度设计 、 copy-paster代码
10、 OOD原则一: 开闭原则(OCP)
OCP - Open / Closed Principle
对于扩展是开放的
对于更改是封闭的
简而言之就是不需要修改软件实体(类、模块、函数等),就能实现功能的扩展
传统的扩展模块的方式就是修改模块的源代码。如何实现不修改而扩展呢?
关键在于抽象
可以使用策略模式、适配器模式、观察者模式等进行实现
11、OOD原则二: 依赖倒置原则(DIP)
DIP - Dependency Inversion Principle
高层模块不能依赖底层模块,而是大家都依赖于抽象
抽象不能依赖实现,而是实现依赖抽象
DIP倒置了什么
模块与包之间的依赖关系
开放的顺序与职责
软件的层次化
高层决定低层
高层被重用
12、 框架的核心
好莱坞规则: Don't call me ,I'll call you
倒转的层次依赖关系
评论