编程的本质

发布于: 2020 年 06 月 16 日
编程的本质

CS(Computer Science)

一门运用计算机解决问题的科学

计算机设备运用计算方法解决问题。

找出解决问题的方法和途径,分析解决问题的效率和可行性。

“软件工程”是训练学习编程学科。

编程(Programing)

编程是一种工具(artifact),它是我们用计算机来解决计算机科学中提到的问题工具,是计算机科学的一部份。

编程的本质

计算机只能识别 0 和 1 也就是二进制(binary),0 和 1 分别代表通过或者断开(on or off)。机器语言(Machine Language)一种计算机能懂的语言,能够把左移或者右移等指令转换成一串 0 和 1 的序列。机器语言由计算机集成芯片定义

为了方便人阅读机器语言,发明了汇编语言,定义助记符来描述机器语言指令。

高级语言

人很难写出计算机读懂的机器语言,所以开发出了高级语言(High-level Language)。

  • Java

  • C

  • C++

  • BASIC

  • Fortran

  • .net

  • ...

微处理器只能识别机器语言,想要计算机理解高级语言需要把它翻译(编译)成机器语言,这也是计算机科学的一部分。不同的高级语言编译过程不完全一致。

源代码和目标代码

程序员编程及是在写高级语言代码,这些代码被称为源代码(Source Code),源代码最终被编译成的机器语言被称为目标代码(Object Code)。

经典软件编译流程

编译器将源代码文件编译成目标代码文件,链接计算机提供的库文件组成一个更大的目标代码文件,这就是我们说的可执行程序或应用程序。

Java 编译过程

Java 编译器将源代码文件编译成 Java 字节码 (Java Bit Code), 一种人也读不懂计算机也读不懂的中间语言。类似的,把编译后的的 Java 字节码和一些包含中间指令的 Java 字节码文件链接成一个大文件,叫做 Jar(Java Archive File)。运行在 Java 提供的 JVM(Java Virtual Machine)上。

不同的操作系统,不同的微处理器能够识别的机器语言是不一样的,这就要求编译器能识别所有机器,但是大多编译器做不到。Java 编译机制,产生的字节码运行在 JVM 上不需要关注不同机器不同操作系统,只要求计算机上安装了对应的

JRE(Java Runtime Enviroment),由 JVM 来充当编译器的角色。也就是说,编写的 Java 源代码经过 Java 编译成字节码文件,就可以在安装了 JRE 的计算机上运行,不需要根据不同计算机重新编译。

面向对象编程

语言描述机器语言&汇编语言对基础机器进行抽象高级语言(非面向对象语言)对计算逻辑进行处理面向对象语言对问题领域进行抽象

什么是面向对象编程

  • 万物皆对象

  • 程序是对象的集合,它们通过发送消息来告知彼此所要做的。

  • 每个对象都有自己的由其他对象所构成的存储。

  • 每个对象都拥有其类型。

  • 某一特定类型的所有对象都可以接收同样的消息。

什么是对象? Booch对于对象的描述:对象具有状态、行为和标识。

  • 状态:表明每个对象可以有自己的数据。

  • 行为:表明每个对象可以产生行为。

  • 标识:表明每个对象都区别于其它的对象。(唯一的地址)

无状态对象:对象不包含数据,没有状态可以修改,没有行为。

面向对象编程的三要素(特征)

封装性( Encapsulation)

  • 隐藏实现细节(访问控制)

  • 定义接口

继承性( Inheritance)

  • S-A关系

  • HAS-A关系(组合)

多态性( Polymorphism)

  • 后期绑定(虚函数)

  • 向上转形( Up Casting)

面向对象编程与面向对象分析

我们大部分开发人员并没有按照面向对象的理念进行编程,大多只是使用面向对象语言进行编程,没有面向对象方式编程还是面向过程。

面向对象的本质:

面向对象编程不是使用面向对象的编程语言进行编程,而是利用多态特性进行编程。

面向对象分析是将客观世界,即编程的业务领域进行对象分析。 充血模型与贫血模型领域驱动设计DDD

DDD 方法论实质就是面向对象编程,是面向对象设计的一种落地。

面向对象设计的目的和原则

面向对象设计的最终目的,是使软件达到“强内聚、低耦合”,从而使软件:

  • 易扩展 - 易于增加新的功能

  • 更强壮 - 不容易被粗心的程序员破坏

  • 可移植 - 能够在多样的环境下运行

  • 更简单 - 容易理解、容易维护

面向对象设计的原则

  • 为了达到上述设计目标,有人总结出了多种指导原则

  • “原则”是独立于编程语言的,甚至也可以用于非面向对象的编程语言中。

设计模式( design patterns)

设计模式是用于解决某一种问题的通用的解决方案。

Gang of Four (Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides)TH T 大类23种基本的设计模式。

在更细分的领域当中还可以总结出许多设计模式。

总结

编程的本质: 工程师使用编程语言编写源代码,以“计算机”为载体,编译构建成运行在“计算机”上的应用程序。实际上是通过编程的手段利用计算机,分析、解决现实问题。在这个过程中遵循一定的原则、采用经典通用的设计模式来更好的应对现实问题变化。

Reference

斯坦福大学公开课:编程方法:计算科学发展史

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

陈皮

关注

还未添加个人签名 2018.04.26 加入

还未添加个人简介

评论

发布
暂无评论
编程的本质