计算机与编程的联系点在哪里?为什么计算机会支持编程抽象中的算法等?
计算模型学指出,,,计算机只能处理一种被称为计算机接受“确定的串行算法”,(未确定的比如AI,,,并行的算法正慢慢被发展我们所接触到的书中的算法都是串行的,即一次只能进行一次运算)串行就是面向过程中的子过程,给定一个输入就能产生一个输出(有出口和入口),,整个过程不产生死循环,,(算法正确性分析,,算法复杂性分析,,这样的课题保证以上过程能进行)这样就能最终够成一个系统
为什么在一门语言中总会有控制结构,数据类型这样的通用概念呢,有控制结构是因为如果你在汇编下编过程,就会知道这其实是所有机器(比如堆栈机啊)和虚拟机进行处理的基本方式(源于离散数学的计算模型),有数据类型(primate type而非oo wrapper datatype---也即ADT)是因为CPU也就只能按二进制的方式表达整型啊,浮点啊这些东东
一门语言更高级的就是,数据结构,线程,网络,界面,数据库,组件啊这些高级内容了,下面一一道来
有数据结构就是因为如果你在汇编下编过程,就知道程序是数据跟代码的结合体(计算机就是用代码来处理数据嘛),数据本身从数值数据,字串数据啊什么的泛化到了oo的class,,,那么在内存中这些数据该如何存放(及如何更高效地存放)以进行程序执行时的动态内存(就是数据流分析工程)呢,这就出现了数据结构,,,那么当这些数据不用时要等到下次用到的时候怎么办呢(就是字节流),这就是数据模型的持久化称为数据库技术(由于数据从基本型转到了OO的CLASS型,因此数据库技术也就进化到了OO的数据库),线程的泛化是并发,并发在很多时候都被要求用到,比如操作系统的多任务,网络中的一对多,数据库中的同步等等,因此一门语言必须不能回避并发性
注意数据跟资源还是有点区别的,打开任务管理器看到一个进程主程序只占一点内存(这往往是数据),可是你发现却占了很多pagefile(这往往是资源),,资源跟数据还是有点区别的,在PE文件中,资源文件指菜单啊,硬盘上的媒体文件啊,这些视窗资源,数据则指内存中的数据结构等
那么界面呢,这是因为现在用的都是GUI(GUI也就是表现抽象,一些时候它也跟并发性有关)了,WINDOWS用自己的OS级的GUI,类UNIX的操作系统有它的GTK等等,因此一门语言或库(语言跟库几乎是同重要的东西)也不能不考虑对某个具体平台的界面支持,那么WINDOWS的消息机制呢,这主要是因为WINDOWS是一种基于事件的异步系统(也就是等用户来触发某个消息,WINDOWS才能知道如何对它进行反映),因为又有不同的窗口(Windows就是窗口啊),这些消息(手标动作啊,键盘动作啊,计时器事件触发的消息啊,更新时的绘图消息啊,用户自定义消息啊)被发往不同的窗口,对于界面和消息Windows都提供了C语言级的API(因此用汇编都可以调用这些API,只要知道它们的调用方式),而如果用某个库比如MFC来封装这些API以简化对Windows平台依赖性的编程就更好了
网络提供了分布式计算,它与OO结合点就是RPC,RMI啊---这里体现了组合思想(注意这只是在网络间传送接口而非传送整个OO对象的方式来实现二个异地对象之间的交互),它与XML结合点就是JAX,OO与 WEB的结合就是SOAP啊,这些编程领域的东西都在随着人们的认识进行不同的分解与重整合,而且轴渐脱离某个平台。向跨平台发展,,这也就导致了构件的产生,人们希望用一种类似搭积木的方式(相对一门语言外部来说)来assemble(组合)一个应用,这些积木就是用不同语言开发的构件,因此需要提供一个交互用的统一接口(因此经常需要跟IDL技术结合),构件要相互协作发生作用形成最终的可运行系统因此需要部署,一般用XML来表达这种部署。比如我们一般说部属EJBS
也即,语言内部的只能是一个一个的CLASS,当这些CLASS脱离语言环境被分发(在二进制级以库的形式供外界使用)时,往往是以一个一个的组件的形式存在(而且要向外透露接口供使用它的客户使用)的,,
这些构件都是零碎的不能独立发生作用的,而且要实现比如对象同步,负载平衡,安全,持久等需要(这些需要统称为SOA需要),因此发展出一系列的中间件(对SOA的实现)来管理这些构件。