欢迎来到天天文库
浏览记录
ID:56237674
大小:56.50 KB
页数:4页
时间:2020-03-23
《编程的思考(精品).doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、观《C++与90年代程序设计语言发展趋势批判》1■IANJOYNER)bjectandComponentTechnologySeries编程的思考在CSDN上读到儿篇《C++与90年代程序设计语言发展趋势批判》(O+??ACritiqueofC++andProgrammingandLanguageTrendsofthe1990s,3rdEdition,以I、简称《C++批判》)的译著,也读到不少C++支持者的争论,于是,拿E文的原文来读,顿觉感想颇多,不书不快!书与作者:《C++批判》是其作者IanJoyer在UNISYS公司使用C++进行系统软件开发的过程中逐步完
2、成的。起初的第一、第—版完成于1992年,那时还只是在comp.lang.c++新闻纽里发表。尔后,随着IanJoyer在面向对象领域的深入研究,《C++批判》的第三版也于1996年面世,并且演变成—木数十页的小册子,其内容也山单纯的C卄变成为多种程序设计语言的比较,其中包括了当时正如日中天的Java和BertrandMeyei•在《面向对象软件构造》—书中设计的Eiffel。到了1999年,《C卄批判》的第四版更是编纂成书,名为《对象揭密:Java,Eiffel与C++》(ObjectsUnencapsulated:Java,EiffelandC++??,Pren
3、ticeHall)2,在Amazon±颇有些成绩。IanJoyer对读者的建议非常有趣:Buyit(Eiffelusers),borrowit(Javausers),orstealoneandceremoniallyburnit(C++users).(Eiffel用户买来看,Java用户借来看,C++用户应该偷一本来烧掉!:))读者是谁?但凡熟悉BjarneStroustrup,读过侯捷先生文章的人都知道,多数专家是不愿虚耗粹力于不同程序设计语言之间的比较,因为“主流语言Z间的合理比较要耗费很大的椿力,需要在广泛的应用领域有充分经验”,而且“作者们尽力表现的公正无私
4、,但是最终都是无可救药地偏向于某一种特定的应用程序,某一种特定的编程风格,或者某一种特定的程序员文化”(C++Z父访谈录)-O而IanJoyer却一下子将当时面向对象领域的三种最主流的语言放到一起比较,h—开场就撇下了公正无私的架子:C++只是将面向对彖与传统的思维模式结合,存在很多问题,Java部分的解决了C++中存在的问题,而Eiffel则是完全经山面向对彖的思维方式设计而来,与理想的编程模式最为接近。如此偏颇,不免让人猜想作者与EiffelW亲!(IanJoyer确实开发了一个Eiffel的编译器,并在网上变卖,但绝不至于要撰文来为自己的编译器广告)。看完《C
5、++批判》的前言部分,答案便冇了,本文的出发点在于面向对象的软件工程意念和面向对象语言的设计,而非一般童义的语言特性比较。山此,文章最贴和于从爭面向对象程序设计语言研究的读者,C++的程序员也大可以把这本书当成是C++专家经验的变相体现(见本文第4,5部分)一我个人以为木书对于Java和Eiffel的使用者帮助不大。另外,《C++批判》以一个独特的角度市视程序和程序语言的地位,发人深思。何谓程序?何谓程序语言?“程序即说明”,这是《C++批判》对程序的诠释,一方面是程序必须向编译器说明意欲何为(这是我们的通常认识),另一方面,程序白身也应该是其分析和设计的规格说明书
6、(specification)0编程不仅仅指编写代码,而是分析,设计与实现的全过程!据此,程序的特性必须山程序语言支持,《C++批判》引述了程序语言的定义:程序语言是一种规范,用于描述问题且易于改进。程序语言应该可以用來独立的完成以下工作屯(1)描述程序计算的目的。(2)将计算的过程组织成为一些具体的步骤。(3)在整个计算的过程中进行存储管理。如果程序果真能够自我说明,对软件工程将会是多大的福音啊!传统语言(C++)确实十分缺乏对软件工程的支撑,在完全分析实现步骤Z前,儿乎无法得知程序的日的。(别跟我提注释,那不是语言强制特性!而且,你真的写了足够注程吗?)Eiff
7、el提供了Precondition(前提)和Postcondition(结论)的语言概念,这对于程序的可读性和编译器对程序语义的理解无疑大右帮助,冇助于确保程序的正确。这也正是而向对象设计领域中“设计基于约定”(DesignByContract)在程序语言中的具体体现。5(“设计基于约定”是指所有接口(Interface)都需要显式说明其前提与结论,在采用接口继承设计组件时,组件必须在较接口松散的前提下,得出比接口更强的结论)另外,《C++批判》认为,一-种高级的编程语言应该将一些琐碎且与问题本身无关的细节移出程序员的职责范畴,而山编译器或运行支持系统代劳。而C
此文档下载收益归作者所有