架构师训练营第二周总结:软件开发简史和框架设计的方法
架构师训练营进入到第二周的时间。这一周的第一次课,老师主要介绍了一下软件开发的简史。早在1700年代,德国人莱布尼兹就开始了最早的编程探索。莱布尼兹进行了大量的工作,发明了微积分和二进制。在1800年代,法国人雅卡尔发明了一台可编程的织布机。在1850年左右,英国人Ada用打孔纸写出来人类的第一个软件程序,也成为了人类的第一位程序媛。冯诺依曼创造了现代计算机的体系。在早期计算机的编程非常麻烦,程序员要将电线编来编去,因此有了编程这个词。
编程语言也经历了很长时间的发展,从和硬件强相关到和硬件无关,变的越来越易用,越来越符合人类的思维习惯。
编程的目的是:用计算机来解决现实世界的问题。
编程语言是一种“抽象”的机制,问题是对“谁”来进行抽象。
各种不同的编程语言,抽象的对象都不同。机器代码和汇编语言是对基础机器进行抽象。非机构化的高级语言(如Basic,Fortran等)对计算处理逻辑进行抽象。结构化的程序设计对问题领域进行一定程度的抽象。面对对象的程序设计,直接表达问题空间内的元素。
面向对象编程的三要素
封装性:
隐藏了实现细节(访问控制),定义接口
继承性:
IS-A关系, HAS-A关系(组合)
多态性:
后期绑定(虚函数)
向上转形(Up Casting)
在面向对象的编程语言中,多态非常简单:子类实现父类或者接口的抽象方法,程序使用抽象父类或者接口编程,运行期注入不同的子类,程序就表现出不同的形态,是为多态。
设计模式是用于解决某一种问题的通用解决方案,设计模式贯彻了设计原则,是语言中立的。
框架是用来实现某一类应用的结构性程序,是对某一类架构方案可复用的设计与实现。框架如同建筑的骨架,实现了多种设计模式,简化了应用开发者的工作。
框架调用应用程序代码,应用程序代码调用工具。举例来说Junit是框架,而Log4j是工具。
这一周的第二次课,老师用例子程序重点讲解了如何运用设计模式来设计代码框架,优化代码结构。
面向对象编程的5个原则:1)开/闭原则(OCP)2)依赖倒置原则(DIP)3)Liskov替换原则(LSP)
4)单一职责原则(SRP)5)接口分离原则(ISP)。
开/闭原则:
对于扩展是开放的
对于更改时封闭的
不需要修改软件实体(类,模块,函数等),就能实现功能的扩展
传统的扩展模块的方式就是修改模块的源代码。如何实现不修改而扩展呢?关键在于抽象!
依赖倒置原则:
高层模块不能依赖低层模块,而是大家都依赖于抽象
抽象不能依赖实现,而是实现依赖抽象
依赖倒置原则倒置了什么:
模块或包的依赖关系
开发的顺序和职责
Liskov替换原则: 子类型(subtype)必须能够替换掉它们的基类型(base type)。一个正确的继承要符合Liskov替换原则。
单一职责原则(SRP):又被称为内聚性原则。一个类只能有一个引起它变化的原因。一个职责是一个变化的原因。
接口分离原则(ISP):不应该强迫客户程序依赖它们不需要的方法。
评论