透过本质和发展看编程

用户头像
拈香(曾德政)
关注
发布于: 2020 年 06 月 17 日
透过本质和发展看编程

软件开发简史

最早的程序编程探索 - 莱布尼兹的奇思怪想

最早的程序员 - 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被意外的改变

  • 不可移植 - 不适应环境的变化

  • 导致误用的陷阱 - 做错误的事情比做正确的事情更容易,引导程序员破坏原有设计

  • 晦涩 - 代码难以理解

  • 过度设计



发布于: 2020 年 06 月 17 日 阅读数: 989
用户头像

拈香(曾德政)

关注

还未添加个人签名 2018.04.29 加入

还未添加个人简介

评论 (3 条评论)

发布
用户头像
面向对象原则的导图赞👍
2020 年 06 月 17 日 23:08
回复
用户头像
感谢分享原创内容,首页推荐,期待更多精品。
2020 年 06 月 17 日 17:40
回复
好的,我会继续努力的
2020 年 06 月 17 日 18:56
回复
没有更多了
透过本质和发展看编程