Ada的学习阶段性的总结

终于我还是决定静下心来写一点学习Ada的感受,也算是作一个阶段性的总结吧,我不是一个很会写作的人,写的东西多是干吧吧的,没有什么味道,所以自然也就不想写,再加上自己的能力实在是不行,写出来的东西就更没有价值了,有时候看到网上写的很好的博客文章,自己都很感动,觉得这些作者真的是用心了,写文章还是要花心思和时间的。
好了,费话就不说了,下面开始我的内容。
当你看Ada的字眼时,你脑子里第一想到的是什么呢?也许有人到现在都还不知道Ada是什么东西吧,但是我想对于一个IT从事人员,或者是一个科研人员来,他一定是知道的,毕竟Ada是程序设计语言和软件工程史上的一个历史性的事件吧(也许这样说不对),因为我不知道如何形容。
对于Ada语言的历史,我不想再多说什么了,因为wiki里面说了比较详细了,同时有很多的博客都作了不知道多少次的转载,内容基本上都是关于Ada语言的来源的,重复的太多,似乎有点让人烦了,所以这里我就不多说了。
我想强调的:Ada不是简单的一门程序设计语言,它的价值最大的体现在超大型系统,长使用期系统,高实时高可靠系统,所这一切都是在它产生之前由美国军方为主体提出的需求文档中作出明确的。
下面我就分别从上面的几个Ada的关键特点出发,谈谈我的学习感受,在谈感受之前,我想说说我为什么在学习Ada语言,也许很多人不知道由Ada语言构建的系统目前仍在一些非常重要的角落里默默,这些系统有一些是普通公民要接触的,比较银行,航空,铁路,还有一些是普通公民看不到也接触不到,这些系统都是用极高的费用构建的,它们仍在维护,升级,当然也有新的系统在开发之中,所以你可以看到,即使现在市场上都找不到Ada的书了,但是Ada的国级标准仍然在发展中的原因,最新的Ada标准是2005年制定的,其实每一个国家也都有它自己在特定领域对Ada语言的定制和修改,但是语言的核心没有变,变的只是用于特定领域的附属。可能我学习Ada是出于工作和科研的需要,不过就算你需要,也可以看看,看看这个神秘的语言到底为什么那么神秘,就算是当作一种工作之下的休息吧。
Ada的设计不像是其它的任何一门语言,其它的语言多是其设计者在自己的工作中,根本自己的需要慢慢作出来的,可以很明显的看出来,比如C/C++,Erlang, Python等,几乎没有例外,这样的产生自然有它自己的好处,那就是这些语言对于解决它产生领域的问题有着很好的能力,因为它就是在实践中产生,接受实践的检验的,成功了所以生存了下来。那么Ada又不同在哪里呢?首先Ada不是由某一个人设计的,它是由美国军方出资支持设计的,可能也是这个世界上唯一由政府主持设计的程序设计语言了,其次,也是最重要的它的设计是由全世界的重要计算机科研机构共同参与的,并由需求文档做起,开始设计的。说到这里,你一定知道了,Ada的设计本身得益于软件工程思想。在学习Ada的过程中,我深深的感受到这一点,那就是Ada工程文档的组织,软件设计的过程都融入了软件工程的思想,这一点上,我觉得做的比C++要好。那么为什么会这样呢?这是Ada设计之初就是在需求文档中提出的要求----“Ada是为大系统长生命期的软件开发面设计的语言”。在90年代之前,一个软件系统的设计相当程度上决定于构建它的语言,而90年代之后,一个系统的设计相当程度上决定于它的软件设计体系,这个设计体系体现的就是软件工程的思想,而Ada就办演义了当时处于这个90年代的转折点上的重要角色。
Ada的整个设计体系都是体现了结构化的软件工程思想的。从它的以包为基石的工程文件组织,到在语言级对并行机制的支持,每一点都可以看的出来,一个语言设计的好坏,相当程度上应该看这个语言中元素的“正交性”做到了什么样的程度,在一点上我觉得Ada作的比其它相当多的语言要好,当然C作为一个系统语言,其主要强调的是提供一个最小的功能集。我更喜欢把Ada和C++进行比较。我这里总是说Ada如何的好,但是我没有白日提供一些有力的说明数据或者程序代码,这一方面是因为我没有时间,另一方面是因为我现在学习的还不是很深,没有很多现存的例子拿出来看一下。
用Ada做工程,你可能有一种很明显的感受,那就是当工程的整个体系设计完成后,编码的本身有一种很清楚的感受,为什么呢?我觉得这和Ada的管理机制有关系,Ada中的包机制做的几近完美,将对外的部分和对内的部分分开,到外都是这样,比于C++中提供的那种过于灵活而带来的不一致性要好的多,做工程本身就是要对系统和各个部件都有一个最大程度的一致性的控制,在这一点Ada做的也比C++要好, 在90年代的时候,CAE在软件开发中的应用还不是很多,但在当时CAE已经可以很有生产力的应用于使用Ada的系统开发中去,这一点绝对不是现在使用的UML那种层面的东西。
Ada在语言层面实现了并行机制,为什么要这样做呢?Ada的最初设计是用于军用的大型嵌入式系统,比如火控装备,在一个对实时性要求非常高的系统中,并行的实现成为必需,所以Ada将并行加入语言中去,有其无比重大的实际意义,我们可以想想我们使用C/C++是如何实现并行的,我们要使用系统底层的低级通信原语,这本身给程序员的开发带来的极大的复杂性,通时由于这种复杂性的增大和扩散也使得整个系统的稳定性被降低了。在语言级实现的并行和现在的其它多用解释性语言如Java不同(当然本身没有用Java做东西,也没有深入的学习Java),Ada的并行借助的任务的会合机制是稳定性极高的。
也许你不喜欢Ada的代码书写,觉得它显得冗余,不过我想说的这只是你的感觉,如果你使用Ada一段时间,你就会有新的感受了,它的代码看像冗余,这是Ada作出的选择,就是C++在设计之初没有加入自动垃圾回收机制一样,Ada是让你相比C++那种“20设计,20编码,60调试和测试”改成“40设计,40编码,20调试和测试”。

我也说说Ada的不足之处,当然这种不足是我觉得,不是对于所有人都是这样的,Ada产生的年代里,面向对象还没有成长,所以那个时候的软件开放方法学主要是结构化的,而后来的现在的软件开发方法学主要是面向对象和面向组件的,当然而底层高实时部分依然是面向过程结构化作为主流。所以Ada的面向对象实现的起来给我感觉是过于复杂了,当然也可能由于在面向对象方面,C++先入为主的原因导致我觉得Ada的面向对象不够完全吧。但是必须承认的事实是Ada程序中的一切都装在包里的,那当然也包括Ada中的对象,Ada中没有像C++中的那样的物理类,所以理解它的面向对象自然要复杂一些。事物总是有得必然有失吧,Ada借助于“包”机制实现了它的整个体系整合软件工程思想,一切在Ada中都是可以扩展的,这是以包的体系来保证的,但是在后面这两样给面向对象的实现的带来了不协调性。

今天就先写到这里吧,这只能算是一个开始吧,Ada的学习之路还长啊

最后祝愿我们的祖国国防事业走在世界的前列

posted @ 2011-12-01 14:59  上官惜玉  阅读(985)  评论(0编辑  收藏  举报