SOLID 原则
SOLID(单一功能、开闭原则、里氏替换、接口隔离以及依赖反转)
S 单一功能原则
认为对象应该仅具有一种单一功能的概念。
O 开闭原则
认为“软件体应该是对于扩展开放的,但是对于修改封闭的”的概念。
L 里氏替换原则
认为“程序中的对象应该是可以在不改变程序正确性的前提下被它的子类所替换的”的概念。参考 契约式设计。
I 接口隔离原则
认为“多个特定客户端接口要好于一个宽泛用途的接口”[5] 的概念。
D 依赖反转原则
认为一个方法应该遵从“依赖于抽象而不是一个实例”[5] 的概念。依赖注入是该原则的一种实现方式。
“组合替代继承”:是说“用组合比用继承好”;
“笛米特法则”:是说“类对其它类知道的越少越好”;
“共同封闭原则”:是说“相关类应该一起打包”;
“稳定抽象原则”:这是说"类越稳定,就越应该是抽象类";
如果有人问我,哲学研究什么?我会告诉他三个问题: 1、世界是什么? 2、我如何认识世界? 3、我该如何生活? 这三个问题基本概括了哲学最主要的三个分支:本体论、认知论和伦理学。 如果有人问我,计算机科学研究什么?我也会告诉他三个问题: 1、计算机能解决哪些问题? 2、计算机如何描述问题? 3、计算机如何解决问题? 分别是计算机的数学模型、计算机对物理世界的模拟和计算机的架构及实现。
回到一个古老的话题:程序是什么?
程序 = 算法 + 数据结构
程序 = 基于对象操作的算法 + 以对象为最小单位的数据结构
封装总是为了减少操作粒度,数据结构上的封装导致了数据数据的减少,自然减少了问题求解的复杂度;对代码的封装使得代码得以复用,减少了代码的体积,同样使问题简化。
面向对象方法是以认识论为基础,用对象来理解和分析问题空间,并设计和开发出由对象构成的软件系统(解空间)的方法。 由于问题空间和解空间都是由对象组成的,这样可以消除由于问题空间和求解空间结构上的不一致带来的问题。简言之,面向对象就是面向事情本身,面向对象的分析过程就是认识客观世界的过程。
软件开发模型里面有两种方式,一种是自顶向下的逐步分解方法,另一种是自底向上的逐步归纳法,两种方法可以同步应用在一个工程中。
SOLID(单一功能、开闭原则、里氏替换、接口隔离以及依赖反转)
S 单一功能原则
认为对象应该仅具有一种单一功能的概念。
O 开闭原则
认为“软件体应该是对于扩展开放的,但是对于修改封闭的”的概念。
L 里氏替换原则
认为“程序中的对象应该是可以在不改变程序正确性的前提下被它的子类所替换的”的概念。参考 契约式设计。
I 接口隔离原则
认为“多个特定客户端接口要好于一个宽泛用途的接口”[5] 的概念。
D 依赖反转原则
认为一个方法应该遵从“依赖于抽象而不是一个实例”[5] 的概念。依赖注入是该原则的一种实现方式。
“组合替代继承”:是说“用组合比用继承好”;
“笛米特法则”:是说“类对其它类知道的越少越好”;
“共同封闭原则”:是说“相关类应该一起打包”;
“稳定抽象原则”:这是说"类越稳定,就越应该是抽象类";
如果有人问我,哲学研究什么?我会告诉他三个问题: 1、世界是什么? 2、我如何认识世界? 3、我该如何生活? 这三个问题基本概括了哲学最主要的三个分支:本体论、认知论和伦理学。 如果有人问我,计算机科学研究什么?我也会告诉他三个问题: 1、计算机能解决哪些问题? 2、计算机如何描述问题? 3、计算机如何解决问题? 分别是计算机的数学模型、计算机对物理世界的模拟和计算机的架构及实现。
回到一个古老的话题:程序是什么?
程序 = 算法 + 数据结构
在计算机的世界里,数据就是一个个比特的组合;代码的执行流程就是顺序、分支、循环的程序结构的组合。用计算机解决问题,就是用程序结构的组合去重新排列数据的组合,得到结果。为了从庞大的输入数据(从 bit 的角度上看,任何输入数据都可能非常的庞大),通过代码映射到结果数据。我们就必须用合理的数据结构把这些比特数据组合起来,形成数量更少的单元。
这些单元,就是对象。对象同时也包括了对它进行操作的方法。这样,我们完成了一次封装,就变成了:程序 = 基于对象操作的算法 + 以对象为最小单位的数据结构
封装总是为了减少操作粒度,数据结构上的封装导致了数据数据的减少,自然减少了问题求解的复杂度;对代码的封装使得代码得以复用,减少了代码的体积,同样使问题简化。
面向对象方法是以认识论为基础,用对象来理解和分析问题空间,并设计和开发出由对象构成的软件系统(解空间)的方法。 由于问题空间和解空间都是由对象组成的,这样可以消除由于问题空间和求解空间结构上的不一致带来的问题。简言之,面向对象就是面向事情本身,面向对象的分析过程就是认识客观世界的过程。
软件开发模型里面有两种方式,一种是自顶向下的逐步分解方法,另一种是自底向上的逐步归纳法,两种方法可以同步应用在一个工程中。