写点什么

第二章学习笔记

用户头像
博博
关注
发布于: 2020 年 11 月 07 日

编程历史

  • 计算机读取数据进行计算,这些数据本身包含着计算逻辑,这个数据就是程序

  • 面向机器编程->面向过程编程->面向对象编程

  • 编程的目的:用计算机来解决现实世界的问题;编程的过程:在计算机所能理解的“模型”和现实世界之间建立一种联系。编程语言是一种“抽象”的机制,问题是对“谁”来抽象

  • 编程方法的演进:汇编语言->高级语言->结构化程序->面向对象编程

  • 架构师要有跳出技术表面抓住技术背后本质的能力

面向对象编程

  • 面向对象编程的核心:万物皆对象

  • 面向对象编程三要素

  • 封装性-隐藏实现细节

  • 继承性-接口的重用

  • 多态性-面向对象的重中之重

  • 面向对象设计目的:高内聚低耦合

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

软件设计的臭味

  • 僵硬

  • 脆弱

  • 不可移植

  • 导致误用的陷阱

  • 晦涩

  • 过度设计

软件设计原则

开闭原则(OCP Open/Closed Principle)

对于扩展是开放的,对于更改是关闭的。关键是抽象。简而言之,对于需求的变更,它可以增加扩展功能,但是不能修改现有的逻辑。通过抽象,定义各种各样的抽象接口,针对抽象接口进行编程,当有需求变更时,变更的是抽象接口的各种各样的实现,而接口本身不变,接口的调用不变,从而实现开闭原则。

常见的设计模式有:策略模式,适配器模式和观察者模式。

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

核心内容

高层模块不能依赖低层模块,而是大家都依赖于抽象;抽象不能依赖实现,而是实现依赖抽象。总结为:高层模块定义接口,低层模块来实现接口。

DIP原则倒置了模块或包的依赖关系,开发顺序和职责。高层决定低层,高层模块更容易被复用。

依赖导致原则中重要的是抽象,更重要的是抽象是属于谁的,是属于高层模块的。

好莱坞原则

好莱坞原则又为框架设计的核心:don't call me,I'll call you。关键在于框架定义一组接口,框架基于这组接口进行开发和调用。不同的服务来实现这个接口,这样服务就可以被框架调用。好莱坞原则遵循倒转的层次依赖关系,即DIP原则。

里氏替换原则(LSP)

  • 里氏替换原则主要是为了解决继承问题,衡量继承是否合理的重要原则。通俗的说法:在一个程序中,如果子类可以替换父类,那么子类就可以继承父类。如果一个类继承另一个类是合理的,则子类必须在使用基类的程序中可以替换父类,并且保证程序的正确运行,即子类型必须能够替换掉他们的基类型。

  • 里氏原则相比于静态分析更看重与应用场景。

  • 更好的设计可以使用更少的代码实现,代码逻辑越复杂越容易引入问题。

  • 设计和界定一个类应该是以其行为作为区分。

  • 从“契约”的角度看LSP:子类的契约不能比基类更严格。

如何重构代码以解决LSP问题?

  1. 提取共性到基类

  2. 改继承为组合,在程序设计中应该优先使用组合而不是继承。

单一职责接口隔离

单一职责和接口隔离的关系

  • 都和“内聚性”有关

  • 单一职责指出应该如何设计一个类--只能又一种原因才能促使类发生改变

  • 接口隔离指出应该如何实际一个接口--从客户的需求出发,强调不要让客户看到他们不需的方法

单一职责原则(SRP)

  • 单一职责接口又被称为“内聚性原则”

  • 一个类只能有一个引起它的变化的原因

  • 一个类的功能不应该太多,如果太多应该进行拆分,使用组合

接口隔离原则(ISP)

  • 接口分离原则:不应该强迫客户程序依赖他们不需要的方法。通过接口隔离不同的实现类里面的方法,使他们不强迫应用程序依赖他们不需要的方法。

  • 主要的手段就是通过多重继承实现多个接口,不同的应用程序访问不同的实现接口,最后访问到具体的实现类,从而使接口进行隔离。

小结

本周通过多个用例学习了软件设计原则SOLID。好的代码能够给减少工作的痛苦,同时也能做到可持续发展。



发布于: 2020 年 11 月 07 日阅读数: 22
用户头像

博博

关注

还未添加个人签名 2019.03.20 加入

还未添加个人简介

评论

发布
暂无评论
第二章学习笔记