透过本质和发展看编程
软件开发简史
最早的程序编程探索 - 莱布尼兹的奇思怪想
最早的程序员 - Ada
什么是程序?什么是计算机?
形形色色的编程语言
汇编语言
Basic语言
Perl语言
C语言
C++语言和Java语言
智慧老师说:要从编程的历史看编程的本质和未来 。我的理解是透过发展史,洞悉发展的本质和规律,只有这样才能紧跟发展,不被历史淘汰。编程如此,其它行业也是如此。
要成为架构师一定要站得高,看的远,思维打开,不能只局限于眼前。
编程语言的实质
编程的目的:用计算机来解决现实世界的问题
编程的过程:在计算机能理解的模型和现实世界之间建立一种联系
编程语言是一种“抽象”的机制,问题是对“谁”来抽象
抽象的种类
对基础机器进行抽象 --> 机器代码和汇编语言
对计算处理逻辑进行抽象 --> 非结构化语言(如Basic)
开始对问题领域进行一定程度的抽象 --> 结构化程序设计
直接表达问题空间内的元素 --> 面向对象的程序设计
编程的核心要素
编程是一个生产过程,这个过程具备的三要素是:程序员、计算机、客观业务领域。
汇编语言是面向劳动工具的编程
Basic等高级语言是面向劳动者的编程
面向对象编程也可以理解为面向劳动对象编程
编程语言的发展历已经经历了生产三要素的全部要素了,最终编程语言发展到了面向对象,因此即使后续再出现新的编程语言,它也应该是面向对象的。
面向对象是编程语言的最终形式
面向对象语言的对象也有细分:客户、订单、商品等等,随着数据大爆炸,数据量的激增,最近几年出现了面向数据编程,例如:大数据编程、AI编程(机器学习、深度学习等)
面向对象编程
万物皆对象
程序是对象的集合,她们通过发送消息来告知彼此所要做的
每个对象都有自己的由其他对象构成的存储
每个对象都拥有其类型
某一特定类型的所有对象都可以接收同样的消息
什么是对象
状态:表明每个对象可以拥有自己的数据
行为:表明每个对象可以产生行为
标识:表明每个对象都区别于其他对象(有唯一的存储地址)
面向对象编程的三要素
封装性
- 隐藏实现细节
- 定义接口
继承性
- IS-A关系
- HAS-A关系
多态性
- 后期绑定
- 向上转形
面向对象设计的目的和原则
目的
强内聚,低耦合,从而使系统
易扩展 - 易于增加新的功能
更强壮 - 不容易被粗心的程序员破坏
可移植 - 能够在多样的环境运行
更简单 - 容易理解、容易维护
原则
常见的软件设计原则如下:
开闭原则(OCP)
OCP(Open-Close Principle),对扩展开发,对修改关闭,它是软件设计中也是最重要的一种设计原则,它是面向对象设计的核心所在,遵循这个原则可以使程序可维护,可扩展,可复用,灵活性好。
依赖倒置原则(DIP)
DIP(Dependence Inversion Principle),抽象不依赖实现,而是实现依赖抽象。也可以看做针对接口编程,不针对实现编程
里氏替换原则(LSP)
LSP(Liskov Substitution Principle),子类型必须能够替换掉它们的基型。其实就是任何基类可以出现的地方,子类一定可以出现,LSP是对OCP的的补充,OCP的关键步骤就是抽象,而LSP则是对抽象后的具体实现步骤的规范。
单一职责原则(SRP)
SRP(Single Responsibilities Principle),就一个类而言,应该仅有一个引起它变化的原因,也就是说类的职责要单一。SRP其实可以看做是低耦合、高内聚在面向对象原则上的引申,因为职责越多,能引起变化的原因就越多,这样导致职责依赖,大大提升了内聚性和耦合性。
接口分离原则(ISP)
ISP(Interface-Segregation Principle),不应该强迫客户依赖于它们不用的方法。一个类对另外一个类的依赖性应当是建立在最小的接口上的,不要尝试依赖存在不使用功能的接口,否则将面临由于这些不使用的方法的改变所带来的改变。
具体设计原则可以通过下述导图了解
软件设计的“臭味”
不好的软件会发出下述“臭味”
僵硬 - 不易改变
脆弱 - 只想改变A,结果B被意外的改变
不可移植 - 不适应环境的变化
导致误用的陷阱 - 做错误的事情比做正确的事情更容易,引导程序员破坏原有设计
晦涩 - 代码难以理解
过度设计
版权声明: 本文为 InfoQ 作者【拈香(曾德政)】的原创文章。
原文链接:【http://xie.infoq.cn/article/6bbf3ec347f7ca3de675e3733】。文章转载请联系作者。
评论 (3 条评论)