面向?qū)ο缶幊蘋Pportunity Presentation(OPP)語言
C#在帶來對應用程序的快速開發(fā)能力的同時,并沒有犧牲C與C++程序員所關心的各種特性。它忠實地繼承了C和C++的優(yōu)點。如果你對C或C++有所了解,你會發(fā)現(xiàn)它是那樣的熟悉。即使你是一位新手,C#也不會給你帶來任何其它的麻煩,快速應用程序開發(fā)(Rapid Application Development,RAD)的思想與簡潔的語法將會使你迅速成為一名熟練的開發(fā)人員。
●簡潔的語法
?
●精心地面向?qū)ο笤O計
?
●與Web的緊密結合
?
●完整的安全性與錯誤處理
?
●版本處理技術
?
●靈活性與兼容性
?
請原諒,雖然我們一再強調(diào)學習本書不需要任何的編程基礎,但在這里還不得不提到C++。
?
在缺省的情況下,C#的代碼在.NET框架提供的“可操縱”環(huán)境下運行,不允許直接地內(nèi)存操作。它所帶來的最大的特色是沒有了指針。與此相關的是,那些在C++中被瘋狂使用的操作符(例如:“::”、“->”和“.,”)已經(jīng)不再出現(xiàn)。C#只支持一個“.”,對于我們來說,現(xiàn)在需要理解的一切僅僅是名字的嵌套而已。
?
C#用真正的關鍵字換掉了那些把活動模板庫(Active Template Library,ALT)和COM搞得亂糟糟的偽關鍵字,如OLE_COLOR、BOOL、VARIANT_BOOL、DISPID_XXXXX等等。每種C#操作符在.NET類庫中都有了新名字。
?
語法中的冗余是C++中的常見的問題,比如"const"和"#define"、各種各樣的字符類型等等。C#對此進行了簡化,只保留了常見的形式,而別的冗余形式從它的語法結構中被清除了出去。
?
二、精心地面向?qū)ο笤O計 ?
也許你會說,從Smalltalk開始,面向?qū)ο蟮脑掝}就始終纏繞著任何一種現(xiàn)代程序設計語言。的確,C#具有面向?qū)ο蟮恼Z言所應有的一切特性:封裝、繼承與多態(tài)性,這并不出奇。然而,通過精心地面向?qū)ο笤O計,從高級商業(yè)對象到系統(tǒng)級應用,C#建造廣泛組件的絕對選擇。
?
在C#的類型系統(tǒng)中,每種類型都可以看作一個對象。C#提供了一個叫做裝箱(boxing)與拆箱(unboxing)的機制來完成這種操作,而不給使用者帶來麻煩,這在以后的章節(jié)中將進行更為詳細的介紹。
?
C#只允許單繼承,即一個類不會有多個基類,從而避免了類型定義的混亂。在后面的學習中你很快會發(fā)現(xiàn),C#中沒有了全局函數(shù),沒有了全局變量,也沒有了全局常數(shù)。一切的一切,都必須封裝在一個類之中。你的代碼將具有更好的可讀性,并且減少了發(fā)生命名沖突的可能。
?
整個C#的類模型是建立在.NET虛擬對象系統(tǒng)(Visual Object System,VOS)的基礎之上,其對象模型是.NET基礎架構的一部分,而不再是其本身的組成部分。在下面將會談到,這樣做的另一個好處是兼容性。
?
借助于從VB中得來的豐富的RAD經(jīng)驗,C#具備了良好的開發(fā)環(huán)境。結合自身強大的面向?qū)ο蠊δ?,C#使得開發(fā)人員的生產(chǎn)效率得到極大的提高。對于公司而言,軟件開發(fā)周期的縮短將能使它們更好應付網(wǎng)絡經(jīng)濟的競爭。在功能與效率的杠桿上人們終于找到了支點。
?
三、與Web的緊密結合 ?
.NET中新的應用程序開發(fā)模型意味著越來越多的解決方案需要與Web標準相統(tǒng)一,例如超文本標記語言(Hypertext Markup Language,HTML)和XML。由于歷史的原因,現(xiàn)存的一些開發(fā)工具不能與Web緊密地結合。SOAP的使用使得C#克服了這一缺陷,大規(guī)模深層次的分布式開發(fā)從此成為可能。
?
由于有了Web服務框架的幫助,對程序員來說,網(wǎng)絡服務看起來就象是C#的本地對象。程序員們能夠利用他們已有的面向?qū)ο蟮闹R與技巧開發(fā)Web服務。僅需要使用簡單的C#語言結構,C#組件將能夠方便地為Web服務,并允許它們通過Internet被運行在任何操作系統(tǒng)上的任何語言所調(diào)用。舉個例子,XML已經(jīng)成為網(wǎng)絡中數(shù)據(jù)結構傳遞的標準,為了提高效率,C#允許直接將XML數(shù)據(jù)映射成為結構。這樣就可以有效的處理各種數(shù)據(jù)。
?
四、完整的安全性與錯誤處理 ?
語言的安全性與錯誤處理能力,是衡量一種語言是否優(yōu)秀的重要依據(jù)。任何人都會犯錯誤,即使是最熟練的程序員也不例外:忘記變量的初始化,對不屬于自己管理范圍的內(nèi)存空間進行修改,......。這些錯誤常常產(chǎn)生難以預見的后果。一旦這樣的軟件被投入使用,尋找與改正這些簡單錯誤的代價將會是讓人無法承受的。C#的先進設計思想可以消除軟件開發(fā)中的許多常見錯誤,并提供了包括類型安全在內(nèi)的完整的安全性能。為了減少開發(fā)中的錯誤,C#會幫助開發(fā)者通過更少的代碼完成相同的功能,這不但減輕了編程人員的工作量,同時更有效地避免了錯誤的發(fā)生。
?
.NET運行庫提供了代碼訪問安全特性,它允許管理員和用戶根據(jù)代碼的ID來配置安全等級。在缺省情況下,從Internet和Intranet下載的代碼都不允許訪問任何本地文件和資源。比方說,一個在網(wǎng)絡上的共享目錄中運行的程序,如果它要訪問本地的一些資源,那么異常將被觸發(fā),它將會無情地被異常扔出去,若拷貝到本地硬盤上運行則一切正常。內(nèi)存管理中的垃圾收集機制減輕了開發(fā)人員對內(nèi)存管理的負擔。.NET平臺提供的垃圾收集器(Garbage Collection,GC)將負責資源的釋放與對象撤銷時的內(nèi)存清理工作。
?
變量是類型安全的。C#中不能使用未初始化的變量,對象的成員變量由編譯器負責將其置為零,當局部變量未經(jīng)初始化而被使用時,編譯器將做出提醒;C#不支持不安全的指向,不能將整數(shù)指向引用類型,例如對象,當進行下行指向時,C#將自動驗證指向的有效性;C#中提供了邊界檢查與溢出檢查功能。
?
五、版本處理技術 ?
C#提供內(nèi)置的版本支持來減少開發(fā)費用,使用C#將會使開發(fā)人員更加輕易地開發(fā)和維護各種商業(yè)用戶。
?
升級軟件系統(tǒng)中的組件(模塊)是一件容易產(chǎn)生錯誤的工作。在代碼修改過程中可能對現(xiàn)存的軟件產(chǎn)生影響,很有可能導致程序的崩潰。為了幫助開發(fā)人員處理這些問題,C#在語言中內(nèi)置了版本控制功能。例如:函數(shù)重載必須被顯式聲明,而不會象在C++或java中經(jīng)常發(fā)生的那樣不經(jīng)意地被進行,這可以防止代碼級錯誤和保留版本化的特性。另一個相關的特性是接口和接口繼承的支持。這些特性可以保證復雜的軟件可以被方便地開發(fā)和升級。
?
六、靈活性和兼容性
?
在簡化語法的同時,C#并沒有失去靈活性。盡管它不是一種無限制語言,比如:它不能用來開發(fā)硬件驅(qū)動程序,在默認的狀態(tài)下沒有指針等等,但是,在學習過程中你將發(fā)現(xiàn),它仍然是那樣的靈巧。
?
如果需要,C#允許你將某些類或者類的某些方法聲明為非安全的。這樣一來,你將能夠使用指針、結構和靜態(tài)數(shù)組,并且調(diào)用這些非安全代碼不會帶來任何其它的問題。此外,它還提供了一個另外的東西(這樣的稱呼多少有些不敬)來模擬指針的功能--delegates,代表。再舉一個例子:C#不支持類的多繼承,但是通過對接口的繼承,你將獲得這一功能。
?
下面談安全性。
?
正是由于其靈活性,C#允許與C風格的需要傳遞指針型參數(shù)的API進行交互操作,DLL的任何入口點都可以在程序中進行訪問。C#遵守.NET公用語言規(guī)范(Common Language Specification,CLS),從而保證了C#組件與其它語言組件間的互操作性。元數(shù)據(jù)(Metadata)概念的引入既保證了兼容性,又實現(xiàn)了類型安全。 二、Java語言特點
Java是一種簡單的,面向?qū)ο蟮模植际降?,解釋型的,健壯安全的,結構中立的,可移植的,性能優(yōu)異、多線程的動態(tài)語言。
Java主要特性
1、Java語言是簡單的。Java語言的語法與C語言和C++語言很接近,使得大多數(shù)程序員很容易學習和使用Java。另一方面,Java丟棄了C++ 中很少使用的、很難理解的、令人迷惑的那些特性,如操作符重載、多繼承、自動的強制類型轉換。特別地,Java語言不使用指針,并提供了自動的廢料收集,使得程序員不必為內(nèi)存管理而擔憂。
2、Java語言是一個面向?qū)ο蟮?。Java語言提供類、接口和繼承等原語,為了簡單起見,只支持類之間的單繼承,但支持接口之間的多繼承,并支持類與接口之間的實現(xiàn)機制(關鍵字為implements)。Java語言全面支持動態(tài)綁定,而C++ 語言只對虛函數(shù)使用動態(tài)綁定??傊?,Java語言是一個純的面向?qū)ο蟪绦蛟O計語言。
3、Java語言是分布式的。Java語言支持Internet應用的開發(fā),在基本的Java應用編程接口中有一個網(wǎng)絡應用編程接口(java.net),它提供了用于網(wǎng)絡應用編程的類庫,包括URL、URLConnection、Socket、 ServerSocket等。Java的RMI(遠程方法激活)機制也是開發(fā)分布式應用的重要手段。
4、Java語言是健壯的。Java的強類型機制、異常處理、廢料的自動收集等是Java程序健壯性的重要保證。對指針的丟棄是Java的明智選擇。Java的安全檢查機制使得Java更具健壯性。
5、Java語言是安全的。Java通常被用在網(wǎng)絡環(huán)境中,為此,Java提供了一個安全機制以防惡意代碼的攻擊。除了Java語言具有的許多安全特性以外,Java對通過網(wǎng)絡下載的類具有一個安全防范機制(類ClassLoader),如分配不同的名字空間以防替代本地的同名類、字節(jié)代碼檢查,并提供安全管理機制(類SecurityManager)讓Java應用設置安全哨兵。
6、Java語言是體系結構中立的。Java程序(后綴為java的文件)在Java平臺上被編譯為體系結構中立的字節(jié)碼格式(后綴為class的文件), 然后可以在實現(xiàn)這個Java平臺的任何系統(tǒng)中運行。這種途徑適合于異構的網(wǎng)絡環(huán)境和軟件的分發(fā)。
7、Java語言是可移植的。這種可移植性來源于體系結構中立性,另外,Java還嚴格規(guī)定了各個基本數(shù)據(jù)類型的長度。Java系統(tǒng)本身也具有很強的可移植性,Java編譯器是用Java實現(xiàn)的,Java的運行環(huán)境是用ANSI C實現(xiàn)的。
8、Java語言是解釋型的。如前所述,Java程序在Java平臺上被編譯為字節(jié)碼格式, 然后可以在實現(xiàn)這個Java平臺的任何系統(tǒng)中運行。在運行時,Java平臺中的Java解釋器對這些字節(jié)碼進行解釋執(zhí)行,執(zhí)行過程中需要的類在聯(lián)接階段被載入到運行環(huán)境中。
9、Java是高性能的。與那些解釋型的高級腳本語言相比,Java的確是高性能的。事實上,Java的運行速度隨著JIT(Just-In-Time)編譯器技術的發(fā)展越來越接近于C++。
10、Java語言是多線程的。在Java語言中,線程是一種特殊的對象,它必須由Thread類或其子(孫)類來創(chuàng)建。通常有兩種方法來創(chuàng)建線程:其一,使用型構為Thread(Runnable) 的構造子將一個實現(xiàn)了Runnable接口的對象包裝成一個線程,其二,從Thread類派生出子類并重寫run方法,使用該子類創(chuàng)建的對象即為線程。值得注意的是Thread類已經(jīng)實現(xiàn)了Runnable接口,因此,任何一個線程均有它的run方法,而run方法中包含了線程所要運行的代碼。線程的活動由一組方法來控制。 Java語言支持多個線程的同時執(zhí)行,并提供多線程之間的同步機制(關鍵字為synchronized)。
11、Java語言是動態(tài)的。Java語言的設計目標之一是適應于動態(tài)變化的環(huán)境。Java程序需要的類能夠動態(tài)地被載入到運行環(huán)境,也可以通過網(wǎng)絡來載入所需要的類。這也有利于軟件的升級。另外,Java中的類有一個運行時刻的表示,能進行運行時刻的類型檢查。
Java語言的優(yōu)良特性使得Java應用具有無比的健壯性和可靠性,這也減少了應用系統(tǒng)的維護費用。Java對對象技術的全面支持和Java平臺內(nèi)嵌的API能縮短應用系統(tǒng)的開發(fā)時間并降低成本。Java的編譯一次,到處可運行的特性使得它能夠提供一個隨處可用的開放結構和在多平臺之間傳遞信息的低成本方式。特別是Java企業(yè)應用編程接口(Java Enterprise APIs)為企業(yè)計算及電子商務應用系統(tǒng)提供了有關技術和豐富的類庫。
Java的八大基本數(shù)據(jù)類型及其包裝類
原始類型 包裝類 原始類型所占的字節(jié)數(shù)
short Short 2個字節(jié)
int Integer 4個字節(jié)
long Long 8個字節(jié)
float Float 4個字節(jié)
double Double 8個字節(jié)
byte Byte 1個字節(jié)
char Character 2個字節(jié)
? ? ? ?boolean Boolean 這個試編譯環(huán)境而定
三、C++語言的特點
1.它是C的擴充,兼容C,這就使許多C代碼在不經(jīng)修改就可以為C++所用;
2.C++保持C的簡潔、高效和接近匯編語言的特點上,又比C更安全,可讀性跟好,代碼更為合理;
3.與C比最大特點,那就是增加了面向?qū)ο蟮臋C制;因此,C++既可用于面向過程的結構化程序設計,也可以用于面向?qū)ο蟮某绦蛟O計。