【Week02】框架设计
软件开发简史
从编程的历史看编程的本质与未来(以史为鉴)
莱布尼兹
1700年代,莱布尼兹期望将各种事物都通过一个逻辑语言进行描述,然后用一种可执行演算规则的机器进行计算,就可以计算出事物的各种结果。
Ada
莱布尼兹并没有实现具体的程序,100年后由法国人雅卡尔发明了一台可编程的织布机,这种织布机读取纸带上的打孔,进而控制织布机织出不同的图案。于是人们开始尝试打孔纸带进行计算机编程。
计算机?程序?
从莱布尼兹、Ada到图灵、冯诺伊曼,这些现代计算机的开创者视图创建的是一个通用的计算机,这种计算机不是读取数值进行计算,而是读取数据进行计算,这些数据本身包含着计算逻辑,这个数据就是程序
编程语言
-----机器语言------
汇编语言 -关注-> 指令
Basic语言 -关注-> 指令
Perl语言 -关注-> 逻辑
------高级语言-----
C语言 -关注-> 结构化
C++语言 -关注-> 面向对象
Java语言 -关注-> 面向对象
实质
目的是什么?:用计算机来解决现实时间的问题
过程是什么?:在计算机所能理解的“模型”和现实世界之间建立一种联系
编程语言是一种“抽象”的机制,问题是对“谁”来抽象
直击灵魂的问题:你是否理解面向对象编程? 是否在运用面向对象编程?
DDD:是对于面向对象的落地方式
问题领域(Problem Domain)
包含与系统所要解决的问题相关的实体和概念的空间
【问题的抽象】
抽象的种类
机器代码 --> 对基础机器进行抽象
非结构化的高级语言 --> 对于计算处理逻辑抽象
结构化的高级语言 --> 对问题领域进行一定程度的抽象
面向对象的程序设计 --> 直接表达问题空间内的元素
编程的核心要素
人(劳动者)
客观业务领域(劳动对象)
计算机(劳动工具)
面向对象
什么是?
万物皆对象
程序是对象的集合,他们通过发送消息来告知彼此要做什么
每个对象都有自己的由其他对象所构成的存储
每个对象都拥有其类型
某一特定类型的所有对象都可以接收同样的消息
什么是对象?
对象具有状态、行为和标识
状态:表明每个对象可以有自己的数据
行为:表明每个对象可以产生行为
标识:表明每个对象都区别于其他的对象
三要素
封装
继承
多态
多态是面向对象编程的核心,如何用好多态才是值得思考的。
面向对象编程与面向对象分析
编程:利用多态特性进行编程【多态很重要】
分析:将客观世界,即编程的业务领域进行对象分析【模块拆解会详细讲解】
充血模型与贫血模型
DDD 领域驱动设计
如何用好多态:设计原则与设计模式总结了很多很好的实践方式
框架
什么是框架(What)
框架是用来实现某一类应用的结构性程序,是对某一类架构方案可复用的设计与实现
如同框架结构的大厦框架
简化开发者工作
实现了多种设计模式,开发者不需要花费太大的力气,就能设计出结构良好的程序
【架构师需要关注框架】
框架 VS 工具
框架:框架应用程序代码
工具:应用程序代码的使用
面向对象的设计原则
什么是不好的设计
软件的设计最终的目的是让软件“强内聚,低耦合”,使软件:
易扩展:易于增加新的功能
更强壮:不容易被粗心的程序员破坏
可移植:能够在多样的环境下运行
更简单:容易理解、容易维护
不好的设计
僵化性()
脆弱性
牢固性
粘滞性
不必要的复杂性
不必要的重复
晦涩性
OOD原则
开闭原则(OCP)
对于扩展是开放的
对于更改是封闭的
简言之:不需要修改软件实体(类、模块、函数等),就应该能实现功能的扩展
传统的扩展模块的方式就是修改模块的源代码。如何不修改? —— 抽象
【策略模式】
【适配器模式】
【观察者模式】
依赖导致原则(DIP)
DIP - Dependency Inversion Principle 【策略模式】
高层模块不依赖底层模块,而是大家都依赖于抽象
抽象不依赖实现,而是实现依赖抽象
倒置了什么?
模块或包的依赖关系
开发顺序和职责
【抽象属于高层】
版权声明: 本文为 InfoQ 作者【Aldaron】的原创文章。
原文链接:【http://xie.infoq.cn/article/76896d0fdbfc60ac90392d4d6】。文章转载请联系作者。
评论