写点什么

架构师训练营 第二周 总结 软件开发本质与设计原则

用户头像
CR
关注
发布于: 2020 年 06 月 17 日

本周的课程老师的思路是先带领大家思考软件开发是怎么出现的,是为了解决什么问题而出现的,在解决这些问题的过程中程序设计方法是如何变得更好的。在回答了这些根本性问题后,再引出软件开发的设计原则是什么。

软件开发本质

人类从事软件编程的探索早在计算机被发明之前就开始了。早在1700年代,莱布尼茨就期望各种事物通过一种逻辑语言进行描述,然后用一种可执行的演算规则的机器进行计算,可以计算出各种结果。简而言之,就是通过计算解决现实世界的问题。而通用计算机的出现,则使得这一目的成为可能。计算机通过读取数据进行计算,这里的数据一指计算的对象,二指计算逻辑本身,后者称为程序。由于计算机计算的是数据,那么如何将现实问题变成可以计算的数据,就是编程这个过程本身,即在计算机所能理解的“模型”(解空间)与现实世界(问题空间)之间,建立一种联系编程语言就是用来表达这种联系的,它是一种抽象机制,它的关键在于对谁进行抽象。

编程语言的进化史

要理解编程语言的进化史,首先要清楚的是它是用于表达问题领域和解空间的。问题领域包含与系统所要解决的问题相关的实物和概念空间。最早期的编程语言是通过对基础机器进行抽象,即产生了汇编语言,通过控制机器的指令来实现解决问题的步骤。后来出现了非结构化的高级语言,它是对计算处理逻辑进行了抽象,相对汇编语言来说对开发人员更加友好。之后,出现了结构化的程序设计,这个时候开始对问题领域进行一定程度的抽象,出现了函数等抽象。最后出现了面向对象的程序设计,它是直接表达问题空间内的元素,是最接近问题领域的抽象。

因此,我们在编程时,关键不在于我们使用了哪种语言,而是我们站在哪个抽象层次进行编程,也就是说并不是使用面向对象编程语言写程序就是面向对象编程,而是我们使用了面向对象分析和设计原则进行设计,通过面向对象编程的三要素(封装、继承、多态)进行编程才是真正的面向对象编程。

面向对象

  1. 对象是什么: 对象具有状态,行为,标识

  2. 面向对象编程的三要素

  3. 封装性 (Encapsulation)

  4. 隐藏实现细节

  5. 定义接口

  6. 继承性 (Inheritance)

  7. is-a

  8. has-a(组合)

  9. 多态性 (Polymorphism)

  10. 后期绑定(虚函数)

  11. 向上转形(Up Casting)

编程的核心要素

编程的核心要素就是:人、计算机、客户业务领域

这里老师分享了一个非常有趣的观点,即开发人员作为劳动者,使用计算机(劳动工具)编程,劳动对象是客户业务领域,计算机这个劳动工具越接近业务领域这个劳动对象时,效率越高,因此面向对象编程语言已经接近编程语言的最终形态了。

软件设计原则



1、单一职责原则 - Single Responsibility Principal(SRP)

  • 一个类或者模块只负责完整一个职责或功能。

2、开/闭原则 - Open/Close Principal(OCP)

  • Open for extension

  • Closed for modification

3、里氏替换原则 - Liskov Substitution Principal(LSP)

  • 子类能够替换程序中父类对象所在的任何位置,并且能保证替换之后的业务逻辑的正确性。

4、接口隔离原则 - Interface Segregation Principal(ISP)

  • 不应该将客户端不需要的接口行为暴露给客户端,尽量保证客户端的行为可控。

  • 不应该强迫客户端程序依赖它们不需要的方法。

5、依赖倒置原则 - Dependency Inversion Principal(DIP)

  • 高层模块不能依赖底层模块,而是大家都依赖于抽象。

  • 抽象不能依赖实现,而是实现依赖抽象。

  • 框架抽象接口,你不需要调用框架,框架会调用你。

  • 好莱坞原则 - Don't call me, I will call you



用户头像

CR

关注

还未添加个人签名 2018.09.23 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 第二周 总结 软件开发本质与设计原则