[架构师训练营] 第二周学习总结
本周主要学习面向对象编程的由来, 本质和未来.
1.编程的由来
人类想制造出可编程的计算机器, 所谓的可编程, 指计算机器运算所读的不仅仅是数值数据, 还有运算逻辑本身, 即程序.
随着莱布尼兹, Ada, 图灵, 冯诺依曼等计算机开创者们的不断努力, 机器从可编程的织布机, 演变到现在的微型计算机.
编程语言, 也由汇编到结构化语言的演变, 再演变出当今的面向对象编程语言.
2.编程的本质
编程的本质, 实质上就像计算机前辈们, 不断地对问题进行分析和抽象, 从而构建模型, 再对模型不断地设计和抽象, 最终演化出了更好的模型和先进的成果.
其目的是, 用计算机来解决现实世界的问题。在计算机所能理解的“模型”(解空间)和现实世界(问题空间)之间,建立一种联系。
3.编程的未来
有了面向对象的编程语言, 那么编程的未来, 应该就是对程序进行设计了.
4.面向对象编程
4.1 面向对象的描述
万物皆为对象
程序是对象的集合,它们通过发送消息来告知彼此所要做的。
每个对象都有自己的由其他对象所构成的存储。
每个对象都拥有其类型。
某一特定类型的所有对象都可以接收同样的消息。
4.2 对象具有状态、行为和标识
状态:表明每个对象可以有自己的数据。
行为:表明每个对象可以产生行为。
标识:表明每个对象都区别于其它的对象。(唯一的地址)
4.3 面向对象编程的三大特性
封装: 访问控制, 定义接口.
继承: 对接口的重用, IS-A 关系, HAS-A 关系 (组合).
多态: 后期绑定, 向上转形.
4.4 面向对象设计的目的
面向对象设计的目的: 强内聚、低耦合,从而使系统易扩展, 更健壮, 可移植, 易理解, 易维护.
5.设计模式
设计模式是用于解决某一种问题的通用的解决方案, 也是语言中立的, 它贯彻了设计原则。
5.1 设计臭味
违反面向对象设计的目的, 会发出"臭味":
僵硬: 不易改变, 牵一发而动全身。
脆弱: 只想改 A,结果 B 被意外破坏。
不可移植: 不能适应环境的变化。
导致误用的陷阱: 做错误的事比做正确的事更容易, 引诱程序员破坏原有的设计。
晦涩: 代码很难阅读和理解, 没有很好的表现出意图。
过度设计、copy-paste 代码。
5.2 设计原则 (SOLID)
单一职责原则(SRP): 一个类或者模块只负责完成一个职责 (或者功能).
开/闭原则(OCP): 对于扩展开放, 对于更改封闭.
Liskov 替换原则(LSP): 子类型(subtype) 必须能够替换掉它们的基类型(base type). 判断依据: 子类替换父类之后, 程序能够正常运行.
接口分离原则(ISP): 不应该强迫客户程序依赖它们不需要的方法.
依赖倒置原则(DIP): 高层模块不能依赖低层模块, 而应该都依赖于抽象. 并且, 抽象不能依赖实现, 而是实现依赖抽象.
版权声明: 本文为 InfoQ 作者【Trent】的原创文章。
原文链接:【http://xie.infoq.cn/article/9fda52c2d438d5840f96e1221】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论