面向对象编程的学习路线
23 Aug 2018面向对象设计与编程是目前最主流的编程范式。尽管函数式编程风头正劲,尽管有诸多贬低,可编程的世界或者说大部分商业软件的开发却依旧由OO占领着。从其他角度,譬如面试的考察频率也能看出,OO依旧是世界的主流。可OO的范围很庞大,从设计到编程,从各种概念到工具,如何才能学好呢?什么才是学习OO的正确路线呢?本文算是从中级继续进阶的建议,而非新手的学习指南。初学OO的新手可能会简单直接一些,《Code Complete》、《Clean Code》这几本经典著作,边读边在实战中体会。在各种项目中摸爬滚打几年,也就能看到自己的瓶颈,这时也许这篇文章能有所帮助。
1.哲学:知识的组织
面向对象跟普通的设计与编程有什么区别?上升到哲学的层面是不是有点太夸张了?还真没有。深入学习OO虽然谈不上对你人生观、世界观重塑,但读几本好书至少能对你的程序设计观、编码观会产生深远的影响。关于这一部分,极力推荐两本书,相信你读过后一定不会后悔:
- 《Elegant Object》:基于“智能”对象之上的声明式编程,详见《优雅的对象》。
- 《Practical Object-Oriented Design in Ruby》:关注点由静态的Class转移到动态的Message将是你面向对象设计生涯的转折点!
还有一本《Object Thinking》,由于还没有开始看,所以先占个位子,不做大力推荐了。
当然,OO只是一种对计算,本质上对知识,有效的组织形式。你当然可以坚持认为世界是流动的、面向过程的,而非基于对象的,关键在于理解不同“哲学”背后的相同点。
2.工具:思想的武器
2.1 原则
关于OO的设计原则不少,围绕着基本的高内聚和低耦合,耳熟能详的原则有SOLID、ACID…… 就说最有名的SOLID吧:S单一原则、O开闭原则、L里氏代换、I接口隔离、D依赖倒置。关于这些原则,依然推荐阅读《Practical Object-Oriented Design in Ruby》,分析的非常透彻!
2.2 模式
提设计模式当然不能不提GoF“四人帮”,23种模式整理了软件工程不长的历史中凝结的经验精华。但学习什么东西都要注重的就是:不要过分贬低,也不要神化。你看似酷炫的设计模式,却是我朴实无华的语言特性。而所谓的模式,可能只是你对其尝试抽象失败后的产物。从另外的角度看模式,也许你会得到非常震撼的结论,详见《设计模式沉思录》。
3.实践:
3.1 重构
3.2 测试驱动
4.语言
Python:
5.方法论
领域驱动设计(DDD)