「架构师训练营」学习笔记:第 2 周
1. 软件开发简史
在一贯的认知中,软件开发是要在计算机上进行的。如果有人跟我说在计算机出现之前,就有人在编程了,一定会想这是开玩笑吧。但是了解到下面的历史事件,才知道以前的思想太狭窄了。软件开发是一项创造性的工作,不应该画一个框把思维困在里面。跳出框框,你会有意想不到的收获。
1700 年代,德国人莱布尼兹期望将各种事务通过一种逻辑语言进行描述,然后用一种可执行盐酸规则的机器进行计算,就可以计算出事务的各种结果。结果发明了微积分(ps:莱布尼兹和牛顿谁现发明微积分的争论是数学界至今最大的公案,这里不讨论。)和二进制。
1800 年代,法国人雅卡尔发明了人类可编程的产品——织布机。
19 世纪中叶,英国人 Ada (是一名女生哦。)写出人类第一个软件程序。
2. 编程与编程语言
编程的目的:用计算机来解决现实世界的问题。
编程的过程:在计算机所理解的“模型”(解空间)和现实世界(问题空间)之间,建立一种联系。
编程语言是一种“抽象”的机制,问题是对“谁”来抽象。
2.1. 问题领域
包含与系统所有解决的问题相关的实物和概念的空间
2.2. 抽象的种类
| 机器代码和汇编语言 | 对基础机器进行抽象 |
| ---------------------------------------- | -------------------------------- |
| 结构化的高级语言(如:Basic,Fortran 等) | 对计算处理逻辑抽象 |
| 结构化的程序设计 | 开始对问题领域进行一定程度的抽象 |
| 面向对象程序设计 | 直接表达问题空间内的元素 |
汇编语言 -> 高级语言 -> 结构化程序 -> OOP
2.3. 编程的核心要素
人 、 客观业务领域、计算机
2.4. 面向对象编程
万物皆对象
程序是对象的集合,它们通过发送消息来告知彼此所要做的。
每个对象都有自己的由其他对象所构成的存储
每个对象都拥有其类型
某一特定类型的所有对象都可以接收同样的消息
2.4.1. 什么是对象
对象具有状态、行为和标识。
状态:表明每个对象可以有自己的数据
行为:表明每个对象可以产生行为
标识:表明每个对象都区别与其他的对象(唯一地址)
2.4.2. OOP 的三要素(特征)
| 特征 |描述 |
| -------------------- | --------------------------------------------- |
| 封装(Encapsulation) | 隐藏实现细节(访问控制)<br />定义接口 |
| 继承(Inheritance) | IS-A 关系<br />Has-A 关系(组合) |
| 多态(Polymorphism) | 后期绑定(虚函数)<br />向上转型(Up Casting) |
注意:这 3 个特征并不是 OOP 特有的。
2.5. 面向对象编程与面向对象分析
面向对象编程是利用多态特性进行编程。
面向对象分析是将客观世界,即编程的业务领域进行对象分析。
充血模型与贫血模型
领域驱动设计 DDD
2.6. 面向对象设计的目的和原则
2.6.1. 目的
强内聚、低耦合,从而使系统
- 易扩展 —— 易于增加新的功能
- 更强壮 —— 不容易被粗心的程序员破坏
- 可移植 —— 能够在多样的环境下运行
- 更简单 —— 容易理解、容易维护
2.6.2. 原则
为了达到上述的设计目的,前人总结出了多种指导原则
“原则”是独立于编程语言的,甚至也可以用于非面向对象的编程语言中。
3. 框架
框架是用来实现某一类应用的结构性的程序,是对某一类架构方案可服用的设计与实现
如同框架结构的大厦的框架
简化应用开发者的工作
实现了多种设计模式,使用应用开发者不需要花太大的力气,就能设计出结构良好的程序来
不用领域的框架:
微软公司为 Windows 编程开发了 MFC 框架
Java 为它的 GUI(图形用户节目)开发了 AWT 框架
开源的框架:MyBatis、String 等
Web 服务器也是框架:Tomcat
3.1. 框架 vs 工具
框架调用应用程序代码
应用程序代码调用工具
4. 面向对象设计的六大原则
面向对象设计原则是前人在使用面向对象开发过程中,总结出来的一些指导性思想。它不是具体的方法,是指导思想。但是在实际工作中经常会被忽视、违背。
评论