第二章学习笔记
编程历史
计算机读取数据进行计算,这些数据本身包含着计算逻辑,这个数据就是程序
面向机器编程->面向过程编程->面向对象编程
编程的目的:用计算机来解决现实世界的问题;编程的过程:在计算机所能理解的“模型”和现实世界之间建立一种联系。编程语言是一种“抽象”的机制,问题是对“谁”来抽象
编程方法的演进:汇编语言->高级语言->结构化程序->面向对象编程
架构师要有跳出技术表面抓住技术背后本质的能力
面向对象编程
面向对象编程的核心:万物皆对象
面向对象编程三要素
封装性-隐藏实现细节
继承性-接口的重用
多态性-面向对象的重中之重
面向对象设计目的:高内聚低耦合
面向对象设计原则:是独立于编程语言的,甚至也可以用于非面向对象的编程语言中
软件设计的臭味
僵硬
脆弱
不可移植
导致误用的陷阱
晦涩
过度设计
软件设计原则
开闭原则(OCP Open/Closed Principle)
对于扩展是开放的,对于更改是关闭的。关键是抽象。简而言之,对于需求的变更,它可以增加扩展功能,但是不能修改现有的逻辑。通过抽象,定义各种各样的抽象接口,针对抽象接口进行编程,当有需求变更时,变更的是抽象接口的各种各样的实现,而接口本身不变,接口的调用不变,从而实现开闭原则。
常见的设计模式有:策略模式,适配器模式和观察者模式。
依赖倒置原则(DIP Dependency Inversion Principle)
核心内容
高层模块不能依赖低层模块,而是大家都依赖于抽象;抽象不能依赖实现,而是实现依赖抽象。总结为:高层模块定义接口,低层模块来实现接口。
DIP原则倒置了模块或包的依赖关系,开发顺序和职责。高层决定低层,高层模块更容易被复用。
依赖导致原则中重要的是抽象,更重要的是抽象是属于谁的,是属于高层模块的。
好莱坞原则
好莱坞原则又为框架设计的核心:don't call me,I'll call you。关键在于框架定义一组接口,框架基于这组接口进行开发和调用。不同的服务来实现这个接口,这样服务就可以被框架调用。好莱坞原则遵循倒转的层次依赖关系,即DIP原则。
里氏替换原则(LSP)
里氏替换原则主要是为了解决继承问题,衡量继承是否合理的重要原则。通俗的说法:在一个程序中,如果子类可以替换父类,那么子类就可以继承父类。如果一个类继承另一个类是合理的,则子类必须在使用基类的程序中可以替换父类,并且保证程序的正确运行,即子类型必须能够替换掉他们的基类型。
里氏原则相比于静态分析更看重与应用场景。
更好的设计可以使用更少的代码实现,代码逻辑越复杂越容易引入问题。
设计和界定一个类应该是以其行为作为区分。
从“契约”的角度看LSP:子类的契约不能比基类更严格。
如何重构代码以解决LSP问题?
提取共性到基类
改继承为组合,在程序设计中应该优先使用组合而不是继承。
单一职责接口隔离
单一职责和接口隔离的关系
都和“内聚性”有关
单一职责指出应该如何设计一个类--只能又一种原因才能促使类发生改变
接口隔离指出应该如何实际一个接口--从客户的需求出发,强调不要让客户看到他们不需的方法
单一职责原则(SRP)
单一职责接口又被称为“内聚性原则”
一个类只能有一个引起它的变化的原因
一个类的功能不应该太多,如果太多应该进行拆分,使用组合
接口隔离原则(ISP)
接口分离原则:不应该强迫客户程序依赖他们不需要的方法。通过接口隔离不同的实现类里面的方法,使他们不强迫应用程序依赖他们不需要的方法。
主要的手段就是通过多重继承实现多个接口,不同的应用程序访问不同的实现接口,最后访问到具体的实现类,从而使接口进行隔离。
小结
本周通过多个用例学习了软件设计原则SOLID。好的代码能够给减少工作的痛苦,同时也能做到可持续发展。
版权声明: 本文为 InfoQ 作者【博博】的原创文章。
原文链接:【http://xie.infoq.cn/article/e1d5b62f48e08aba955db14df】。文章转载请联系作者。
评论