编程的本质
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
版权声明: 本文为 InfoQ 作者【陈皮】的原创文章。
原文链接:【http://xie.infoq.cn/article/a512b04cab3507c628121b795】。文章转载请联系作者。
评论