写点什么

架构师训练营第 1 期 - 第 2 周 - 学习总结

用户头像
wgl
关注
发布于: 2020 年 09 月 27 日
架构师训练营第 1 期 - 第2周 - 学习总结

本次总结分 2 个部分:1.学习感受 2.学习知识的总结

  1. 学习感受:

以前,这些设计原则只是考试或面试时会用到,只是口诀,很抽象。通过本周的学习,设计原则+设计模式在我眼中不再是静态的,平面的,各自孤立的感觉了。它们的形象更加立体,变换多样,开始有生命了。


  1. 本周学习知识总结:

软件开发简史:1700 年代, 德国人, 莱布尼兹 , => 微积分和二进制

又过了 100 年,法国人, 雅卡尔 ,=> 可编程的织布机

19 世纪中叶,英国人,Ada(女) ,=> 利用打孔纸带写出人类第一个软件程序(包含了 循环和子程序) 人类第一个程序员(媛)

图灵

冯诺依曼

读取数据进行计算

每一种 CPU 都有独特的机器语言,因而需要不同的汇编语言

早期 Basic 语言虽然号称为“高级语言”,但是保留了汇编语言的特征 ——地址(即行号)。


结构化的 Basic 语言(Quick Basic、Visual Basict 等)

结构化的 Basic 语言仍然兼容传统的 Basic,而且提供了更好的集成开发环境。

结构化的编程取消了“地址”和 Goto 语句,代之以几种程序控制“结构”,如:循环、条件等。


Perl 是一种脚本语言,最强大的功能是正则表达式。

但 Perl 的语法比较晦涩难懂。 Perl 是一种“伪”的面向对象语言。


C 语言是一个结构化的语言

C++向后兼容 C 的所有功能,并且提供了面向对象的编程机制。

Java 是一个完全面向对象的语言,尤其是在当今的 Internet 编程领域,占领了绝对的市场。


编程的目的:用计算机来解决现实世界的问题。

编程的过程:在计算机所能理解的“模型”(解空间)和现实世界(问题空间)之间,建立一种联系。


编程的核心要素(哲学角度): 1.计算机(劳动工具) 2.人(劳动者) 3.客观业务领域(劳动对象)

面向对象编程的三大要素(特征):

封装性(Encapsulation)

•隐藏实现细节(访问控制

•定义接口

继承性(Inheritance)

  • IS-A 关系

  • HAS-A 关系(组合

多态性(Polymorphism)------ (通过学习本课程重新认识了多态性)

•后期绑定(虚函数)

•向上转形(Up Casting)


面向对象编程 和 面向对象分析

面向对象编程不是使用面向对象的编程语言进行编程,而是利用多态特性进行编程。

面向对象分析是将客观世界,即编程的业务领域进行对象分析。

•充血模型与贫血模型

•领域驱动设计 DDD

面向对象分析 有待后续 扩充 (模块分解 第 10 周)


面向对象设计的目的:

•强内聚、低耦合,从而使系统

•易扩展-易于增加新的功能

•更强壮-不容易被粗心的程序员破坏

•可移植-能够在多样的环境下运行

•更简单-容易理解、容易维护

面向对象设计的原则“原则”是独立于编程语言的,甚至也可以用于非面向对象的编程语言中。


设计模式是用于解决某一种问题的通用的解决方案。设计模式也是语言中立的。

设计模式贯彻了设计原则。

Gang of Four(Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides)提出了三大类 23 种基本的设计模式:

•创建模式 •行为模式 •结构模式

在更细分的领域当中还可以总结出许多设计模式:

•并发编程模式

  • Java EE 模式

  • etc.

框架(frameworks)

框架是用来实现某一类应用的结构性的程序,是对某一类架构方案可复用的设计与实现

•如同框架结构的大厦的框架

•简化应用开发者的工作

•实现了多种设计模式,使应用开发者不需要花太大的力气,就能设计出结构良好的程序来


不同领域的框架

•微软公司为 Windows 编程开发了 MFC 框架。

  • Java 为它的 GUI(图形用户界面)开发了 AWT 框架。

•还有许多开源的框架:MyBatis,Spring 等。

  • Web 服务器也是框架: Tomcat


框架 VS 工具

框架调用应用程序代码

应用程序代码调用工具

架构师用框架保证架构的落地

架构师用工具提高开发效率


面向对象设计的基本原则:

开/闭原则 (OCP-Open/Closed Principle):

•对于扩展是开放的(Open for extension)

•对于更改是封闭的(Closed for modification)

•简言之:不需要修改软件实体(类、模块、函数等),就应该能实现功能的扩展。

用策略模式,适配器模式,观察者模式实现开闭原则。


依赖倒置原则( DIP-Dependency Inversion Principle)

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

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

DIP 倒置了什么?

•模块或包的依赖关系

•开发顺序和职责

软件的层次化

•高层决定低层

•高层被重用


Liskov 替换原则(LSP)

在 Java/C++这样的静态类型语言中,实现 OCP 的关键在于抽象,而抽象的威力在于多态和继承。

一个正确的继承要符合什么要求呢? 答案:Liskov 替换原则

1988 年,Barbara Liskov 描述这个原则:

•若对每个类型 T1 的对象 o1,都存在一个类型 T2 的对象 o2,使得在所有针对 T2 编写的程序 P 中,用 o1 替换 o2 后,程序 P 的行为功能不变,则 T1 是 T2 的子类型。

•简言之:子类型(subtype)必须能够替换掉它们的基类型(base type)


继承 vs.组合 ---- 应该优先使用组合

继承和组合是 OOP 的两种扩展手段

继承的优点:

•比较容易,因为基类的大部分功能可以通过继承直接进入子类。

继承的缺点:

•继承破坏了封装,因为继承将基类更多的细节暴露给子类。因而继承被称为“白盒复用”。

•当基类发生改变时,可能会层层影响其下的子类。

•继承是静态的,无法在运行时改变组合。

•类数量的爆炸。


单一职责原则(SRP -Single Responsibility Principle)

• 又被称为“内聚性原则(Cohesion)”,意为: 一个模块的组成元素之间的功能相关性。

• 将它与引起一个模块改变的作用力相联,一个类,只能有一个引起它的变化的原因。

什么是职责? ---- 一个职责是一个变化的原因

单纯谈论职责,每个人都会得出不同的结论 ,因此我们下一个定义: 一个职责是一个变化的原因


接口分离原则(ISP-Interface Segregation Principle)

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

ISP 和 SRP 的关系

  • ISP 和 SRP 是相关的,都和“内聚性”有关。

  • SRP 指出应该如何设计一个类 ——只能有一种原因才能促使类发生改变。

  • ISP 指出应该如何设计一个接口 ——从客户的需要出发,强调不要让客户看到他们不需要的方法。


反应式编程部分 待后续补充


发布于: 2020 年 09 月 27 日阅读数: 43
用户头像

wgl

关注

正走在系统架构设计师路上的程序员。 2017.12.07 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第 1 期 - 第2周 - 学习总结