第一篇:C語言編程期末試題答案
科目:C語言編程 適用班級(jí): 11級(jí)計(jì)算機(jī)1、2班試題答案
一、單選題(每小題2分,共30分)
1.、A2、.B3、.D4、.A5、A6、A7、C8、.C9、.A.10、A11、.A12、C13、D14、A15、D
二、填空題(每小題1分,共20分)
1、把10賦值給變量S2、基本型、短整型、長(zhǎng)整型、無符號(hào)型,int、short、long、unsigned3、字母、數(shù)字、下劃線4、3.55、36、a=a*b7、a=a/b8、19、3.510、字母、下劃線
三.判斷題(每小題2分,共10分)
1、正確
2、錯(cuò)誤
3、錯(cuò)誤
4、錯(cuò)誤
5、正確
四、簡(jiǎn)答題;(每小題5分,共20分)
1、字符常量是由單引號(hào)引起的單個(gè)字符、字符串常量是由雙引號(hào)引字節(jié)起的字符序列,字符常量的存儲(chǔ)單元是一個(gè)字節(jié)而字符串常量所占的存儲(chǔ)單元比它實(shí)際的字符個(gè)數(shù)多一個(gè)
2、基本的輸入輸出一般分為三種:一是單字符的輸入與輸出,即getchar()和putchar()函數(shù);二是格式化的輸入與輸出,即scanf()和printf();三是字符串的輸入與輸出,即gets()和puts()函數(shù)3、1)C語言具有中級(jí)語言的特性2)C語言結(jié)構(gòu)性能強(qiáng)3)功能齊全4)適用范圍廣泛
4、編輯、編譯、連接、執(zhí)行
五、程序改錯(cuò)題(每小題4分、共8分)
1、錯(cuò)誤:scanf(“%d ”,i);正確:scanf(“%d ”,&i);
2、錯(cuò)誤:main正確;main()
六、編程題(第6分,共12分)、main()
{printf(“**********n”);
printf(“Very Good!n”);
printf(“**********n”);
}
2、main()
{inta=15, b=5,sum;
sum=a+b;
printf(“%d”,sum);
}
第二篇:編程語言學(xué)習(xí)心得
程序語言學(xué)習(xí)的總結(jié)
通過兩年的學(xué)習(xí),我們基本上掌握了C語言,C++和C#三個(gè)編程課程。對(duì)于程序設(shè)計(jì)語言的學(xué)習(xí),分為學(xué)習(xí)語法規(guī)定、掌握程序設(shè)計(jì)方法、提高程序開發(fā)能力,這些都必須通過充分的實(shí)際上機(jī)操作才能完成。課程上的安排除了課堂講授以外,學(xué)院設(shè)有專門課堂到實(shí)驗(yàn)室進(jìn)行上機(jī)操作實(shí)驗(yàn)。
要利用c語言學(xué)到的知識(shí)編寫c語言程序,即把c語言作為工具,通過上機(jī)才能檢驗(yàn)自己是否掌握c語言、自己編寫的程序是否能夠正確地解題。通過上機(jī)實(shí)驗(yàn)來驗(yàn)證自己編制的程序是否正確。在這種思想支配下,可能你會(huì)想辦法去“掩蓋”程序中的錯(cuò)誤,而不是盡可能多地發(fā)現(xiàn)程序中存在的問題。自己編好程序上機(jī)調(diào)試運(yùn)行時(shí),可能有很多你想不到的情況發(fā)生,通過解決這些問題,可以逐步提高自己對(duì)c語言的理解和程序開發(fā)能力。
在原有的C語言的基礎(chǔ)知識(shí)之上,初步接觸C++時(shí)感到比較簡(jiǎn)單易懂。但隨著之后的步步深入學(xué)習(xí),C++的不同之處以及其優(yōu)勢(shì)逐。從第二章引入了C++簡(jiǎn)單程序的設(shè)計(jì)。包括一些C++語言的概述,基本數(shù)據(jù)類型和表達(dá)式,數(shù)據(jù)的輸入與輸出,算法的基本東芝結(jié)構(gòu),以及自定義類型數(shù)據(jù)等知識(shí)。此部分多與C語言相似。之后又學(xué)習(xí)了函數(shù)的相關(guān)內(nèi)容,這里學(xué)到了新的知識(shí)要點(diǎn)----函數(shù)重載。該內(nèi)容尤其在現(xiàn)在做課程設(shè)計(jì)的時(shí)候尤為重要。類是C++語言的精華之所在,在學(xué)習(xí)中,我感覺到類和C語言中的結(jié)構(gòu)體有很大的相似之處,但在類中的構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)以及類的組合,經(jīng)常弄混淆一些概念。在這之后又學(xué)習(xí)了類的繼承與派生。這使得類與類之間形成了樹狀圖的模型,各子類可以訪問到父類的一些數(shù)據(jù)成員,同樣也實(shí)現(xiàn)了數(shù)據(jù)的之間的“共享”。我個(gè)人在編寫派生類的構(gòu)造函數(shù)和拷貝構(gòu)造函數(shù)時(shí),感覺很不熟練,后面章節(jié)的多態(tài)性主要學(xué)習(xí)了運(yùn)算符的重載,其本質(zhì)就是函數(shù)的重載。
在學(xué)習(xí)C#中,類是具有相同特性和行為的對(duì)象的抽象。它使用關(guān)鍵字class聲明的。在c#中僅允許單個(gè)繼承,類只能從一個(gè)基類繼承實(shí)現(xiàn)。但是一個(gè)類可以實(shí)現(xiàn)一個(gè)以上的接口。對(duì)象是人們要進(jìn)行研究的任何事物,從最簡(jiǎn)單的整數(shù)到復(fù)雜的飛機(jī)等局可以看對(duì)象,它不僅表示具體的事物,還能表示抽象的規(guī)則、計(jì)劃或者事件。接口只是包含方法、委托或事件的簽名。方法的實(shí)現(xiàn)是在實(shí)現(xiàn)接口的類中完成的。接口可以是命名空間或類的成員,并可以包含下列成員:每個(gè)C#可執(zhí)行文件都有一個(gè)入口—Main方法:static void Main()修飾符public表示可以在任何地方訪問該方法。所以可以在類的外部調(diào)用它。修飾符static表示方法不能在類的實(shí)例上執(zhí)行,因此不必先實(shí)例化類在調(diào)用。在變量聲明時(shí):變量是類或者結(jié)構(gòu)中的字段,如果沒有顯示初始化,創(chuàng)建這些變量時(shí),其值就是默認(rèn)的0。變量是方法的局部變量就必須在代碼中顯示初始化,之后才能在語句中使用它們的值。
課堂上要講授許多關(guān)于語法規(guī)則,要使用這些工具解決問題,通過多次上機(jī)練習(xí),對(duì)于語法知識(shí)有了更深刻的認(rèn)識(shí),在理解的基礎(chǔ)上就會(huì)自然而然地掌握。一個(gè)程序從編輯、編譯、連接到運(yùn)行,都要在一定的外部操作環(huán)境下才能進(jìn)行。通過上機(jī)實(shí)驗(yàn),熟練地掌握開發(fā)環(huán)境,為以后真正編寫計(jì)算機(jī)程序解決實(shí)際問題打下基礎(chǔ)。
第三篇:C語言編程
#include(stdio.h)
main()
{ int question[4]={-1,-1,-1,-1},i=0,j=0,k=0,A=0,B=0,answer[4]={0};
char again='y';
while(again=='y'){ srand((int)time(0));
while(i4){ k=(int)rand()%10;
for(j=0;ji;j++)if(k==question[j]){ k=-1;break;}
if(k==-1)continue;question[i]=k;i++;}/*while i*/
for(i=8;i0;i--)/*還有8次機(jī)會(huì)*/
{ A=0;B=0;printf(“n你還剩下%d次機(jī)會(huì)。”,i);
printf(“n請(qǐng)輸入四個(gè)0-9之間的數(shù)字,中間用空格隔開n”);for(j=0;j4;j++)scanf(“%d”,&answer[j]);
for(j=0;j4;j++)
for(k=0;k4;k++)
{ if(answer[j]==question[k]){ if(j==k)A++;else B++;} }/*for*/
if(A==4){ again='0';
printf(“n你贏了,還繼續(xù)猜嗎?(y/n)”);
while(again!='y'&&again!='n')
scanf(“...%c”,&again);break;}/*if*/
printf(“n%dA%dB”,A,B);if(i==1){ again='0';
printf(“n你輸了,正確答案是”);
for(j=0;j4;j++)
printf(“%dt”,question[j]);
printf(“n還繼續(xù)嗎?(y/n)”);
while(again!='y'&&again!='n')scanf(“%c”,&again);
printf(“%c”,again);break;}/*if*/ }/*for changce*/ }/*while again*/ printf(“感謝您玩這個(gè)游戲?!?;}
第四篇:編程語言的介紹
本文由2008146683貢獻(xiàn)
doc1。
編程語言介紹
目錄 [隱藏] 1 開放源代碼的必要性 2 各種語言的選擇 3 各種語言的選擇 4
我為什么選擇了 Python 5 Ruby 和 Python 的比較 5.1 Python 和 Ruby 的相同點(diǎn)
5.2 和 Python 相比 Ruby 的優(yōu)點(diǎn) 5.3 和 Python 相比 Ruby 的不足 5.4 Pyth
on 和 Ruby 的語言的選擇 6 多腳本語言的大統(tǒng)一及疑問 7 .NET 介紹 7.1 .NET
所實(shí)現(xiàn)的 Java 的功能 7.2 .NET 未實(shí)現(xiàn)的 Java 功能 7.3 .NET 實(shí)現(xiàn)的 Java
不具備的功能 7.4 相對(duì) vs6 的改進(jìn) 8 XML 各種技術(shù)介紹 9 最先進(jìn)的 XML 格式圖
形界面程序開發(fā)工具-XUL 10 最接近人類語言的編程語言-REBOL 11 最具有現(xiàn)代感 的 Lisp 解釋器 DrScheme 12 eiffel 語言印象 13 mozart oz 語言 14 各種語言的
選擇和語言之間的關(guān)系 14.1 一般是使用什么軟件,就用什么軟件的語言 14.2 然
后看處理什么樣類型的數(shù)據(jù) 14.3 從語言特點(diǎn)來說 14.4 C 語言是最普及的語言,但 C 語言有一些缺點(diǎn),因此,就產(chǎn)生了很多改進(jìn) C 的語言 14.5 關(guān)于圖形用戶界面 的選擇 14.6 discuss 15 文學(xué)編程和 CWEB 介紹 16 貢獻(xiàn) [編輯] 開放源代碼的必
要性 在介紹編程語言之前,先說說開放源代碼的必要性?,F(xiàn)在,在軟件生產(chǎn)領(lǐng)域存在
巨大的智力浪費(fèi),大 家把大量的精力用在編寫別人已經(jīng)實(shí)現(xiàn)的程序代碼上??纯矗?/p>
本編輯器有多少,看看 ftp 程序有多少,看看字處理程序有多少,這些程序雖然有
差別,但主要的功能都是一樣的。要實(shí)現(xiàn)個(gè)性化的功能,在已有 的軟件基礎(chǔ)上修改會(huì)
節(jié)省多少時(shí)間呀!而每個(gè)程序各編一套,又浪費(fèi)多少時(shí)間?如果,沒有這些重復(fù)的工
作量,世界上的程序員至少可以節(jié)省 80%的工作量。同時(shí),開放源代碼也方便了大家 的交流,閱讀源代碼 應(yīng)該是最直接最有效的學(xué)習(xí)途徑,尤其是比較專業(yè)的領(lǐng)域。要
開放源代碼,下面幾點(diǎn)比較重要: 語言要流行。語言的函數(shù)和類庫(kù)統(tǒng)一。語言的語
法和編譯器要統(tǒng)一。編譯器是否開放源代碼。API 是否開放源代碼。語言的可重用性、功能、友好
性。語言統(tǒng)一:如果大家都用一種編程語言,都用同樣的函數(shù),同樣的類庫(kù),那么,大家的共同語言就會(huì) 很多。大家只要學(xué)會(huì)一種語言,一套函數(shù),一套類庫(kù),就可以相
互讀懂源代碼,這樣,學(xué)習(xí)量是最少的; 但是語言統(tǒng)一根本是不可能的事,因?yàn)楦鞣N
語言都有其特色,如果取了其中一個(gè)優(yōu)點(diǎn),通常就會(huì)犧牲另一 個(gè)優(yōu)點(diǎn)??墒菍W(xué)習(xí)新 的 API 浪費(fèi)程序員大量的時(shí)間和精力,尤其是當(dāng)這個(gè) API 有大量和其他 API 重復(fù) 的功 能的時(shí)候。要增加代碼的可重用性,要從下面幾點(diǎn)著手: 代碼的可讀性。如格
式、是否接近英語語法和單詞。代碼的表達(dá)能力,也就是簡(jiǎn)單性,能用最少的語句和
單詞實(shí)現(xiàn)同樣的功能。代碼的結(jié)構(gòu)性,如函數(shù)、模塊、類。語言功能的強(qiáng)大從下面
幾點(diǎn)來說: 是否擁有大量的庫(kù)支持。這是最重要的,要求編寫任何功能的程序都有強(qiáng)
大的庫(kù)支持。語法功能是否強(qiáng)大,比如是否有出錯(cuò)處理。是否有指針。語言的友好
性: 語言包的大小,語言包越小,學(xué)習(xí)越簡(jiǎn)單。語言是否有友好的編輯調(diào)試環(huán)境。
語言的可視化和集成編程環(huán)境。
[編輯] 各種語言的選擇 如果編寫對(duì)性能要求苛刻,或和操作系統(tǒng)結(jié)合緊密的程序,必然選擇 C。
如果編寫到處可用的程序,選 Java。
如果編寫大程序,可能的話盡量用腳本語言如 Python、Ruby,不行了再用 Java
和 C。因?yàn)槟_本語 言帶來了生產(chǎn)力。
編寫文本的處理程序用 Perl 或 Ruby。
編寫知識(shí)的處理程序用 prolog。編寫最靈活,最模糊的程序用 Lisp。編寫 office 程
序用 vba。編寫服務(wù)器端程序,PHP、(采用自己熟悉的語言來寫,例如 Perl、Pyt
hon、Ruby)CGI、ASP、(熟悉 Java 就用)JSP 都是選擇。編寫數(shù)據(jù)庫(kù)程序用 vb、PowerBuiler 或 delphi。進(jìn)行算法研究、設(shè)計(jì),用 Pascal。[編輯] 各種語言的
選擇 如果要追求性能和程序的能力,要完全發(fā)揮操作系統(tǒng)的能力,使用 C/C++語
言是合適的。Windows 在 環(huán)境下用 VC,在 Unix-like 環(huán)境下用 gcc。如果不是
追求和操作系統(tǒng)完美結(jié)合,而只是性能,又要追求跨平臺(tái)性,那么仍然選擇 C,但可
以選擇 跨平臺(tái)的庫(kù),如 qt、gtk、fox、wxWidgets。如果要編寫游戲也有跨平臺(tái)選擇
:SDL。如果不滿意 C 領(lǐng)域標(biāo)準(zhǔn)的不統(tǒng)一,不滿意 C 的容易出錯(cuò),不滿意 C 的面向
對(duì)象特征不徹底。如果不在 乎跨平臺(tái),Windows平臺(tái)可以選擇 C#,mac平臺(tái)可以選
擇 Cocoa(Objective-C)。如果需要跨平臺(tái),可以選擇 Java。如果需要跨平臺(tái),又要廣泛的支持的話,選擇 Java。在 Unix-like 下,最方便的工具語言是 Per
page 1 l,它有強(qiáng)大的社區(qū)和代碼庫(kù)的支持。
如果只作為簡(jiǎn)單應(yīng)用的工具語言,Python 和 Ruby 是更好的選擇,他們的跨平
臺(tái)移植性好,應(yīng)用也 比較廣泛。其中 Python 更適合入門和交流,長(zhǎng)期使用也不錯(cuò)。
Ruby 是對(duì) Python 不滿意的另一個(gè)選擇,它提供了很多額外的功能。如果要選擇一
個(gè)程序的嵌入語言,原來有 Lisp、Basic 和 Java,現(xiàn)在還可以選擇 Python 和 Rub
y。如果在要求動(dòng)態(tài)解釋執(zhí)行語言,而又不想學(xué)其他語言的話,C 程序員的選擇是 p
ike,Java 程序員的 選擇是 beanshell。在 Java平臺(tái),又想用腳本語言的話,可
以用 Python。最正統(tǒng)的基于文檔的語言或叫動(dòng)態(tài)頁面語言是 JavaScript。最專門 的服務(wù)器端語言是 PHP,當(dāng)然也有很多其他選擇。XML 語言以 XUL 為最著名,dtml
也算一個(gè),你自己也可以用 XML 作為自己特殊用途的語言。比如 jedit 就用 XML
作為一種模式定制語言。XML 語言是一種比較先進(jìn)的趨勢(shì),比現(xiàn)有的語言在特殊領(lǐng)域
更高 效。要找容易實(shí)現(xiàn)的語言,Lisp 和 Tcl 是選擇。Lisp 的數(shù)據(jù)和程序融為一
體的能力和自由是其他語言都沒有的。現(xiàn)在出現(xiàn)了一個(gè) Lisp 的現(xiàn)代化的變 種:REB
OL。如果有基于事實(shí)的編程的需要的話,prolog 和 Clips 是必然。[編輯] 我為什
么選擇了 Python 首先聲明,我編程只編應(yīng)用程序,就是代替自己工作的小程序。如
果編寫系統(tǒng)程序總會(huì)用到 C 或 Java 的。我喜歡腳本語言,腳本語言不用編譯就可
以運(yùn)行,非常便于修改,而編程序是一種經(jīng)常性的活動(dòng),程 序編完后總在不斷的修改
中,沒必要搞的很隆重,還要編譯。另外,腳本程序每個(gè)使用的人都可以隨手拿 來修
改,不會(huì)出現(xiàn)還要去找源代碼的情況。因此,C/C++和 Java 就被排除了。我喜歡
簡(jiǎn)單的語言,不喜歡為了編寫簡(jiǎn)單的程序而去學(xué)習(xí)大量復(fù)雜的規(guī)定,需要大量的學(xué)習(xí)
才會(huì)的語 言不是好語言,是把人當(dāng)機(jī)器看。C/C++和 Java 都有嚴(yán)格但羅索的語法,有永遠(yuǎn)學(xué)不完的函數(shù)、類、庫(kù)。讓人看到就頭大。而 Perl 有各種怪里怪氣的速記
符號(hào),程序常常讓人頭暈。簡(jiǎn)單的含義除了容易學(xué),還要 功能豐富,常用到的東西要
早就準(zhǔn)備好,不用每個(gè)人都去寫同樣的數(shù)據(jù)結(jié)構(gòu)程序等。Python 有豐富的數(shù) 據(jù)類型,有完備的面向?qū)ο蟮慕Y(jié)構(gòu),有規(guī)則表達(dá)式等各種方便編程的模塊。這個(gè)邏輯就是程
序做的多,人 做的就少,如果程序做的少,就要人做的多。這就是界面友好的問題。
容易上手,功能豐富是程序設(shè)計(jì)的 很重要的目標(biāo),Windows 就是靠這個(gè)流行的。P
ython 也很好的體現(xiàn)了這點(diǎn)。Perl 象 Unix 的 emaCs 而 而 之類其它工具一樣,功
能強(qiáng)大,但太難學(xué),太難懂。是比較違背人性的。關(guān)于性能?,F(xiàn)在 Cpu 已經(jīng)很強(qiáng)大
了。除了很大的程序和系統(tǒng)程序,沒必要關(guān)心性能。關(guān)于功能。如果不是編寫系統(tǒng)程
序和貼近系統(tǒng)的程序,沒必要使用操作系統(tǒng)特別提供的功能。C 是可 以干任何事情,但它編程效率低,復(fù)雜。至于我為什么不用 vb,因?yàn)?vb 太龐大了。我沒必要實(shí)現(xiàn)
一個(gè)小功能啟動(dòng)這么龐大的程序。太夸張。另外,vb 沒有類繼承,雖然是應(yīng)用編程,但如果要編稍微大的程序,總會(huì)用到類繼承的。Python 得強(qiáng)大得擴(kuò)展能力使對(duì) P
ython 得學(xué)習(xí)不會(huì)浪費(fèi)。Python 經(jīng)過簡(jiǎn)單得處理能使用各種得 C 和 C++庫(kù),也可
以被 C 和 C++調(diào)用。Python 可以直接使用 Java 得類,也可以直接被 Java 調(diào)用
。這樣,對(duì) Python、Java、C 得學(xué)習(xí)和使用經(jīng)驗(yàn)都不會(huì)被浪費(fèi),還能相互補(bǔ)充。Py
thon 可以提高 Java 和 C 得編 程效率,Java 和 C 可以補(bǔ)充 Python 功能上得不
足。Python 還可以和 Tcl 直接交互,這種功能是內(nèi)置得。期待 Python 能簡(jiǎn)單的
調(diào)用 Perl 和 PHP 得功能。能使用 Lisp 和 prolog 更好。[編輯] Ruby 和 Pytho
n 的比較 [編輯] Python 和 Ruby 的相同點(diǎn) 都強(qiáng)調(diào)語法簡(jiǎn)單,都具有更一般的表達(dá)
方式。Python 是縮進(jìn),Ruby 是類 Basic 的表達(dá)。都大量減少 了符號(hào)。都是動(dòng)態(tài)數(shù)據(jù)類型。都是有豐富的數(shù)據(jù)結(jié)構(gòu)。都具有 C 語言擴(kuò)展能力,都具有
可移植性,比 Perl 的可移植性更好。也都可以作為嵌入語言。都是面向?qū)ο蟮恼Z言,都可以作為大項(xiàng)目的開發(fā)工具。都有豐富的庫(kù)支持。也有最寬松的版權(quán)許可,除
了一些工具屬于 GNU 世界。都有 Lisp 特色的 eval 函數(shù),也都能把函數(shù)作為參數(shù)
。也有圖形界面的 Ruby 的專門編輯器。都獲得了廣泛的 C 庫(kù)的支持。如 qt、gt
k、tk、SDL、FOX 等,Ruby 計(jì)劃實(shí)現(xiàn) SWIG 接口。都有完善的文檔。[編輯] 和 P
ython 相比 Ruby 的優(yōu)點(diǎn) 具有正則表達(dá)式和嵌入 HTML 的功能。Python 也有正則表
達(dá)式,但沒有 Ruby 的應(yīng)用方便和廣泛。Python 的嵌入 HTML 項(xiàng)目才剛起步。Ruby
還有 apaChe 的 mod 模塊。Ruby 本身也實(shí)現(xiàn)和很多 Unix 工具,如 raCC,doCtoo
ls。比 Python 更親近Linux。比 Python 功能更完整的面向?qū)ο蟮恼Z法。Ruby 的
page 2 整個(gè)庫(kù)都是具有類繼承的結(jié)構(gòu)。他的基本的數(shù)據(jù)類型和運(yùn)算符都是可以重載的。Ru
by 主要的功能都是通過對(duì)象的方法調(diào)用來實(shí)現(xiàn)的,而不是函數(shù)。Python 也在向這方
面發(fā)展,但沒 有 Ruby 做的徹底。Ruby 的類是更規(guī)范的單繼承,還有接口等概念的
實(shí)現(xiàn)。Python 可以實(shí)現(xiàn)在列表內(nèi)的條件語句、循環(huán)語句,Ruby 用“塊”的方式來
實(shí)現(xiàn)這個(gè)功能,Python 而 比 的更靈活,更具有通用性。Ruby 具有類似 Lisp 的
徹底的函數(shù)方式的條件語句、循環(huán)語句等。語句的表達(dá)能力更強(qiáng)。附帶一些 Unix 工
具,如 raCC 等。[編輯] 和 Python 相比 Ruby 的不足 最大的不足正是因?yàn)?Ruby 的強(qiáng)大所引起的。它沒有 Python 的簡(jiǎn)單性好。比較復(fù)雜的面向?qū)ο笳Z法、“塊”
語法的引入、正則表達(dá)式的引入、一些簡(jiǎn)寫標(biāo)記都增加了語言的復(fù)雜性。Python 的
縮進(jìn)表達(dá)方式比 Ruby 的 Basic 的表達(dá)方式更讓人悅目,Ruby 程序的滿眼的 end 讓
人不 舒服。當(dāng)然,Ruby 認(rèn)為 end 的方式比 Python 更先進(jìn)。Ruby 還沒有 Python 的“自省”的能力,沒有從程序文件中生成文檔的能力。Ruby 支持不及 Python 廣
。國(guó)際化支持在 Ruby 的計(jì)劃中。這是因?yàn)?Ruby 的歷史比 Python 要短 造成的。
[編輯] Python 和 Ruby 的語言的選擇 從簡(jiǎn)單的就是好的來說,Python 是沒錯(cuò)的。
選 Python 適合尋找簡(jiǎn)單語言的人,這很可能造成 Python 更流行,因此也有更多 的支持。但如果要追求更強(qiáng)大的語法功能,對(duì)編程語言感興趣,想了解各種編程概 念 的人,則 Ruby 是好的選擇。Ruby 和 Python 都想取代 Perl,解決 Perl 的缺點(diǎn)—
—面向?qū)ο蟛蛔?,?Python 用是方法是混合面向?qū)ο蠛统绦蚴降某淌秸Z言,Ruby
是允許自己這個(gè)面向?qū)ο笳Z言扮成程序式的 程式語言,[編輯] 多腳本語言的大統(tǒng)一
及疑問 現(xiàn)在各種腳本語言太多了,有必要進(jìn)行整合,parrot 是一個(gè)好的想法。.NE
T 也是好的想法。它為各 種腳本提供了一個(gè)統(tǒng)一的虛機(jī),為各種腳本語言提供了基于
“類”的相互調(diào)用,為各種腳本提供了統(tǒng)一的類 庫(kù)?,F(xiàn)在各種腳本語言只是提供了
對(duì) C 語言的交互性,這種交互也是費(fèi)勁的和效果不好的。比如 Python、Perl、Rub
y 等都提供了對(duì) C 的交互功能。腳本語言之間的交流障礙重重。而類似.NET 的東西,提供了 非常容易的各種腳本的相互利用的途徑,避免了很多的代碼的重復(fù)編寫。這
種標(biāo)準(zhǔn)平臺(tái)的力量是很大的,這種標(biāo)準(zhǔn)平臺(tái)為什么沒有在開源領(lǐng)域首先出現(xiàn)呢?眾多的腳本正是開源的特點(diǎn)和
優(yōu)勢(shì),為什么這種問題要 微軟來解決呢?前面有人提出了類似的問題,在 Linux 中
為什么至今沒有好用的類似 ODBC 的東西呢? 可能這種整合只有商業(yè)公司有能力實(shí)現(xiàn) 吧。我的理解是,如果有創(chuàng)新思想的人都拿他的想法去賣錢了,因此,在開源中只剩
下了模仿的人。kde 是模仿 Windows,koffice 是模仿 office,Linux 是模仿 Unix,gcc、bash 等也全都是模仿,以及 gstep 等,還有 freedos、atheos 等也是模仿,wxWindows、SDL 也是模仿。我想知道開源社區(qū)有沒有自己 的創(chuàng)新?我所知道的創(chuàng)
新是 zope,但 zope 最初也是商業(yè)產(chǎn)品,后來才開源的。Perl 是創(chuàng)新,Python 是
創(chuàng)新,但還有什么呢?是不是開源領(lǐng)域只有 hacker,沒有 Creator? [編輯] .
NET
介紹 [編輯] .NET 所實(shí)現(xiàn)的 Java 的功能 可控代碼 跨平臺(tái)的虛機(jī)和偽碼 免費(fèi)贈(zèng)
送命令行編譯器 純面向?qū)ο笳Z言 對(duì) XML 和 XML web serviCes 的支持 和 jsp 對(duì)應(yīng) 的 asp.NET 網(wǎng)頁上的程序 一套統(tǒng)一的中間件環(huán)境。asp. NET 跟 jsp 不是同一個(gè)
層次上的 web 技術(shù),asp. NET 使用完善的事件響應(yīng)機(jī)制,WinForms 類似的 Web
Form 技術(shù),只有 JSF 跟 Asp.NET 有可比性。[編輯] .NET 未實(shí)現(xiàn)的 Java 功能
免費(fèi)的集成開發(fā)環(huán)境 多廠家支持,跨平臺(tái)的成熟度 免費(fèi)的 IDE,#develop,AS
P.NET 的有 MS 的 WebMatrix 而免費(fèi)開源的 CLR 實(shí)現(xiàn),有 MS 自己的 XP,F(xiàn)reeBS
D,Mac OS 下的 實(shí)現(xiàn)(原理演示不能進(jìn)行商業(yè)應(yīng)用),Novell 下的 Mono 項(xiàng)目,已經(jīng)發(fā)布了 Beta1 版本,在 2004-6-30 將會(huì)發(fā)布 Release1; 還有 GNU 的一個(gè).
NET 實(shí)現(xiàn)![編輯] .NET 實(shí)現(xiàn)的 Java 不具備的功能
多語言支持 強(qiáng)大的集成開
發(fā)環(huán)境。在 Windows 上媲美本機(jī)程序的速度。對(duì) COM 的支持,對(duì) vs 的繼承 對(duì)
widows form、web form、服務(wù)器端程序的圖形直觀編程。[編輯] 相對(duì) vs6 的改進(jìn)
統(tǒng)一了集成開發(fā)環(huán)境,使 C++程序也具有了 vb 的友好性。[編輯] XML 各種技術(shù)
介紹 XML: XML 是統(tǒng)一格式的結(jié)構(gòu)化數(shù)據(jù)的文本文件?;?XML 的程序,數(shù)據(jù)結(jié)構(gòu)
是開放的,方便不同程序處理同一種文件,這樣,程序之間可以達(dá)到高水平的協(xié)作。
XML 現(xiàn)在成為了各行各業(yè)統(tǒng)一數(shù)據(jù)格式的基礎(chǔ)。XML 發(fā)展出了完善的語法,它用 D
TD 或 XMLscheme 來界定 XML 的標(biāo)記語言。用 uri 來唯一確定 一個(gè) XML 格式。用
page 3 Css 或 XLT 來轉(zhuǎn)換 XML 格式,xlink 和 xpointer 等來建立 XML 的鏈接,用 xpa
th 來定位 XML 中的數(shù)據(jù)。xHTML: 是嚴(yán)格符合 XML 格式的 HTML。RDF: 基于 X
ML 的元數(shù)據(jù)描述語言。方便交換結(jié)構(gòu)化數(shù)據(jù)。方便交換知識(shí)。RDF 是用主語、謂語、賓語來描述知識(shí)的。SVG: XML 格式的矢量圖形格式。SMILE: XML 格式的各種
多媒體在時(shí)間線上的協(xié)同。xmath: XML 格式的公式描述語言。
XML-rpC 和 soap: 以 http 協(xié)議和 XML 格式來進(jìn)行網(wǎng)絡(luò)程序之間的消息通訊
。XUL: netsCape 的 mazilla 使用的程序界面語言,基于 XML 格式,比 HTML 強(qiáng)
大的多的描述圖形界面的 XML 語言。它用 Css 來換膚,用 DTD 來實(shí)現(xiàn)多語言界面,用 JavasCript 來實(shí)現(xiàn)程序邏輯,以此編寫跨平臺(tái)的可方便定制界面的程序,現(xiàn)在這
個(gè)程序 API 功能已經(jīng)很強(qiáng)大了,整個(gè) mazilla 程序就是基于 XUL 的。xaml: MS
在 LongHorn平臺(tái)的最新編程語言,將統(tǒng)一 Windows 與 Web 編程,直接使用 Lon
gHorn 下的 瀏覽器進(jìn)行執(zhí)行,跟 XUL 有類比性 [編輯] 最先進(jìn)的 XML 格式圖形界
面程序開發(fā)工具-XUL 大家知道 netsCape 程序,一個(gè)僅次于 ie 得瀏覽器,也有很
多人知道 Mozilla,netsCape 得開放源 代碼版本。但很多人只是使用 Mozilla,不
知道 Mozilla 另一個(gè)重要得功能--程序開發(fā)。在 netsCape 開放源代碼后三年 Mo
zilla 得 1。0 版還沒有問世,很多人譏笑他的超慢得開發(fā)速度,實(shí)際上,Mozilla
醞 釀出了一個(gè)超酷得新產(chǎn)品,可以看作是軟件開發(fā)工具發(fā)展得另一個(gè)里程碑?,F(xiàn)在
基于瀏覽器得三層開發(fā)結(jié)構(gòu)非常流行,微軟的.NET 的思路就是基于這個(gè)結(jié)構(gòu)得。另
外,不考慮 服務(wù)器結(jié)構(gòu),就是基于網(wǎng)頁得 JavaScript 小程序也對(duì)人很有吸引力,這
些產(chǎn)品得思路都是以 HTML 為用 戶界面,但開發(fā)人員常常苦惱于 HTML 太簡(jiǎn)陋。而
Mozilla 得 XUL 解決了這個(gè)問題。XUL 是對(duì) HTML 的擴(kuò)展,完全兼容于 HTML,X
UL 基于 XML 格式對(duì) HTML 進(jìn)行了擴(kuò)展,實(shí)現(xiàn)了完整、強(qiáng)大得圖形用戶界面設(shè)計(jì)功
能。可以設(shè)計(jì)出復(fù)雜得圖形界面程序。實(shí)際上 mazilla 整個(gè)就是由 XUL 設(shè)計(jì)的。
XUL 用 Css 來控制界面風(fēng)格、用 DTD 來替代字符串,方便的實(shí)現(xiàn)本地化,用 Java
sCript 來對(duì)用戶界面 的操作作出反應(yīng),提供基本的邏輯編程,JavaScript 通過對(duì)象
文檔接口 DOM 來動(dòng)態(tài)控制用戶界面。同時(shí) JavasCript 通過調(diào)用 Mozilla 提供的豐
富的底層 API 來實(shí)現(xiàn)強(qiáng)大的功能。Mozilla 提供了功能強(qiáng)大的 API 可以進(jìn)行文件操
作、網(wǎng)絡(luò)操作、圖形操作等各種操作,并且這種 API 是完全跨平臺(tái)的。最后,Mozil
la 用 RDF 格式來存儲(chǔ)獨(dú)立于界面的數(shù)據(jù)??偨Y(jié):XUL 由于兼容 HTML,提供了最強(qiáng)
大的用戶界面的定制,DTD 提供了最方便的本地化。XUL、JavasCript、RDF 提供了
顯示、邏輯、數(shù)據(jù)的分離。Mozilla 的底層 API 提供了跨平臺(tái)的強(qiáng)大編程能力。希
望大家都來關(guān)心 Mozilla。[編輯] 最接近人類語言的編程語言-REBOL REBOL 的詳
細(xì)資料見 004km.cnbinator
ial Problems 組合問題 Sorting 排序 Searching 查找 Median and Selection 中位
數(shù) Generating Permutations 排列生成 Generating Subsets 子集生成 Generating
Partitions 劃分生成 Generating Graphs 圖的生成 Calendrical Calculations 日
期 Job Scheduling 工程安排 Satisfiability 可滿足性 Graph Problems--polyn
omial 圖論-多項(xiàng)式算法 Connected Components 連通分支 Topological Sorting 拓
撲排序
Minimum Spanning Tree 最小生成樹 Shortest Path 最短路徑 Transitive Cl
osure and Reduction 傳遞閉包 Matching 匹配 Eulerian Cycle / Chinese Postma
n Euler 回路/中國(guó)郵路 Edge and Vertex Connectivity 割邊/割點(diǎn) Network Flow
網(wǎng)絡(luò)流 Drawing Graphs Nicely 圖的描繪 Drawing Trees 樹的描繪 Planarity Det
ection and Embedding平面性檢測(cè)和嵌入 Graph Problems--hard 圖論-NP 問題
Clique 最大團(tuán) Independent Set 獨(dú)立集 Vertex Cover 點(diǎn)覆蓋 Traveling Salesma n Problem 旅行商問題 Hamiltonian Cycle Hamilton 回路 Graph Partition 圖的劃
分 Vertex Coloring 點(diǎn)染色 Edge Coloring 邊染色 Graph Isomorphism 同構(gòu) Stei
ner Tree Steiner 樹 Feedback Edge/Vertex Set 最大無環(huán)子圖 Computational Ge
ometry 計(jì)算幾何 Convex Hull 凸包 Triangulation 三角剖分 Voronoi Diagrams V
oronoi 圖 Nearest Neighbor Search 最近點(diǎn)對(duì)查詢 Range Search 范圍查詢 Point
Location 位置查詢 Intersection Detection 碰撞測(cè)試 Bin Packing 裝箱問題 Me
page 6 dial-Axis Transformation 中軸變換 Polygon Partitioning 多邊形分割 Simplify
ing Polygons 多邊形化簡(jiǎn) Shape Similarity 相似多邊形 Motion Planning 運(yùn)動(dòng)規(guī)
劃 Maintaining Line Arrangements平面分割 Minkowski Sum Minkowski 和 Set a
nd String Problems 集合與串的問題 Set Cover 集合覆蓋 Set Packing 集合配置
String Matching 模式匹配 Approximate String Matching 模糊匹配 Text Compres
sion 壓縮
Cryptography 密碼 Finite State Machine Minimization 有窮自動(dòng)機(jī)簡(jiǎn)化 Lo
ngest Common Substring 最長(zhǎng)公共子串 Shortest Common Superstring 最短公共父
串 DP——Dynamic Programming——?jiǎng)討B(tài)規(guī)劃 recursion —— 遞歸 編程詞匯 A2A
integration A2A 整合 abstract 抽象的 abstract base class(ABC)抽象基類 abs
tract class 抽象類 abstraction 抽象、抽象物、抽象性 access 存取、訪問 acce
ss level 訪問級(jí)別 access function 訪問函數(shù) account 賬戶 action active 動(dòng)作
活動(dòng)的 activate 激活 actual parameter 實(shí)參 adapter 適配器 add-in 插件 add
ress 地址 address space 地址空間 address-of operator 取地址操作符 ADL(arg
ument-dependent lookup)ADO(ActiveX Data Object)ActiveX 數(shù)據(jù)對(duì)象 advanced
高級(jí)的 aggregation 聚合、聚集 algorithm 算法 alias 別名 align 排列、對(duì)齊 a llocate 分配、配置 allocator 分配器、配置器 angle bracket 尖括號(hào) annotatio
n 注解、評(píng)注 API(Application Programming Interface)應(yīng)用(程序)編程接口 ap
p domain(application domain)應(yīng)用域 application 應(yīng)用、應(yīng)用程序 application
framework 應(yīng)用程序框架 appearance 外觀 append 附加 architecture 架構(gòu)、體系
結(jié)構(gòu)
archive file 歸檔文件、存檔文件 argument 引數(shù)(傳給函式的值)。參見 par
ameter array 數(shù)組 arrow operator 箭頭操作符 ASP(Active Server Page)活動(dòng)服務(wù)
器頁面 ASP.NET worker process ASP.NET 工作者進(jìn)程 assembly 裝配件、配件 匯編
語言 裝配件清單 assembly language assembly manifest assert(ion)斷言 assig
n 賦值 assignment 賦值、分配 assignment operator 賦值操作符 associated 相關(guān) 的、相關(guān)聯(lián)的 associative container 關(guān)聯(lián)式容器(對(duì)應(yīng) sequential container)a
synchronous 異步的 atomic attribute 原子的 原子操作 特性、屬性 atomic oper
ation authentication service 驗(yàn)證服務(wù) authorization 授權(quán) audio A.I.音頻 人
工智能 背景、后臺(tái)(進(jìn)程)向后兼容、向下兼容
B2B integration B2B 整合、B2B 集成(business-to-business integration)
background backup 備份 backward compatible backup device 備份設(shè)備 backup f
ile 備份文件 bandwidth 帶寬 base class 基類 base type 基類型 batch 批處理
BCL(base class library)基類庫(kù) binary 二進(jìn)制 binary search 二分查找 binary
tree 二叉樹 binary function 雙參函數(shù) binary large object 二進(jìn)制大對(duì)象 bin
ary operator 二元操作符 binding 綁定 bit 位 bitmap 位圖 bitwise 按位?.bitwise copy 為單元進(jìn)行復(fù)制;位元逐一復(fù)制,按位拷
bitwise operation 按位運(yùn)算 block 塊、區(qū)塊、語句塊 bookkeeping 簿記 bo
olean 布林值(真假值,true 或 false)border 邊框 bounds checking 邊界檢查 b oxing 裝箱、裝箱轉(zhuǎn)換 brace(curly brace)大括號(hào)、花括號(hào) bracket(square br
akcet)中括號(hào)、方括號(hào) breakpoint 斷點(diǎn) browser applications 瀏覽器應(yīng)用(程序)browser-accessible application 可經(jīng)由瀏覽器訪問的應(yīng)用程序 build 編連(專指
編譯和連接 built-in 內(nèi)建、內(nèi)置 bus 總線 business 業(yè)務(wù)、商務(wù)(看場(chǎng)合)busine
ss Logic 業(yè)務(wù)邏輯 business rules 業(yè)務(wù)規(guī)則 buttons 按鈕 bug 臭蟲 by/through
通過 byte 位元組(由 8 bits 組成)cache 高速緩存 calendar 日歷 call 調(diào)用 c
allback 回調(diào) call-level interface(CLI)調(diào)用級(jí)接口(CLI)call operator 調(diào)用操
作符 candidate key 候選鍵(for database)cascading delete 級(jí)聯(lián)刪除(for da
tabase)cascading update 級(jí)聯(lián)更新(for database)casting catalog chain 轉(zhuǎn)型、造型轉(zhuǎn)換 目錄 鏈(function calls)character 字符 character format 字符格式 character set 字符集 CHECK c
page 7 onstraints CHECK 約束(for database)checkpoint 檢查點(diǎn)(for database)chec
k box 復(fù)選框 check button 復(fù)選按鈕 child class 子類 CIL(common intermedia
te language)通用中間語言、通用中介語言
class 類 類定義 類廠 類庫(kù) 類裝載器 類模板 類模板特化
class declaration 類聲明 class definition class factory class library
class loader class template class derivation list 類繼承列表 class hierar
chy 類層次結(jié)構(gòu)
class template partial specializations 類模板部分特化 class template
specializations classification 分類 clause 子句 client application 客戶端應(yīng)
用程序 client cursor 客戶端游標(biāo)(for database)code page 代碼頁 cleanup 清
理、清除 通用語言基礎(chǔ)設(shè)施 CLI(Common Language Infrastructure)client 客戶、客戶端 client area 客戶區(qū) client-server 客戶機(jī)/服務(wù)器、客戶端/服務(wù)器 cli pboard 剪貼板 clone 克隆 CLS(common language specification)通用語言規(guī)范
code access security 代碼訪問安全 COFF(Common Object File Format)collect
ion 集合 COM(Component Object Model)組件對(duì)象模型 combo box 組合框 comman
d line 命令行 comment 注釋 commit 提交(for database)communication 通訊 c
ompatible 兼容 compile time 編譯期、編譯時(shí) compiler 編譯器 component 組件
composite index 復(fù)合索引、組合索引(for database)composite key 復(fù)合鍵、組
合鍵(for database)composition concept 概念 concrete 具體的 concrete clas
s 具體類 concurrency 并發(fā)、并發(fā)機(jī)制 復(fù)合、組合 通用對(duì)象文件格式 constraint 約束(for database)configuration 配置、組態(tài) connection co
nsole constant 連接(for database)connection pooling 連接池 控制臺(tái) 常量 construct 構(gòu)件、成分、概念、構(gòu)造(for language)constructor(ctor)構(gòu)
造函數(shù)、構(gòu)造器 container 容器 containment 包容 context 環(huán)境、上下文 contro
l 控件 cookie(不譯)copy CORBA cover 拷貝 通用對(duì)象請(qǐng)求中介架構(gòu)(Common Obj
ect Request Broker Architecture)覆蓋、涵蓋 創(chuàng)建、生成 交叉表查詢(for dat
abase)create/creation crosstab query CRTP(curiously recurring template pattern)CTS(common type system)通
用類型系統(tǒng) cube 多維數(shù)據(jù)集(for database)cursor 光標(biāo) cursor 游標(biāo)(for dat
abase)custom 定制、自定義 data 數(shù)據(jù) 數(shù)據(jù)連接(for database)data connecti
on Data Control Language(DCL)數(shù)據(jù)控制語言(DCL)(for database)Data Def
inition Language(DDL)數(shù)據(jù)定義語言(DDL)(for database)data dictionary 數(shù)
據(jù)字典(for database)data dictionary view 數(shù)據(jù)字典視圖(for database)dat
a file 數(shù)據(jù)文件(for database)data integrity 數(shù)據(jù)完整性(for database)da
ta manipulation language(DML)數(shù)據(jù)操作語言(DML)(for database)data mart 數(shù)
據(jù)集市(for database)data pump 數(shù)據(jù)抽取(for database)data scrubbing 數(shù)據(jù)
清理(for database)data source 數(shù)據(jù)源(for database)數(shù)據(jù)倉(cāng)庫(kù)(for databa
se)Data source name(DSN)數(shù)據(jù)源名稱(DSN)(for database)data warehouse d
ataset 數(shù)據(jù)集(for database)database 數(shù)據(jù)庫(kù)(for database)database catalog 數(shù)據(jù)庫(kù)目錄(for datab
ase)database diagram 數(shù)據(jù)關(guān)系圖(for database)database file 數(shù)據(jù)庫(kù)文件(for database)database object database owner database role 數(shù)據(jù)庫(kù)對(duì)象(for database)數(shù)據(jù)庫(kù)所有者(for database)數(shù)據(jù)庫(kù)角色(for
database)database project 數(shù)據(jù)庫(kù)工程(for database)database schema 數(shù)據(jù)庫(kù)模式、數(shù)據(jù)庫(kù)架構(gòu)(for database)database script 數(shù)據(jù)庫(kù)腳本(for database)data
-bound data member dataset data source data table datagram 數(shù)據(jù)綁定(for d
atabase)數(shù)據(jù)成員、成員變量 數(shù)據(jù)源(for database)數(shù)據(jù)表(for database)數(shù)
page 8 據(jù)報(bào)文 data-aware control 數(shù)據(jù)感知控件(for database)數(shù)據(jù)集(for database)data structure 數(shù)據(jù)結(jié)構(gòu)
DBMS(database management system)數(shù)據(jù)庫(kù)管理系統(tǒng)(for database)DCOM(distributed COM)分布式 COM dead lock 死鎖(for database)deallocate 歸還 d
ebug debugger decay 調(diào)試 調(diào)試器 退化
decision support 決策支持 declaration 聲明 declarative referential in
tegrity(DRI)聲明引用完整性(DRI)(for database)deduction 推導(dǎo) DEFAULT con
straint 默認(rèn)約束(for database)default database 默認(rèn)數(shù)據(jù)庫(kù)(for database)
default instance 默認(rèn)實(shí)例(for database)default result set 默認(rèn)結(jié)果集(f
or database)default defer delegate 缺省、默認(rèn)值 推遲 委托 definition 定義 delegation 委托 dependent name deploy 部署 dereferenc
e 解引用 dereference operator(提領(lǐng))運(yùn)算子 derived class 派生類 design by
contract 契約式設(shè)計(jì) design pattern 設(shè)計(jì)模式 destroy device 銷毀 設(shè)備 destr
uctor(dtor)析構(gòu)函數(shù)、析構(gòu)器
DHTML(dynamic HyperText Markup Language)動(dòng)態(tài)超文本標(biāo)記語言 dialog di
gest 對(duì)話框 摘要
digital 數(shù)字的 DIME(Direct Internet Message Encapsulation)直接 Inter
net 消息封裝 directive(編譯)指示符 directory 目錄 dirty pages 臟頁(for d
atabase)dirty read 臟讀(for database)disassembler 反匯編器 DISCO(Disco
very of Web Services)Web Services 的查找 disk 盤 dispatch 調(diào)度、分派、派發(fā)
(我喜歡“調(diào)度”)DISPID(Dispatch Identifier)分派標(biāo)識(shí)符 distributed comp
uting 分布式計(jì)算 distributed query document 文檔 DOM(Document Object Mode
l)文檔對(duì)象模型dot operator(圓)點(diǎn)操作符 driver 驅(qū)動(dòng)(程序)DTD(document ty
pe definition)文檔類型定義 double-byte character set(DBCS)雙字節(jié)字符集(D
BCS)dump 轉(zhuǎn)儲(chǔ) 動(dòng)態(tài)游標(biāo)(for database)動(dòng)態(tài)篩選(for database)動(dòng)態(tài)鎖定(f
or database)dump file 轉(zhuǎn)儲(chǔ)文件 dynamic cursor dynamic filter dynamic lock
ing 分布式查詢(for database)DNA(Distributed interNet Application)分布式
網(wǎng)間應(yīng)用程序
dynamic recovery 動(dòng)態(tài)恢復(fù)(for database)dynamic snapshot 動(dòng)態(tài)快照(f
or database)dynamic SQL statements 動(dòng)態(tài) SQL 語句(for database)dynamic a
ssembly 動(dòng)態(tài)裝配件、動(dòng)態(tài)配件 dynamic binding 動(dòng)態(tài)綁定 EAI(enterprise appl
ication integration)企業(yè)應(yīng)用程序集成(整合)EBCO(empty base class optimiza
tion)e-business 電子商務(wù) 空基類優(yōu)化(機(jī)制)
EDI(Dlectronic Data Interchange)電子數(shù)據(jù)交換 efficiency 效率 efficie nt 高效 end-to-end authentication 端對(duì)端身份驗(yàn)證 end user 最終用戶 engine
引擎 封裝 entity 實(shí)體 encapsulation enclosing class 外圍類別(與巢狀類別 nested class 有關(guān))enum(enumerat
ion)枚舉 enumerators 枚舉成員、枚舉器 equal equality error log 相等 相等性
錯(cuò)誤日志(for database)equality operator 等號(hào)操作符 escape code 轉(zhuǎn)義碼 escape character 轉(zhuǎn)義
符、轉(zhuǎn)義字符 exclusive lock evaluate 評(píng)估 event 事件 event driven 事件驅(qū)動(dòng) 的 event handler 事件處理器 evidence 證據(jù) exception 異常 exception declara
tion 異常聲明 exception handling 異常處理、異常處理機(jī)制 exception-safe 異常
安全的 exception specification 異常規(guī)范 exit 退出 explicit 顯式 explicit s
pecialization 顯式特化 export facility feature fetch 提取 field 字段(java)
field 字段(for database)field length 字段長(zhǎng)度(for database)file 文件
filter 篩選(for database)finalization 終結(jié) firewall 防火墻 finalizer 終結(jié)
器 firmware 固件 flag 標(biāo)記 flash memory 閃存 flush 刷新 font 字體 foreign
key(FK)外鍵(FK)(for database)導(dǎo)出 設(shè)施、設(shè)備 特性、特征 expression 表達(dá)
式 fat client 胖客戶端 排它鎖(for database)explicit transaction 顯式事務(wù)
(for database)page 9 form 窗體
formal parameter 形參 forward declaration 前置聲明 forward-only 只向前 的 forward-only cursor 只向前游標(biāo)(for database)fragmentation 碎片(for d
atabase)framework 框架 full specialization 完全特化 function 函數(shù) functio
n call operator(即 operator())函數(shù)調(diào)用操作符 function object 函數(shù)對(duì)象 f
unction overloaded resolution 函數(shù)重載決議 functionality functor 仿函數(shù) GA C(global assembly cache)全局裝配件緩存、全局配件緩存 GC(Garbage collect
ion)game 游戲 generate 生成 generic 泛化的、一般化的、通用的 generic algo
rithm 通用算法 genericity 泛型 getter(相對(duì)于 setter)取值函數(shù) global 全局的
global object 全局對(duì)象 global scope resolution operator 全局范圍解析操作符
grant group group box GUI 授權(quán)(for database)組、群 分組框 圖形界面 握手
granularity 粒度 垃圾回收(機(jī)制)、垃圾收集(機(jī)制)功能 function template 函
數(shù)模板
GUID(Globally Unique Identifier)全球唯一標(biāo)識(shí)符 hand shaking handle
handler 句柄 處理器
hard-coded 硬編碼的 hard-copy 截屏圖 hard disk 硬盤 hardware 硬件 has
h table 散列表、哈希表 header file 頭文件 heap 堆 help file 幫助文件 hiera
rchy 層次結(jié)構(gòu)、繼承體系
hierarchical data 階層式數(shù)據(jù)、層次式數(shù)據(jù) hook 鉤子 熱鍵 Host(applica
tion)宿主(應(yīng)用程序)hot key hyperlink 超鏈接 HTML(HyperText Markup Langua
ge)超文本標(biāo)記語言 HTTP pipeline HTTP 管道 HTTP(HyperText Transfer Protoc
ol)超文本傳輸協(xié)議 icon 圖標(biāo) 接口定義語言 IDE(Integrated Development Envi
ronment)集成開發(fā)環(huán)境 IDL(Interface Definition Language)identifier 標(biāo)識(shí)符
idle time 空閑時(shí)間 if and only if 當(dāng)且僅當(dāng) IL(Intermediate Language)中間
語言、中介語言 image 圖象 IME 輸入法 直接基類 直接派生類 immediate base im
mediate derived immediate updating 即時(shí)更新(for database)implicit transaction 隱式事
務(wù)(for database)incremental update 增量更新(for database)index impleme
nt implicit import infinite loop information infrastructure inheritance in
line initialization initialize inner join instance instantiated instantiat ion integrate 索引(for database)實(shí)現(xiàn) 隱式 導(dǎo)入 無限循環(huán) 信息 基礎(chǔ)設(shè)施 繼
承、繼承機(jī)制 內(nèi)聯(lián) 初始化 初始化 內(nèi)聯(lián)接(for database)實(shí)例 具現(xiàn)化、實(shí)體化(常應(yīng)用于 template)具現(xiàn)體、具現(xiàn)化實(shí)體(常應(yīng)用于 template)集成、整合 implementation 實(shí)現(xiàn)、實(shí)現(xiàn)品
increment operator 增加操作符 infinite recursive 無限遞歸
inline expansion 內(nèi)聯(lián)展開 initialization list 初始化列表、初始值列表 in-place active 現(xiàn)場(chǎng)激活 integrity 完整性、一致性
integrity constraint 完整性約束(for database)interprocess communica
tion(IPC)進(jìn)程間通訊(IPC)interacts 交互 interface 接口 for GUI 界面 inter
operability 互操作性、互操作能力 interpreter invariants invoke iterate 解釋
器 不變性 調(diào)用 迭代 introspection 自省
isolation level 隔離級(jí)別(for database)iterative 反復(fù)的、迭代的 iter
ator 迭代器 iteration 迭代(回圈每次輪回稱為一個(gè) iteration)item key laser
項(xiàng)、條款、項(xiàng)目 鍵(for database)鍵列(for database)激光 JIT compilation
JIT 編譯 即時(shí)編譯 key column late binding 遲綁定 left outer join 左向外聯(lián)接(for database)level l
ibrary lifetime link linkage linker list 階、層例 庫(kù) 生命期、壽命 連接、鏈
接 連接、鏈接 連接器、鏈接器 high level 高階、高層
literal constant 字面常數(shù) 列表、表、鏈表 list box 列表框 livelock 活鎖
page 10(for database)load 裝載、加載 load balancing 負(fù)載平衡 loader 裝載器、載入
器 local 局部的 local object lock 鎖 log 日志 login 登錄 login security mo
de 登錄安全模式(for database)lookup table 查找表(for database)局部對(duì)象
loop lvalue macro maintain 循環(huán) 左值 機(jī)器碼、機(jī)器代碼 宏 維護(hù)
loose coupling 松散耦合 machine code managed code 受控代碼、托管代碼 Managed Extensions 受控?cái)U(kuò)充件、托管擴(kuò) 展 managed object 受控對(duì)象、托管對(duì)象 mangled name manifest 清單 manipulato
r 操縱器(iostream 預(yù)先定義的一種東西)many-to-many relationship 多對(duì)多關(guān)系
(for database)many-to-one relationship 多對(duì)一關(guān)系(for database)marshal
列集 member 成員 成員取用運(yùn)算子(有 dot 和 arrow 兩種)成員函數(shù) member acc
ess operator member function member initialization list 成員初始值列表 memberwise 以 member 為單元
?、members 逐一?memberwise copy memory menu 內(nèi)存 菜單 memory leak 內(nèi)存泄
漏 message 消息 message based 基于消息的 message loop 消息環(huán) message queui
ng 消息隊(duì)列 metadata 元數(shù)據(jù) metaprogramming 元編程 method 方法 micro 微 mi
ddleware 中間件 middle tier 中間層 modeling 建模 modeling language 建模語言
modifier 修飾字、修飾符 modem module mouse mutex 調(diào)制解調(diào)器 模塊 鼠標(biāo) 互斥
元、互斥體 多維 OLAP(MOLAP)(for database)most derived class 最底層的派生類 mutable 可變的 multidimensional OLA
P(MOLAP)multithreaded server application 多線程服務(wù)器應(yīng)用程序 multiuser multi
-tasking multi-thread 多用戶 多任務(wù) 多線程 命名參數(shù)
multicast delegate 組播委托、多點(diǎn)委托 named parameter namespace nativ
e named pipe 命名管道 名字空間、命名空間 原生的、本地的
native code 本地碼、本機(jī)碼 Native Image Generator(NGEN)本地映像生成器
nested class 嵌套類 nested query 嵌套查詢(for database)nested table 嵌套
表(for database)network 網(wǎng)絡(luò) network card 網(wǎng)卡 nondependent name object
object file 對(duì)象 目標(biāo)文件 object based 基于對(duì)象的 object model 對(duì)象模型 ob
ject oriented 面向?qū)ο蟮?object pooling 對(duì)象池化 ODBC data source ODBC 數(shù)據(jù)
源(for database)ODBC driver ODBC 驅(qū)動(dòng)程序(for database)OLE 自動(dòng)化對(duì)象
(for database)OLE 自動(dòng)化服務(wù)器(for database)ODR(one-definition rule)OLE Automation objects OLE Automation serve r OLE DB consumer OLE DB 使用者(for database)OLE DB for OLAP 用于 OLA
P 的 OLE DB(for database)OLE DB provider OLE DB 提供者(for database)on
e-to-many relationship 一對(duì)多關(guān)系(for database)one-to-one relationship 一
對(duì)一關(guān)系(for database)online analytical processing(OLAP)online redo lo
g online transaction processing(OLTP)Open Data Services(ODS)operand 操
作數(shù) 聯(lián)機(jī)分析處理(OLAP)(for database)聯(lián)機(jī)事務(wù)處理(OLTP)(for database)聯(lián)
機(jī)重做日志(for database)開放式數(shù)據(jù)服務(wù)(ODS)(for database)Open Database Connectivity(ODBC)開放式數(shù)據(jù)庫(kù)連接(ODBC)(for databas
e)operating system(OS)操作系統(tǒng) operation 操作 operator option 操作符、運(yùn)
算符 選項(xiàng)
optimizer 優(yōu)化器
outer join 外聯(lián)接(for database)overflow overhead overload 上限溢位(相對(duì)于 underflow)額外開銷 重載 重載決議 重載的函數(shù) overload resolution overloaded function override package palette para
llel overloaded operator 被重載的操作符 覆寫、重載、重新定義 包 調(diào)色板 并行
page 11 packaging 打包
parameter 參數(shù)、形式參數(shù)、形參 parameter list 參數(shù)列表 parameterize p
arent class parentheses parse parser part 解析 解析器 零件、部件 傳址(函式
引數(shù)的傳遞方式)(非正式用語)參數(shù)化 父類 圓括弧、圓括號(hào)
partial specialization 局部特化 pass by address pass by reference 傳地
址、按引用傳遞 pass by value 按值傳遞 pattern 模式 可移植可執(zhí)行文件 PDA(p
ersonal digital assistant)個(gè)人數(shù)字助理 PE(Portable Executable)file perfo
rmance persistence pixel 像素 placement delete placement new placeholder 占
位符 platform平臺(tái) 性能 持久性
PInvoke(platform invoke service)平臺(tái)調(diào)用服務(wù)
POD(plain old data(type))POI(point of instantiation)pointer 指針
poll 輪詢 pooling 池化 polymorphism 多態(tài) pop up port postfix 彈出式 端口
后綴
precedence 優(yōu)先序(通常用于運(yùn)算子的優(yōu)先執(zhí)行次序)prefix 前綴 預(yù)處理器
主表(for database)preprocessor primary table primary key(PK)主鍵(PK)(for database)primary template 原始模板 pri
mitive type 原始類型 print printer 打印 打印機(jī)
procedure 過程 procedural 過程式的、過程化的 process profile profiler
program 進(jìn)程 評(píng)測(cè) 效能(性能)評(píng)測(cè)器 程序
programmer 程序員 programming 編程、程序設(shè)計(jì) progress bar 進(jìn)度指示器
project property protocol 項(xiàng)目、工程 屬性 協(xié)議
pseudo code 偽碼 qualified 經(jīng)過資格修飾(例如加上 scope 運(yùn)算子)qualif
ied name qualifier 修飾符 quality queue radian radio button raise range ra
nk raw 質(zhì)量 隊(duì)列 弧度 單選按鈕 引發(fā)(常用來表示發(fā)出一個(gè) exception)范圍、區(qū)
間 等級(jí) 未經(jīng)處理的
race condition 競(jìng)爭(zhēng)條件(多線程環(huán)境常用語)random number 隨機(jī)數(shù)
readOnly 只讀 record 記錄(for database)recordset 記錄集(for databa
se recursive 遞歸 re-direction 重定向 refactoring refer 重構(gòu) 引用、參考 reference 引用、參考 reference counting 引用計(jì)數(shù)
referential integrity(RI)引用完整性(RI)(for database)register refl
ection 寄存器 反射
refresh data 刷新數(shù)據(jù)(for database)regular expression 正則表達(dá)式 re
lational database 關(guān)系數(shù)據(jù)庫(kù) remote represent resolve resolution result se
t return return type return value revoke robust robustness roll back routi
ne row row lock rowset 遠(yuǎn)程 表述,表現(xiàn) 解析、決議 解析過程 結(jié)果集(for dat abase)返回 返回類型 返回值 remote request 遠(yuǎn)程請(qǐng)求
retrieve data 檢索數(shù)據(jù)
right outer join 右向外聯(lián)接(for database)撤銷 健壯 健壯性 回滾(for
database)例程 行(for database)行鎖(for database)行集(for database)roll forward 前滾(for database)RPC(remote procedure call)RPC(遠(yuǎn)程過程調(diào)用)runtime 執(zhí)行期、運(yùn)行期、執(zhí)行時(shí)、運(yùn)行時(shí) rvalue 右值 save 保存 savepoint 保存點(diǎn)(for database)SAX(Simple API for XML)scalable 可伸縮的、可擴(kuò)展的 schedule 調(diào)度 scheduler 調(diào)
度程序 schema scope 模式、綱目結(jié)構(gòu) 作用域、生存空間 scroll bar 滾動(dòng)條 scop
e operator 生存空間操作符 scope resolution operator 生存空間解析操作符 scr
een 屏幕 SDK(Software Development Kit)軟件開發(fā)包 sealed class 密封類 sear
ch 查找
semantics 語義 semaphore 信號(hào)量 sequential container 序列式容器 serve
r serial 服務(wù)器、服務(wù)端 串行
serialization/serialize 序列化 server cursor 服務(wù)端游標(biāo)、服務(wù)器游標(biāo)(for database)session setter sibling signature slider 滑塊 slot 槽 smart p
page 12 ointer 智能指針 SMTP(Simple Mail Transfer Protocol)snapshot snapshot 截屏
圖 快照(for database)簡(jiǎn)單郵件傳輸協(xié)議 會(huì)話(for database)設(shè)值函數(shù) 同級(jí)
簽名
shared lock 共享鎖(for database)side effect 副作用 single-threaded
單線程
specialization 特化 specification 規(guī)范、規(guī)格 splitter software source
code 切分窗口 簡(jiǎn)單對(duì)象訪問協(xié)議 軟件 源碼、源代碼 SOAP(simple object acce
ss protocol)SQL(Structured Query Language)結(jié)構(gòu)化查詢語言(for database)stack 棧、堆棧 stack unwinding 疊輾轉(zhuǎn)開解(此詞用于 exception 主題)standard librar y 標(biāo)準(zhǔn)庫(kù) standard template library 標(biāo)準(zhǔn)模板庫(kù) stateless 無狀態(tài)的 statement
語句、聲明 static cursor 靜態(tài)游標(biāo)(for database)static SQL statements 靜
態(tài) SQL 語句(for database)stored procedure 存儲(chǔ)過程(for database)status
bar 狀態(tài)條 stream string stub 流 字符串 存根
subobject 子對(duì)象 subquery 子查詢(for database)subroutine 子例程 sub
script operator 下標(biāo)操作符 subset 子集
subtype 子類型 support 支持 suspend 掛起 symbol syntax 記號(hào) 語法 系統(tǒng)
數(shù)據(jù)庫(kù)(for database)系統(tǒng)表(for database)system databases system tables table 表(for database)table lock 表鎖(for database)table-level constraint 表級(jí)約束(for d
atabase)tape backup 磁帶備份(for database)target 標(biāo)的,目標(biāo) task switch
工作切換 TCP(Transport Control Protocol)template template-id template ar
gument deduction template parameter 模板參數(shù) 模板參數(shù)推導(dǎo) template explici
t specialization 模板顯式特化 模板 傳輸控制協(xié)議
template template parameter temporary object 臨時(shí)對(duì)象 temporary table
臨時(shí)表(for database)text 文本 text file 文本文件 thin client 瘦客戶端 t
hird-party 第三方 thread 線程 thread-safe 線程安全的 throw 拋出、引發(fā)(常指
發(fā)出一個(gè) exception)token 符號(hào)、標(biāo)記、令牌(看場(chǎng)合)trace 跟蹤 transactio
n 事務(wù)(for database)transaction log 事務(wù)日志(for database)transaction
rollback 事務(wù)回滾(for database)transactional replication 事務(wù)復(fù)制(for d
atabase)translation unit 翻譯單元 traverse 遍歷 trigger 觸發(fā)器(for datab
ase)two-phase commit 兩階段提交(for database)tuple two-phase lookup 兩階
段查找 type 類型 UDDI(Universary Description, Discovery and Integration)統(tǒng) 一描述、查詢與集成
UML(unified modeling language)統(tǒng)一建模語言 unary function 單參函數(shù) u
nary operator 一元操作符 unboxing underflow Union query unique index unmar
shal unqualified 拆箱、拆箱轉(zhuǎn)換 下限溢位(相對(duì)于 overflow)聯(lián)合查詢(for da
tabase)唯一索引(for database)散集 未經(jīng)限定的、未經(jīng)修飾的 統(tǒng)一資源定位器
UNIQUE constraints UNIQUE 約束(for database)unmanaged code 非受控代
碼、非托管代碼
URI(Uniform Resource identifier)統(tǒng)一資源標(biāo)識(shí)符 URL(Uniform Resourc
e Locator)user 用戶 user interface 用戶界面 value types 值類型 variable 變
量 vector viable video view 向量(一種容器,有點(diǎn)類似 array)可行的 視頻 視圖
VEE(Virtual Execution Engine)虛擬執(zhí)行引擎 vendor 廠商 view 視圖(for
database)虛擬機(jī) 虛擬內(nèi)存 web 服務(wù) WHERE 子句(for database)通配符搜索(for database)窗口 窗口函數(shù) 窗口過程 virtual function 虛函數(shù) virtual machi
ne virtual memory vowel Web Services WHERE clause wildcard search window w
page 13 indow function window procedure wizard 向?qū)?word 單詞 包裝、包裝器 word pr
ocessor 字處理器 wrapper write enable 寫啟用(for database)write-ahead lo
g 預(yù)寫日志(for database)write-only 只寫 WSDL(Web Service Description La
nguage)Web Service 描述語言
元音字母
wildcard characters 通配符字符(for database)Windows authentication Windows 身份驗(yàn)證
XML Message Interface(XMI)XSD(XML Schema Definition)XML 消息接口 XML 模式定義語言
XML(eXtensible Markup Language)可擴(kuò)展標(biāo)記語言 XSL(eXtensible Style
sheet Language)可擴(kuò)展樣式表語言 XSLT(eXtensible Stylesheet Language Tran
sformation)可擴(kuò)展樣式表語言轉(zhuǎn)換 xxx based 基于 xxx 的 xxx oriented 面向 xx
x page 14__
第五篇:從語言進(jìn)步到編程
從語言進(jìn)步到編程
1.語言和編程本是兩碼事
分不清語言和編程的人,估計(jì)很能學(xué)得好編程。
1.1 盲從技術(shù)只能讓你暈的更久 和其它事物一樣,軟件編程的發(fā)展也經(jīng)歷了從低級(jí)到高級(jí)的各個(gè)階段。從機(jī)器代碼到匯編語言,從匯編語言到高級(jí)語言,從高級(jí)語言到封裝完善的編程框架,以后肯定還會(huì)出現(xiàn)更多高級(jí)的語言或是編程框架。
作為學(xué)習(xí)者,在初涉軟件編程領(lǐng)域時(shí),常常被眾多的語言搞昏了頭腦,被眾多的編程框架折騰的暈頭轉(zhuǎn)向。在找不到軟件編程規(guī)律之前,他們只能跟著所謂新技術(shù)走。正所謂C不流行了,要去學(xué)C++;C++不流行了,趕著學(xué)JAVA;MFC框架封裝的不好,趕快去用.NET框架吧;還有太多的太多的名詞,太多太多的中間件技術(shù)。某天在與一位程序員聊天時(shí),他感言到:“現(xiàn)在的編程,就是數(shù)據(jù)庫(kù)和網(wǎng)絡(luò),其它的都沒什么用!”。是啊,連有經(jīng)驗(yàn)的程序員都這么說,更何況那些沒有編程經(jīng)驗(yàn)的初學(xué)者。他們唯一能做的就是,什么新學(xué)什么,什么好學(xué)什么。到底,什么是新,什么是好?誰也說不清楚,倒是網(wǎng)上總有類似的大討論,比較C++和JAVA的先進(jìn)性,比較VC++和BCB優(yōu)劣性。在這里,我只想告誡同學(xué)們,盲從只能讓你暈得更長(zhǎng)。
1.2 語言和編程其實(shí)兩回事情
那么什么是編程?什么是好的編程?如果同學(xué)們能理解了這兩句,我想你會(huì)發(fā)覺盲從編程新技術(shù)是一件很可怕也很可笑的事情。編程說到底就是向計(jì)算機(jī)說明一件事情,讓計(jì)算機(jī)按照你的意圖去做這件事情。事情的復(fù)雜性決定了說明的難度,即決定了編程的難度。編程的好壞其實(shí)就是說明事情的水平高低,如果你把事情說明的簡(jiǎn)明、扼要,而且還能為將來留有余地,那么你的編程就是好的。
語言又是什么呢?語言是人們與計(jì)算機(jī)交流的工具,人們借助編程語言來描述和說明要安排給計(jì)算機(jī)的事情。可見,語言是死的,編程是活的。前幾日在網(wǎng)上發(fā)現(xiàn)一帖,把語言比作兵器,一個(gè)很生動(dòng)形象的例子。對(duì)于不會(huì)編程的人,給他再好的兵器都是白搭;對(duì)于會(huì)編程的人,給他一把好兵器那是如虎添翼。《VC++編程技術(shù)與難點(diǎn)剖析》一書把語言比作獵槍,試想給你一把上等獵槍,如果你不會(huì)打獵的話,一樣是一無所獲。
可見,語言是形,編程是意;編程是語言的內(nèi)在精神,語言是編程的外在載體。你把語言規(guī)范學(xué)得再好,如果不會(huì)編程的話,你依然會(huì)覺得茫然不知所措。當(dāng)你領(lǐng)悟到編程思想時(shí),你會(huì)發(fā)覺,其實(shí)用C語言也能寫出面向?qū)ο蟮某绦?。
1.3 語言靠學(xué)、編程需悟
回首十幾年的英語學(xué)習(xí),我不禁汗顏,除了背得一些單詞,記住一些語法外,我張口還是說不出一句完整的英語句子來。一個(gè)深刻的體會(huì)便是就是不知道該怎么說英語。我想大部分同學(xué)對(duì)于軟件編程的感受也是類似的,給你一個(gè)編程要求,即便你掌握了所有的C++語言規(guī)則,你還是覺得不知道該怎么編,不知道該從那里下手。
正如前面所述,語言是死的、是形。它是由一系列關(guān)鍵字和語法規(guī)則組成。掌握這些關(guān)鍵字和語法規(guī)則并不需要太長(zhǎng)時(shí)間,因?yàn)檫@些內(nèi)容遠(yuǎn)比英語單詞要少的多的多。這部分內(nèi)容是容易講授,也容易被學(xué)生掌握。
關(guān)鍵字和語法規(guī)則是死的,但是如何靈活運(yùn)用這些規(guī)則、綜合這些規(guī)則確是活的。而這些正是編程真實(shí)含義所在。因此,運(yùn)用語法規(guī)則描述一件事情其實(shí)非常復(fù)雜,實(shí)現(xiàn)功能只是最基本的,之上還有運(yùn)行效率問題、擴(kuò)展性問題、可移植性問題等等。同學(xué)們?cè)趯W(xué)習(xí)編程時(shí),一是需要老師在課堂上引導(dǎo),但老師的引導(dǎo)只能是啟發(fā)大家的思維,激發(fā)大家的思考;更多的還是今后在實(shí)際工作中的經(jīng)驗(yàn)積累和不斷的思考。不管是自己寫代碼,還是看別人代碼,你只要思考清楚如下幾個(gè)問題就可以了:
1)為什么要這么設(shè)計(jì)代碼,這樣設(shè)計(jì)有何優(yōu)點(diǎn); 2)導(dǎo)致這些優(yōu)點(diǎn)的原因是什么;
3)把優(yōu)點(diǎn)總結(jié)出來,嘗試在自己的程序中去盡量運(yùn)用這些優(yōu)點(diǎn);
4)這些優(yōu)點(diǎn)能否再改進(jìn),并如何改進(jìn)。
如果能堅(jiān)持能做到前三點(diǎn),那已經(jīng)相當(dāng)不得了了。最后一點(diǎn)是為大師級(jí)人物準(zhǔn)備的,說不定在讀某位未來可能就是××公司的首席架構(gòu)設(shè)計(jì)師哦。
2.在使用語言中進(jìn)化編程思想
從語言到編程,從編程到語言 ——語言學(xué)習(xí)和使用的過程是編程思想的積累過程,當(dāng)你掌握思想之后,任何的語言形式都能體現(xiàn)你的思想精華。所以,首先把語言學(xué)習(xí)好吧。你真的掌握一門語言了嗎?看看下面的文字再下結(jié)論不遲。
2.1 用低級(jí)語言去理解高級(jí)語言 低級(jí)語言是高級(jí)語言的基礎(chǔ),當(dāng)我們對(duì)于一個(gè)高級(jí)語言的知識(shí)點(diǎn)難以把握時(shí),最好的辦法、也是最有效的辦法就是去低級(jí)語言中尋求規(guī)律、尋求答案、尋找原則。這里我想舉個(gè)例子,即指針的理解和使用。
指針可以說是一個(gè)沒有完全完成從匯編語言到高級(jí)語言進(jìn)化的變量,它是一個(gè)介于匯編語言和高級(jí)語言的東東。而C語言也是因?yàn)樗抛兊酶拥撵`活強(qiáng)大,同時(shí)也讓許多初學(xué)者望指針生畏。指針變量保存的是內(nèi)存地址,地址訪問體現(xiàn)了低級(jí)語言的特征;指針變量具有類型,變量類型體現(xiàn)了高級(jí)語言的特征。不要以為你知道指針是個(gè)內(nèi)存地址,你就能從匯編語言上理解指針、使用好指針。對(duì)于指針的理解和使用還必須注意如下幾個(gè)方面: 1)可執(zhí)行程序中的什么元素會(huì)占用內(nèi)存空間?與語言代碼相關(guān)的,一般是數(shù)據(jù)和函數(shù)執(zhí)行代碼,這導(dǎo)致變量指針和函數(shù)指針概念的出現(xiàn);
2)可執(zhí)行程序是如何開辟和釋放內(nèi)存空間的?在C語言中包括局部變量、全局變量、靜態(tài)變量、malloc/free函數(shù)對(duì)、結(jié)構(gòu)體、聯(lián)合體等等,到了C++語言又增加了對(duì)象(包括成員變量、靜態(tài)成員變量、普通成員函數(shù)、虛擬函數(shù)和虛擬函數(shù)表)、new/delete操作符對(duì),在Object Pascal語言中甚至還有類3??梢?,只要是語言中使用到的系統(tǒng)資源(包括變量和函數(shù))都需要關(guān)心它在內(nèi)存中的開辟和釋放機(jī)制。
3)只有在掌握2)的基礎(chǔ)之上,你才能準(zhǔn)確的知道代碼中的指針是否指向存在的或是未被釋放的內(nèi)存空間,而這是正確使用指針的重要原則之一。
4)如果是變量指針,指針類型對(duì)于四個(gè)字節(jié)的內(nèi)存地址而言毫無意義。它的引入,不過是在告訴C/C++語言編譯器,當(dāng)代碼對(duì)指針進(jìn)行加減操作時(shí),它該如何以多大的步長(zhǎng)增減地址;當(dāng)代碼對(duì)指針進(jìn)行取值(*,->)操作時(shí),它該以多大的位移取多大內(nèi)存空間的值。僅此而已。
5)如果是函數(shù)指針,指針類型對(duì)于內(nèi)存地址也是毫無意義的。它的引入,是在告訴C/C++語言編譯器,當(dāng)代碼使用指針調(diào)用函數(shù)時(shí),它該如何為函數(shù)調(diào)用生成匯編代碼。函數(shù)的調(diào)用會(huì)涉及一些堆?;蚴羌拇嫫鞑僮鳎煌妮斎?、輸出參數(shù)對(duì)應(yīng)的這些操作是不相同的。當(dāng)我們分析清楚可執(zhí)行程序的內(nèi)存開辟和釋放機(jī)制時(shí),當(dāng)我們從編譯器的角度去理解指針類型的含義時(shí),可以自然的總結(jié)如下的指針使用原則:
1)保證對(duì)指針取值時(shí),指針指向的內(nèi)存空間是有效的
2)存儲(chǔ)指針時(shí),把它當(dāng)作占四個(gè)字節(jié)的任何變量,指針指向的類型可以是任何變量類型。
3)對(duì)指針取值操作時(shí),確保恰當(dāng)?shù)闹羔橆愋偷霓D(zhuǎn)型。講到這里,請(qǐng)大家再去理解以前課本中反反復(fù)復(fù)提到的傳值和傳地址的區(qū)別。其實(shí)把指針參數(shù)理解為傳地址不過是便于理解吧。如果你從匯編角度理解,傳值和傳地址的操作是完全一樣。當(dāng)你從指針本身的內(nèi)容來看,傳地址就是在傳遞指針的地址值,就是傳值,和傳遞個(gè)int變量毫無區(qū)別;當(dāng)你從指針?biāo)赶虻膬?nèi)容來看,就是一般書中所講述的傳地址。
高級(jí)語言便于理解、易于掌握,也大大提高了程序員的編程效率。但是,如果我們僅停留在高級(jí)語言層面上,不去究根問底,不去追根溯源,那我們只能算是淺嘗輒止。
其實(shí),“用低級(jí)語言去理解高級(jí)語言”也意味著用底層的知識(shí)去理解上層的東西,用基礎(chǔ)的知識(shí)去把握基礎(chǔ)之上的東西。好比用匯編語言去理解高級(jí)語言、用Win32、OOP和C++去理解MFC框架、用Win32、OOP和Object Pascal去理解VCL框架、用Windows Socket、OOP和C++去理解VC++中的網(wǎng)絡(luò)編程技術(shù)、用Windows Socket、OOP和Object Pascal去理解Delphi中的網(wǎng)絡(luò)控件。諸如此類的例子真是舉不勝數(shù)。
請(qǐng)記住,當(dāng)你站在優(yōu)秀平臺(tái)上舞刀弄棒、學(xué)個(gè)一招半式時(shí),千萬別沉浸于表面上的成功。試想,當(dāng)你用BCB的幾個(gè)數(shù)據(jù)庫(kù)控件成功訪問數(shù)據(jù)庫(kù)的時(shí)候,有多少東西是你自己做的,你又學(xué)到了多少東西??梢哉f,你所學(xué)到的不過是類似于打字操作、文檔編輯之類的簡(jiǎn)單操作而已。
任何高級(jí)的編程技術(shù)或是平臺(tái)都不是空穴來風(fēng)的。努力把它們的基礎(chǔ)和結(jié)構(gòu)分析清楚,你至少可以得到如下兩點(diǎn)好處:
1)對(duì)于新技術(shù)或新平臺(tái)的全面掌握和靈活運(yùn)用,正所謂庖丁解牛,咴咴呼而游刃有余。2)從深入分析和探索中獲取編程的思想,正所謂深入成就深度。
2.2 體會(huì)語言設(shè)計(jì)者的初衷 正如上面所述,任何新的編程技術(shù)或平臺(tái)都不是空穴來風(fēng),更不是某位天才一拍腦袋就想出來的。創(chuàng)新肯定是有源動(dòng)力的,新技術(shù)肯定是為解決既有技術(shù)的不足才出現(xiàn)的。說白了創(chuàng)新就是為了更高、更快、更強(qiáng)。試想,如果你能把握住新技術(shù)的來龍去脈,理解設(shè)計(jì)者的良苦用心,那你就可以把這項(xiàng)新技術(shù)在恰當(dāng)?shù)臅r(shí)間、恰當(dāng)?shù)牡攸c(diǎn)、以最恰當(dāng)?shù)姆绞绞褂闷饋?。在此我也想舉個(gè)例子,即虛函數(shù)和動(dòng)態(tài)函數(shù)4。
虛函數(shù)是C++語言中的重要概念之一。簡(jiǎn)單的說,虛函數(shù)因多態(tài)而生,多態(tài)因抽象統(tǒng)一接口(接口可以理解為方法)而起。虛函數(shù)出現(xiàn)的根源就是抽象統(tǒng)一的接口。
抽象是人類探索、描述客觀世界的利器。如何把紛繁復(fù)雜、變化多樣的各種事物描述清楚,唯一的方法就是抽象。語言也不例外。水果、衣服、車、食物、糧食等等,這些都是抽象出來的名詞,正如在課堂中所說,“吃水果可以吃盡天下所有的水果,不管是已發(fā)現(xiàn)的,還是未發(fā)現(xiàn)的”。抽象抓住了事物的本質(zhì)與共性。保證了相對(duì)的穩(wěn)定性,實(shí)現(xiàn)了以不變應(yīng)萬變的強(qiáng)大功能5??梢?,只有抽象才能統(tǒng)一接口。
通過抽象,可以把各種各樣事物的接口都抽象成一個(gè)接口。例如,可以把吃蘋果、吃梨子、吃菠蘿、吃西瓜等等都抽象成吃水果。但是,在真正使用抽象接口時(shí),必須把抽象接口還原到具體事物的真實(shí)接口中去。例如,水果是抽象的,沒法吃,吃水果這個(gè)抽象方法一定要還原到吃具體水果中去才有意義。這樣,一個(gè)抽象統(tǒng)一的接口,卻有許多種具體的表現(xiàn)形式,這便是是多態(tài)。
當(dāng)我們編寫一個(gè)類庫(kù)時(shí),如果能盡可能多的使用抽象的思想去統(tǒng)一類庫(kù)(或是各個(gè)子類)的接口,那么至少有如下幾點(diǎn)好處:
1)對(duì)于使用者,由于接口簡(jiǎn)單,大大簡(jiǎn)化了學(xué)習(xí)類庫(kù)和使用類庫(kù)的工作; 2)對(duì)于使用者,由于接口統(tǒng)一,相對(duì)穩(wěn)定,使用者編寫出來的代碼具有很強(qiáng)的擴(kuò)展性,即便在今后類庫(kù)又派生出新的子類,使用者編寫的代碼也無需作任何修改,因?yàn)榻涌谑墙y(tǒng)一的,相對(duì)固定的。
3)對(duì)于設(shè)計(jì)者,由于應(yīng)用了抽象,類庫(kù)的層次清晰。當(dāng)派生新的子類時(shí),父類已經(jīng)劃定了抽象的框框,按照既有框框?qū)崿F(xiàn)具體接口即可。
試想,如果能夠理解虛函數(shù)的設(shè)計(jì)初衷是為了抽象統(tǒng)一接口,那么在父類設(shè)計(jì)中該如何設(shè)計(jì)虛函數(shù)也就把握住了最根本的原則,即能夠從多種對(duì)象中抽象統(tǒng)一出來,且每個(gè)對(duì)象的具體實(shí)現(xiàn)又都不同的方法,都設(shè)計(jì)為虛函數(shù)。
至此,文章已經(jīng)分析了C++引入虛函數(shù)的根本原因。但此后,在BCB中,Borland公司的天才們又設(shè)計(jì)出能夠完全實(shí)現(xiàn)多態(tài)機(jī)制的另一種方法,動(dòng)態(tài)函數(shù)。有心人不禁要問,既然虛函數(shù)可以實(shí)現(xiàn)多態(tài)機(jī)制,干嗎還要引入動(dòng)態(tài)函數(shù)呢?這兩個(gè)函數(shù)有什么區(qū)別呢?孰優(yōu)孰劣呢?引入動(dòng)態(tài)函數(shù)的初衷又是什么呢?
呵呵,疑問總是探索未知領(lǐng)域的源動(dòng)力。而疑問意識(shí)并不是每個(gè)人都具備的,越是大家,越是對(duì)習(xí)以為常的事物產(chǎn)生疑問。好比牛頓被蘋果砸了腦袋,這引發(fā)了他研究萬有引力。我想,絕大部分人被蘋果砸到吐血都不會(huì)產(chǎn)生類似疑問。思維定式和傳統(tǒng)教育的灌輸扼殺了絕大部分人的疑問意識(shí),也就同時(shí)扼殺了他們的探索、創(chuàng)新意識(shí)。話題在回到動(dòng)態(tài)函數(shù)。
C++語言通過虛擬函數(shù)表VMT實(shí)現(xiàn)了虛擬函數(shù)的多態(tài)機(jī)制。對(duì)于VMT的內(nèi)存分配,許多C++著作中都作了詳細(xì)說明,在此不再贅述。了解VMT的內(nèi)存分配機(jī)制之后,你會(huì)發(fā)現(xiàn),C++設(shè)計(jì)者對(duì)于VMT的設(shè)計(jì)原則是以存儲(chǔ)空間換取調(diào)用時(shí)間,即重復(fù)存儲(chǔ)虛擬函數(shù)地址,保證虛擬函數(shù)的調(diào)用不會(huì)導(dǎo)致很多的指針訪問。不管是父類還是子類,不管子類是否覆蓋了父類的虛擬函數(shù),虛擬函數(shù)的調(diào)用都只會(huì)觸發(fā)相同數(shù)量的指針訪問,既由對(duì)象指針(this)獲取VMT指針,由VMT指針獲取虛擬函數(shù)指針。
以存儲(chǔ)空間換取調(diào)用時(shí)間的設(shè)計(jì)原則,提高了調(diào)用虛擬函數(shù)的運(yùn)行效率,但耗費(fèi)了較多的存儲(chǔ)空間。在寫一般C++程序時(shí),可能并不會(huì)感覺到虛擬函數(shù)的這一設(shè)計(jì)有什么缺點(diǎn)。但是,如果父類需要定義很多的虛擬函數(shù),只有很小一部分的虛擬函數(shù)會(huì)被子類覆蓋或調(diào)用,而且類的派生層次又非常深(如有7層以上)。在這種情況下,每個(gè)子類VMT都會(huì)因父類定義太多的虛擬函數(shù)而占據(jù)大量的內(nèi)存空間,但程序運(yùn)行時(shí),通過子類VMT調(diào)用的虛擬函數(shù)又很少。此時(shí),以存儲(chǔ)空間換取調(diào)用時(shí)間的設(shè)計(jì)原則就變得效率低下,不太適用了。有同學(xué)會(huì)問,會(huì)存在以上的特殊情況嗎?的確存在,在MFC和VCL封裝Win32消息機(jī)制時(shí),就面臨上述類似的問題。消息封裝的最初思路就是在父類中為每個(gè)消息定義一個(gè)虛擬函數(shù),作為消息的處理函數(shù)。如果子類控件需要處理某個(gè)消息,它就覆蓋與該消息對(duì)應(yīng)的虛擬函數(shù)。試想,Windows有上百個(gè)消息,為每個(gè)消息定義一個(gè)虛擬函數(shù),也就是至少100個(gè)虛擬函數(shù)。可是子類控件對(duì)于大部分消息都是默認(rèn)處理,它只會(huì)處理一小部分消息,即覆
蓋一小部分虛擬函數(shù)??梢?,使用上述的完全虛擬函數(shù)的設(shè)計(jì)方法來實(shí)現(xiàn)消息的封裝顯然存在較大問題,一是VMT會(huì)消耗太多的內(nèi)存空間;二是對(duì)VMT內(nèi)存空間的訪問率、使用率低下。
基于上述缺點(diǎn),MFC和VCL對(duì)于消息的封裝不得不另換思路。為此,Microsoft為MFC引入了消息映射網(wǎng)的設(shè)計(jì)思路6,而Borland仰仗在編譯器設(shè)計(jì)上的深厚功力,引入了動(dòng)態(tài)函數(shù)/消息函數(shù)。動(dòng)態(tài)函數(shù)的設(shè)計(jì)原則與虛擬函數(shù)恰恰相反,即以調(diào)用時(shí)間換取存儲(chǔ)空間。正如虛擬函數(shù)指針存放在VMT中一樣,動(dòng)態(tài)函數(shù)指針也存放在類似的DMT中。但DMT只存儲(chǔ)本類覆蓋或是定義的虛擬函數(shù),不存儲(chǔ)父類的虛擬函數(shù)。而且,子類DMT會(huì)存儲(chǔ)一個(gè)指向父類DMT的指針,如此設(shè)計(jì)是為了子類對(duì)象能夠調(diào)用到父類定義的虛擬函數(shù)。有個(gè)極端的情況就是,子類對(duì)象調(diào)用根類定義的虛擬函數(shù),此時(shí)的動(dòng)態(tài)函數(shù)調(diào)用因?yàn)槎鄬痈割怐MT的訪問而變得效率低下。
可見,如果我們能夠很好的把握設(shè)計(jì)者的初衷,深入到設(shè)計(jì)者當(dāng)時(shí)所處的場(chǎng)景,理解設(shè)計(jì)者當(dāng)時(shí)的設(shè)計(jì)思路,自然就能夠統(tǒng)觀全局的把握新技術(shù)、心領(lǐng)神會(huì)的運(yùn)用新技術(shù)。
2.3 其它的建議
還有些其它的建議,不成體系,單另列出:
1)多編寫一些封裝的小例子來培養(yǎng)自己面向?qū)ο蟮木幊趟枷耄缱址怌String、文件類CFile、內(nèi)存管理類CBuffer。
2)要有選擇的閱讀參考書。如今的計(jì)算機(jī)書籍可謂良莠不齊,也讓初學(xué)者挑花了眼睛。我覺得書籍的選擇應(yīng)遵循如下原則:不買只有例子的、只會(huì)抄襲的書;只買一本大全、寶典之類的工具查詢書;多買講解編程思想、源碼分析的書。
冰凍三尺非一日之寒,從語言進(jìn)步到編程需要長(zhǎng)時(shí)間的積累和大量的思考。當(dāng)質(zhì)疑、探索、總結(jié)、再運(yùn)用的方法幫助你掌握編程后,你會(huì)發(fā)現(xiàn)你所獲得的東西遠(yuǎn)比編程本身要多得太多、高得太多、廣得太多。