编程的发展和设计的美
编程语言的实质
目的:用计算机解决现实问题;
过程:在计算机所能理解的“模型”(解空间)和现实世界(问题空间)之间,建立一种联系;
本质:一种抽象工具,关键是看对“谁”抽象。
问题领域,即包含与系统所要解决问题相关的实物和概念的空间。
从抽象对象的变化,看编程语言的发展
第一阶段:对基础机器抽象,产生机器代码和汇编语言;
第二阶段:对计算逻辑抽象,产生非结构化的高级语言(Basic、Fortran等);
第三阶段:对问题领域进行一定程度的抽象,产生结构化的程序设计语言;
第四阶段:直接对问题空间的元素进行抽象,产生面对对象语言。
可以看到编程方法的演化路径为:汇编语言->高级语言->结构化设计->OOP。
什么是面向对象编程
第一个成功的面向对象语言 SmallTalk 描述:
万物皆对象;
程序是对象的集合,对象之间通过发送消息通信;
每个对象都有自己的由其他对象所构成的存储;
每个对象都拥有其类型;
某一特定类型的所有对象都可以接收同样的消息。
什么是对象
Booch 对于对象的描述:对象具有状态、行为、标识。
状态:表明每个对象都可以有自己的数据;
行为:表明每个对象都可以产生行为;
标识:表明每个对象都区别于其他的对象。
面向对象编程的三要素
封装
隐藏实现细节(访问控制)
定义接口
继承
IS-A关系
HAS-A关系(组合)
多态
后期绑定(虚函数)
向上转型
面向对象编程和面向对象分析
面向对象编程是利用多态特性编程,而非使用面向对象语言编程。
面向对象分析是将客观世界,即编程的业务领域进行对象分析。
充血模型和贫血模型
领域驱动设计DDD
面向对象设计的目的和原则
目的:高内聚、低耦合,使系统
易拓展 - 添加新功能
更健壮 - 不易被粗心程序员破坏
可移植 - 能够在多样环境中运行
更简单 - 容易理解、易维护
与之相反,不好的设计会让软件发出如下“臭味”:
僵硬 - 不易改变
脆弱 - 只想改A,结果B被意外破坏
不可移植 - 不能适应环境的变化
导致误用的陷阱 - 做错误的事情比做正确的事情容易,引诱程序破坏原有的设计
晦涩 - 代码难以理解
过度设计、copy-paste 代码。
原则:为达到上述目标而总结出的指导原则,常见的五大设计原则:
开闭原则
依赖倒置
里氏替换
单一职责
接口隔离
设计模式
设计模式是用于解决某一种问题的通用解决方案,贯彻了设计原则。
Gang of Four (Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides) 提出了三大类23种基本的设计模式:
创建模式
行为模式
结构模式
框架 VS 工具
框架是用来实现某一类应用的结构性的程序,是对某一类架构方案可复用的设计与实现
可同比于大厦的框架
简化软件开发者的工作
实现了多种设计模式,方便开发者高效设计和开发良好的程序。
工具,则是完成具体某项功能,供应用程序代码调用,提高架构师和开发者的开发效率。
而应用程序代码由框架来调用,保证架构落地。
总结
这里面的很多概念还值得仔细去推敲。体会编程与设计的美,在于领悟它们的精髓。
版权声明: 本文为 InfoQ 作者【林昱榕】的原创文章。
原文链接:【http://xie.infoq.cn/article/b1474f724383ff6339c783416】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论