- 架构设计的历史背景
- 机器语言
- 1940年之前
- 难写,难读,难改
- 汇编语言
- 20世纪40年代
- 面向机器
- 不同CPU汇编指令和结构不同,同一程序对于不同CPU要做不同的实现
- 高级语言
- 20世纪50年代
- Fortran、LISP、Cobol
- 程序员不需要关注机器底层的低级结构和逻辑,而只要关注具体的问题和业务即可。
- 通过编译程序的处理,高级语言可以被编译为适合不同CPU指令的机器语言。程序员只要写一次程序,就可以在多个不同的机器上编译运行,无须根据不同的机器指令重写整个程序。
- 结构化程序设计
- 20世纪60年代
- 引出结构化编程,创造模块概念
- 软件危机:软件规模和复杂度增加,软件质量低下,项目无法如期完成,事故频发
- 美国水手一号火箭发射失败事故
- IBM的 System/360 操作系统开发,《人月神话》
- 1968 召开会议,提出软件工程
- 无法根除软件危机,一定程度上缓解软件危机
- Pascal
- 主要特点是抛弃goto语句,采取“自顶向下、逐步细化、模块化”的指导思想。
- 面向对象
- 20世纪80年代
- 引出面向对象编程,创造对象概念
- 第二次软件危机
- 软件的扩展变得非常复杂
- 面向对象思想流行
- C++、Java、C#
- 软件架构的历史背景
- 20世纪90年代
- 软件架构流行,创造组件概念
- 《软件架构介绍》
- 随着软件系统规模的增加,计算相关的算法和数据结构不再构成主要的设计问题;当系统由许多部分组成时,整个系统的组织,也就是所说的“软件架构”,导致了一系列新的设计问题。
- 出现在大厂的原因
- 大厂开发的软件系统具有较大规模
- 较大规模的软件系统才会面临软件系统架构问题
- 系统规模庞大,内部耦合严重,开发效率低;
- 系统耦合严重,牵一发动全身,后续修改和扩展困难;
- 系统逻辑复杂,容易出问题,出问题后很难排查和修复;
- 小结
- 模块、对象、组件本质上是对达到一定规模的软件进行拆分,差别在于随着软件的复杂度不断增加,拆分的粒度越来越粗,拆分的层次越来越高。
- 机器语言