计算机程序设计语言的发展,经历了从机器语言、汇编语言到高级语言的历程。 汇编语言源程序必须经过汇编,生成目标文件,然后执行。高级语言源程序可以用解释、编译两种方式执行。
在高级语言的程序设计中,我们又可以分为几个阶段:面向过程的编程、面向对象的编程、面向组件的编程以及标准化的Web Service的编程。
1.面向过程的编程
面向过程的语言可以说是最早出现的大众化的编程语言,结构化程序设计是程序设计发展史中一个比较重要思想C语言是最典型的代表,是一种紧密耦合的软件语言技术,用C语言编写的应用程序完成一大堆函数的编写,整个应用程序依赖于一些预先定义的全局变量。函数的可重用性很差。面向过程的最小抽象单位的“函数”。
2.面向对象的编程
面向对象编程的缩写是OOP。如C++、Java、C#等,将面向过程的相关的函数封装起来,消除全局变量,形成能够独立调用的对象。相对于面向过程的含有全局变量的编程,其耦合性已经降低。对象可以重用,可以继承和扩展。基于对象的各种设计模式也随之产生。然而对象之间还有相互调用的现象。还存在一定的耦合性。这些对象只能本地调用,不能远程调用。OO的是以对象作为基本的抽象单位,一个对象可以有自己的数据和职责。
3.面向组件的编程
面向组件编程的缩写是COP。COP是对OOP的补充,帮助实现更加优秀的软件结构。将面前对象的程序进行封装,定义一些接口让外部调用。如J2EE(EJB)CORBA、DCOM等。组件的粒度可大可小,需要取决于具体的应用。
COP是对一种组织代码的思路,尤其是服务和组件这两个概念。比如Spring框架中,就采用了COP的思路,将系统看作一个个的组件,通过定义组件之间的协作关系(通过服务)来完成系统的构建。这样做的好处是能够隔离变化,合理的划分系统。而框架的意义就在于定义一个组织组件的方式。
COP最初的动机是为了实现远程分布式的调用。它有接口类,另外专门有实现方法类,因为它要事先定义接口类,客户端调用的也是接口类。接口类和接口实现类之间实现了一定程度的解耦。也就是说,客户端调用接口类时,不需要知道接口类是如何具体实现的,不需要引用服务器端的实现类。
在COP中有几个重要的概念:
服务:服务(Service)是一组接口,供客户端程序使用。例如,验证和授权服务,任务调度服务。服务是系统中各个部件相互调用的接口;
组件:组件(Component)实现了一组服务,此外,组件必须符合容器订立的规范,例如,初始化,配置、销毁。组件不是一个新的概念,Java中的javaBean规范和EJB规范都是典型的组件。组件的特点在于它定义了一种通用的处理方式。例如,JavaBean拥有内视的特性,这样就可以通过工具来实现JavaBean的可视化。而EJB规范定义了企业服务中的一些特性,使得EJB容器能够为符合EJB规范的代码增添企业计算所需要的能力,例如事务、持久化、池等。
所以,组件比起对象来的进步就在于通用的规范的引入。通用规范往往能够为组件添加新的能力(就像上面所讨论的),但也给组件添加了限制,例如你需要实现EJB的一些接口。以下我们将讨论组件的一些相关问题:
组件的粒度:组件的粒度是和系统的架构息息相关的。组件的粒度确定了,系统的架构也就确定了。在小规模的软件中,可能组件的粒度很小,仅相当于普通的对象,但是对于大规模的系统来说,一个组件可能包括几十,甚至上百个对象。
面向组件编程需要和特定的程序实现语言绑定。传输协议也是非标准化的,传输协议的不一致,导致各种不同组件之间无法互相调用,例如J2EE和DCOM无法互相调用。
4.面向服务的编程
面向服务的编程,英文简写为SOP,主要是面向Web Service的编程。面向Web Service的编程采用标准化的SOAP传输协议,不同厂商实现的Web Service之间可以相互调用。如J2EE所提供的Web Service服务可以被.NET来调用。反过来,.NET也可以调用J2EE所提供的Web Service服务。
作为Web Service,客户端不需要知道服务器端是如何实现的,服务器端所用的是什么样的程序语言,客户端也不需要安装特定的Stub程序。
从上面可以看到,IT程序语言发展的过程实际上是一个逐步降低耦合性的过程,也是一个接口和接口实现之间逐渐分离的过程。
但是Web Service的SOAP传输协议尽管是一种标准的传输协议,但是它毕竟还是一种特殊的传输协议,一种特定的技术。Web Service并不支持其他的传输协议,如RMI等。所以说Web Servcie还是和特定的SOAP技术绑定在一起的。