架构师训练营第二周学习总结
1.软件开发的发展历程和阶段特点
与其说是软件开发历史,更像是软件工程化历史。
第一阶段:软件编程人员在没有编译器的时代,主要面向机器进行开发,早期更偏向底层电信号进行编码,通过高低信号实现二进制的 01 输入,进行科学计算。经过一段时间的发展后,通过稍微高级一些的汇编语言,我们可以操作寄存器以及提供运算符,实现了对计算机组成模块的过程编程。
这一阶段我们理解是面向机器的开发过程。
第二阶段:进入到高级语言阶段,我们首先使用了 C 这样的面向过程的开发语言,让人们通过更易懂的语法来实现面向过程的软件开发,再用编译器转义成机器指令。这个过程的软件面向的是过程性的短流程业务,对于现实世界中的领域问题不好描述,从而在这一阶段引发了软件危机,许多大型软件项目在投入了大量人力、物力后都失败了。
第三阶段:我们在高级语言中又持续延伸出面向对象的软件开发方法,这一阶段是我们目前熟悉的阶段,即用对象、对象行为和对象间的关系的方式来描述我们现实世界中的领域问题,通过继承、多态等面向对象的特性,持续优化我们软件工程中的方法论,实现了我们现代的软件编程的架构方法。
2.面向对象设计的基本原则
一个软件要面向着“高内聚、低耦合”的方向发展,这样的优良软件设计可以使得我们的软件更易于维护和扩展。这里就有一些原则可以帮助我们去设计这样的软件。
2.1 开闭原则
有一句话表述就是:“我们应该尽可能在不修改已有代码的情况下进行扩展”。这是我们软件开发一个准则,这样带来的好处就是,我们的软件可以不断提供新的行为特性,让我们的软件可以应对更多新需求,同时已经存在的代码可以保持不变,这样已经经过测试的代码的健壮性是有保证的、安全的、可复用的。 如果实现开闭原则,就引出了我们下一条原则,依赖倒置原则。
2.2 依赖倒置原则
依赖倒置原则要求我们,高层不依赖低层,低层也不直接依赖高层,高层和低层都依赖于一个抽象,不依赖实现进行编程,针对接口进行编程。如果我们不能坚持依赖倒置原则,那就无法很好实现开闭原则,所以满足依赖倒置原则是遵守开闭原则的方法。
2.3 里式替换原则
里式替换原则简单说就是父类出现的地方,都可以用子类进行替换,替换后不会影响程序的行为。这方便我们检验对父类、子类的划分是否合理,通俗来说,子类的要求不能比父类更严苛,例如访问权限不能从 public 缩小成 private,
这告诉我们:
子类可以扩展父类的功能,但不能修改父类的功能。
在满足里式替换原则情况下子类可以替换父类。这里需要注意,子类出现的地方用父类替换却不保证成立。当我们出现不满足里式替换原则的场景时,我们可以通过两种方法来解决:
(1)提取公共行为作为父类;
(2)通过组合,把一个类作为另一个类的成员;
2.4 单一职责原则
单一职责原则要求我们设计的类,只能因一个因素的改变而改变,如果任何改变都需要影响这个类,那么这个类就不满足单一职责原则。我们应该把一个类的职责范围确定好,不要设计一个大而全的类,这样的类会因为需求变更而被频繁修改。
2.5 接口分离原则
接口分离原则和单一职责原则是类似的思路,也是把接口设计成一类业务专用的接口,这样我们的高层依赖才不会操作到他不需要的方法,导致因为某些原因不小心操作了不需要的方法。
以上的几个原则,核心是开闭原则,而其他原则是围绕核心原则的一些具体实施手段。
版权声明: 本文为 InfoQ 作者【Gosling】的原创文章。
原文链接:【http://xie.infoq.cn/article/71fd64803540ea3195c526b58】。文章转载请联系作者。
评论