写点什么

Week2 - 框架设计

用户头像
evildracula
关注
发布于: 2020 年 10 月 31 日

程序

编程语言的实质

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

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

  • 编程语言是一种“抽象”的机制,问题是对“谁”来抽象。

面向对象

三要素

  1. 封装性:隐藏实现

  2. 继承性:接口重用

  3. 多态性:



设计目的和原则

面向对象设计的目的:强内聚、低耦合,从而使系统

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

  • 更强壮 - 不容易被粗心的程序员破坏 Ø 可移植 - 能够在多样的环境下运行

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



面向对象设计的原则

  • 为了达到上述设计目标,有人总结出了多种指导原则

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



软件设计“臭味”

软件设计的最终目的,是使软件达到“强内聚、松耦合”,从而使软件:

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

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

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

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

与之相反,一个“不好的”软件,会发出如下“臭味”:

  • 僵硬 - 不易改变。

  • 脆弱 - 只想改 A,结果 B 被意外破坏。

  • 不可移植 - 不能适应环境的变化。

  • 导致误用的陷阱 - 做错误的事比做正确的事更容易,引诱程序员破坏原有的设计。

  • 晦涩 - 代码难以理解。

  • 过度设计、copy-paste 代码。



OOD 原则

开/闭原则

  • 对于扩展是开放的

  • 对于修改是封闭的

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



依赖倒置原则

DIP - Dependency Inversion Principle

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

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

  • 高层决定底层,高层被重用



Liskov 替换原则(LSP)

不符合is-a 的一定不符合LSP;

符合is-a的也不一定符合LSP;

契约

LSP 要求,凡是使用基类的地方,一定也适用于其子类。

从 Java 语法角度看,意味着:

  • 子类一定得拥有基类的整个接口。

  • 子类的访问控制不能比基类更严格。

  • 例如,Object类中有一个方法

  • protectedObjectclone();

  • 子类中可以覆盖(override)之并放松其访问控制:

  • publicObjectclone();

  • 反之不行

  • 覆盖publicStringtoString()方法,并将其访问控制缩小成private,编译器不可能允许这样的代码通过编译。

单一职责原则(SRP)

  • 又被称为“内聚性原则(Cohesion)”,意为:

  • 一个模块的组成元素之间的功能相关性

  • 将它与引起一个模块改变的作用力相联,就形成了如下描述:

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



接口分离原则(ISP)

ISP - Interface Segregation Principle

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

ISP 和 SRP 的关系

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

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

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



反应式框架Flow的设计

https://github.com/zhihuili/flower



发布于: 2020 年 10 月 31 日阅读数: 31
用户头像

evildracula

关注

还未添加个人签名 2019.07.29 加入

还未添加个人简介

评论

发布
暂无评论
Week2 - 框架设计