写点什么

架构师养成第二课

用户头像
万有引力
关注
发布于: 2020 年 12 月 05 日

编程发展历史

第一阶段:面向机器编程。从纸带打孔编程到汇编语言,编写的程序直接在机器上执行。

第二阶段:面向劳动者编程。使用高级语言实现逻辑,解决开发者按照逻辑编写程序的问题。

第三阶段:面向业务领域编程。面向对象编程,DDD 领域驱动设计按照领域对象进行编程。

面向对象的三要素(特征)

封装

  • 隐藏实现细节

  • 定义和开放接口

继承

  • Has-A 关系(组合)

  • Is-A 关系

多态

  • 后期绑定

  • 向上转型

面向对象编程

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

面向对象分析

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

  • 领域驱动设计 DDD

  • 充血模型与贫血模型

面向对象设计

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

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

  • 更强壮 - 不容易被低级错误损坏

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

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


面向对象设计的原则

  • 为了达成设计目标,前人总结出多种指导设计和编码的原则

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

代码坏味道的特点

  • 僵硬 - 不易改变

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

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

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

  • 晦涩 - 代码难以理解

  • 过度设计

  • 拷贝代码

SOLID 设计原则

  • OCP 开闭原则:对扩展开放,对修改关闭,保持系统的可维护性

  • DIP 依赖倒置原则:高层不依赖低层,低层不依赖高层,两者共同依赖高层主导的抽象,使用共同的抽象层进行松耦合,常用于指导框架设计

  • LSP 里式替换原则:用到父类的地方,都可以使用其子类进行替换,用于验证继承的合理性。需要注意的是,判断继承是否合理需要代入实际的业务场景,而非静态分析。举例:马<|--小马,人骑马,小马不能被骑,所以不满足里式替换,该继承不合理

  • SRP 单一职责原则:内聚性原则,一个类中如果存在多个引起变化的因素,则应该将这个类进行拆分。举例:计算方法包含了计算和打印两部分,而部分调用方仅需计算结果,因此需要将计算拆成两部分

  • ISP 接口隔离原则:不应强迫调用者看到他不关心的接口方法,如果一个类聚合了多重角色的调用者,可以考虑使用接口隔离,即实现多个接口的方式,为不同调用者提供不同的接口。


设计模式

设计模式是用于解决某一类问题的通用解决方案;

设计模式语言中立,贯彻了设计原则;

23 种基本设计模式:

  • 创建模式

  • 行为模式

  • 结构模式

其它领域的设计模式:

  • 并发编程模式

  • JAVA EE 模式


发布于: 2020 年 12 月 05 日阅读数: 24
用户头像

万有引力

关注

还未添加个人签名 2018.05.30 加入

还未添加个人简介

评论

发布
暂无评论
架构师养成第二课