您的位置:首页 > 移动开发 > Objective-C

程序设计方法的进化

2003-03-19 09:13 204 查看
                             程序设计方法的进化<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

一:开篇

从简单到复杂,从小到大,从低级到高级是人类认识世界的过程,程序设计正如同此。
从身边的一草一木到周围的天空和大地,到整个地球,太阳系,银河系,最终到整个宇宙,这是人类认识可感知世界的历程。
从在纸带机上敲打0和1到汇编,到结构化程序设计,面向对象设计(Object-oriented programme),面向主体设计(Agent-oriented programme),这是上个世纪程序设计的发展历程,但其最终将驶向何方,我们都在拭目以待。
这里引入一个术语---“粒度”来表达程序设计的发展方向,在纸带机上编程的粒度是位,0和1;汇编的粒度是一条条语句,mov  30H, ds ;结构化设计的粒度是函数,int add(int a, int b){……};面向对象设计的粒度是类,class  Man extend Object {…};面向主体的设计粒度是主体(Agent),人的化身;应用归纳原理,我们不难得出这样的结论,程序设计的发展是设计粒度从小到大的发展过程。这也正符合人类使用计算机模拟复杂社会的需要。面向主体是比面向对象更大的社会描述单位,因而也更适合用来解决复杂,大型问题。
结构化程序设计现在已经很少有人再讨论,因为它已经成为程序员的基本技能。面向对象程序设计现在正如日中天,但我相信在不久的将来面向主体设计将大行其道。下面将简单介绍和比较面向对象设计和面向主体设计。
二:面向对象与面向主体

从某一角度来看,客观世界是由由客观世界中的实体及其相互关系构成的,我们把客观世界中的实体抽象成问题空间的对象,于是我们得到了面向对象程序设计方法。对于面向对象设计我们可以用以下语言来描述:面向对象程序设计是通过对象,对象间消息传递等语言机制,使软件开发者在解空间中直接模拟问题空间中的对象及其行为,从而提供了一种直观的,自然的语言支持和方法学指导。面向对象设计的基本操纵单位为对象,即类的实例。对象间通过消息传递机制实现功能调用。使用封装,继承和多态等方法具体实现数据的安全操作,代码复用和方法重载。
社会是人和人与人之间关系的复杂组合体,我们用主体(Agent)来模拟人的思想和行为,进而用多主体系统(Multi-Agent system)模拟社会,于是我们得到了面向主体设计方法。对于面向主体设计我们可以用以下语言简单描述:面向主体方法是希望通过对人解决应用问题的智能行为进行模拟,在软件解空间中建立一种嵌入在不断变化,不确定世界中,能进行感知并能自主采取行动的计算实体。主体是含有心智成分,如信念,愿望,能力,职责,承诺等,的实体。主体程序控制主体的行为和心智状态,主体间通过各种类型的Speech Act原语实现通信。

为了得到对面向主体更清晰的认识,这里对面向主体和面向对象进行以下四方面的比较:
1:自主性

主体是位于某一环境中的一个计算实体,它有能力在该环境中自主的采取行动,即在没有人直接干预下能够采取行动,并能控制自己的行为和内部状态。对象不具有自主性,不能控制自己的行为。面向对象有public 关键字,如果将一个方法置于其下,则其他对象可任意调用该方法,拥有该方法的对象不能控制该方法是否执行。既面向对象通过直接的方法调用实现交互。面向主体是通过任务请求的方法实现交互,当主体A需要主体B来完成某个功能时,A不能直接调用B的方法和属性,只能向B发送一个任务请求,B返回结果,至于B如何完成,A无权知道。
2:反应性

主体能够感知它们的环境,如客观世界,用户,其他主体等,并以实时方式响应环境中发生的变化。对象不能自主感知外部世界,并实时做出反应。
3:社会性

主体能够在履行其自身职能的同时,还能够根据其求解状态和技能,在合适的时候与其他主体交互,以提高自己的问题求解能力或帮助其他主体的问题求解活动。而对象系统中的对象之间的关系是单向的调用关系,不存在相互作用。
4:学习能力

主体在运行过程中,通过学习以往的经验不断改善自己对同一问题的求解能力,而对象的方法却是一成不变的。假如主体M和对象N都可以求解Sin(x)和Cos(y),主体M可以通过自学习求解出Sin(x)+Cos(y),而对象N则不会,必须人工加入Sin(x)+Cos(y)函数。
看完上面的内容,请大家不要产生误解,即将面向对象和面向主体对立起来,认为是两种截然不同的方法,其实它们之间的关系是包含关系,即面向主体包含面向对象,面向对象设计方法的一切优点都可以被面向主体所吸收和容纳。从最初的SmallTalk到纯面向对象的Java , 面向对象的程序设计语言现在已经相当成熟;但到目前为止,还没有任何一种面向主体设计语言,我给不出详尽的面向主体的编程实现方法,这里讨论的只能称之为面向主体设计思想和方法。就目前的技术结构而言,面向主体的设计还需要靠面向对象程序设计语言来具体实现。
三:篇后语

面向主体设计技术的核心是人工智能,但用当前的硬件技术和知识表达方式开发人工智能始终缺少突破,现在的人工智能就象一个丑小鸭,生活在错误的环境中,故始终不能飞翔于蓝天。人工智能的发展亟待硬件技术和知识表达方式的撤底变革,变革后硬件我引用《骇客帝国》里的名词,称之为----母体:孕育智慧和生命的摇篮。从程序设计粒度从小到大的进化过程来看,我们可以预言程序设计方法的明天,答案是什么呢?从不同的角度分析我们这个复杂的世界,可以得到不同的答案。
四:参考文献

 姚莉,张维明:智能协作信息技术,电子工业出版社;
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息