2020-06-13- 第二周学习总结

发布于: 2020 年 06 月 17 日

1 设计文档编写

架构文档中,也可以使用其他视图进行一个功能的设计。最终的目的是为了将一个功能或者概念解释清楚。不同的项目,侧重点也有所不同,所以使用的视图也不一样,要注意孰轻孰重。

2 软件开发简史

从编程的历史看编程的本质和未来。

2.1 软件编程和计算机

2.1.1 莱布尼兹的奇思怪想

和牛顿一起发明了微积分,又探索了软件编程。

计算机是对逻辑的编程,依据莱布尼兹的思想,布尔对此做了实现。

2.1.2 人类第一位程序媛

先有了程序,才有的计算机的诞生。

2.1.3 什么是计算机?什么是程序?

2.1.4 现代计算机与计算机程序

2.2 形形色色的编程语言

  1. 汇编语言

汇编语言关注的是CPU指令,是面向机器的编程语言。

  1. Basic语言

Basic语言,作为最初的高级语言,是按照逻辑进行编程的。高级语言是面向人的逻辑进行编程的。

3. 面向过程语言

  1. 面向对象语言

面向对象中的对象指的是问题领域中的对象。

3 面向对象的思考

3.1 编程语言的实质

为了解决领域问题

3.1.1 面向对象语言的诞生背景

编程是用现实世界的问题,在计算机中进行实现,面向对象中的对象是领域中的对象。对领域对象中的关系梳理清楚,并使用面向对象语言进行设计实现。

随着软件规模的越来越大,需要的人力也越来越多,不同的逻辑思维有所不同,面向过程语言已满足不了软件开发的现状,于是面向对象语言就诞生了。

3.1.2 我们用了面向对象的思维了吗?

用户对象去创建一个订单对象,但是我们并没有,而是按照当下MVC模式,一个订单创建请求过来,通过controller调取service,最终写入数据库,返回对象。这不是面向对象,是面向过程的思想,跟现实世界对象模型不一致的,只是我们使用了面向对象语言进行编程而已。

DDD就是面向对象编程,使用一定的手段将面向对象思想落地,是对面向对象的一种实践。

3.1.3 抽象的种类

  1. 机器语言和汇编语言:对基础机器机进行抽象

  2. 非结构化的高级语言(如Basic,Fortran等):对计算处理逻辑抽象

  3. 结构化的程序设计:开始对问题领域进行一定程度的抽象

  4. 面向对象的程序设计:直接表达问题空间内的元素

3.2 面向对象编程的核心要素

  • 人(劳动者)

  • 客观业务领域(劳动对象)

  • 计算机(劳动工具)

函数式编程是面向数据编程的,属于面向对象编程的一种细分。

3.2.1 面向对象三大特征

  1. 封装(Encapsulation):隐藏实现细节(访问控制);定义接口

  2. 继承(Inheritance):IS-A关系;HAS-A关系(组合)

  3. 多态(Polymorphism):后期绑定(虚函数);向上转型(Up Casting)

4 软件设计原则

4.1 软件设计中的“臭味”

  • 僵化性

  • 脆弱性

  • 牢固性

  • 粘滞性

  • 不必要的复杂性

  • 不必要的重复

  • 晦涩性

4.2 软件设计原则

  • 开闭原则(OCP)

  • 对扩展开放

  • 对更改封闭

  • 依赖倒置原则(DIP)

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

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

  • 也被称为好莱坞原则

  • 里氏替换原则(LSP)

  • 优先使用组合,而不是继承

  • 单一职责原则(SRP)

  • 主张对象职责单一,可以将多个职责的类进行分解

  • 类多一点没关系,通过类名/包名可以很简单找到对应的代码,否则代码很多的时候,维护和修改都需要成本。早期或者中间的时候将大类进行拆分,拆成一个个独立文件,注意这些代码之间的关系。代码开发需要注意,维护别人的代码时也是一样。

  • 接口分离原则(ISP)

  • 继承需要慎用,否则当父类发生变化时,子类可能也需要变化。

用户头像

路易斯李李李

关注

还未添加个人签名 2020.05.11 加入

还未添加个人简介

评论

发布
暂无评论
2020-06-13-第二周学习总结