架构师养成第二课
编程发展历史
第一阶段:面向机器编程。从纸带打孔编程到汇编语言,编写的程序直接在机器上执行。
第二阶段:面向劳动者编程。使用高级语言实现逻辑,解决开发者按照逻辑编写程序的问题。
第三阶段:面向业务领域编程。面向对象编程,DDD 领域驱动设计按照领域对象进行编程。
面向对象的三要素(特征)
封装
- 隐藏实现细节 
- 定义和开放接口 
继承
- Has-A 关系(组合) 
- Is-A 关系 
多态
- 后期绑定 
- 向上转型 
面向对象编程
面向对象编程不是指使用面向对象语言实现编程,而是利用多态特性进行编程
面向对象分析
面向对象分析是将客观世界,即编程的业务领域进行对象分析
- 领域驱动设计 DDD 
- 充血模型与贫血模型 
面向对象设计
面向对象设计的目的是,设计出强内聚,低耦合的系统,从而使系统:
- 易扩展 - 易于增加新的功能 
- 更强壮 - 不容易被低级错误损坏 
- 可移植 - 能够在多样的环境下运行 
- 更简单 - 容易理解,容易维护 
面向对象设计的原则
- 为了达成设计目标,前人总结出多种指导设计和编码的原则 
- 原则是独立于编程语言的,甚至也可用于非面向对象的编程语言中 
代码坏味道的特点
- 僵硬 - 不易改变 
- 脆弱 - 只想改 A,结果 B 被意外破坏 
- 不可移植 - 不能适应环境变化 
- 导致误用的陷阱 - 做错误的事比做正确的事容易,引诱程序员破坏原有的设计 
- 晦涩 - 代码难以理解 
- 过度设计 
- 拷贝代码 
SOLID 设计原则
- OCP 开闭原则:对扩展开放,对修改关闭,保持系统的可维护性 
- DIP 依赖倒置原则:高层不依赖低层,低层不依赖高层,两者共同依赖高层主导的抽象,使用共同的抽象层进行松耦合,常用于指导框架设计 
- LSP 里式替换原则:用到父类的地方,都可以使用其子类进行替换,用于验证继承的合理性。需要注意的是,判断继承是否合理需要代入实际的业务场景,而非静态分析。举例:马<|--小马,人骑马,小马不能被骑,所以不满足里式替换,该继承不合理 
- SRP 单一职责原则:内聚性原则,一个类中如果存在多个引起变化的因素,则应该将这个类进行拆分。举例:计算方法包含了计算和打印两部分,而部分调用方仅需计算结果,因此需要将计算拆成两部分 
- ISP 接口隔离原则:不应强迫调用者看到他不关心的接口方法,如果一个类聚合了多重角色的调用者,可以考虑使用接口隔离,即实现多个接口的方式,为不同调用者提供不同的接口。 
设计模式
设计模式是用于解决某一类问题的通用解决方案;
设计模式语言中立,贯彻了设计原则;
23 种基本设计模式:
- 创建模式 
- 行为模式 
- 结构模式 
其它领域的设计模式:
- 并发编程模式 
- JAVA EE 模式 
版权声明: 本文为 InfoQ 作者【万有引力】的原创文章。
原文链接:【http://xie.infoq.cn/article/32b97af93db99618e68d178ad】。未经作者许可,禁止转载。












 
    
评论