C是“面向過程”的程序設(shè)計(jì)語言;C++,C#,java是“面向?qū)ο蟆钡某绦蛟O(shè)計(jì)語言。舉個(gè)例子:比如你想做一個(gè)模型飛機(jī),利用“面向過程”的思想,你所想的就是,先做頭再做身體,再做尾巴。它是一個(gè)比較順著的概念。而如果利用“面向?qū)ο蟆钡乃枷耄闼氲木褪牵阋鲲w機(jī)的話,它有翅膀,頭部,身體,尾巴等各個(gè)部件,你先把各個(gè)部分做好,再考慮怎么把它們連接起來。
C語言特點(diǎn):
作為一種結(jié)構(gòu)化語言,層次清晰,便于按模塊化方式組織程序,易于調(diào)試和維護(hù);表現(xiàn)能力和處理能力極強(qiáng)。可以直接訪問內(nèi)存的物理地址,進(jìn)行位(bit)一級(jí)的操作;實(shí)現(xiàn)了對(duì)硬件的編程操作,因此既可用于系統(tǒng)軟件的開發(fā),也適合于應(yīng)用軟件的開發(fā);具有效率高,可移植性強(qiáng)等特點(diǎn)。
C#語言特點(diǎn):
微軟開發(fā)的一種編程語言,語法類似Java,幾乎就是從Java的翻版。運(yùn)行原理和Java也類似,也是通過運(yùn)行時(shí)庫(kù)的支持運(yùn)行。不過支持的平臺(tái)還很有限,C#目前只被Windows和Linux支持,Windows下的支持當(dāng)然是由微軟自己開發(fā)的,而Linux下的支持則有MONO支持。實(shí)際上,MONO也是把C#應(yīng)用轉(zhuǎn)化為Java應(yīng)用而已,所以本質(zhì)上,C#仍然只是被微軟自己的操作系統(tǒng)支持。應(yīng)用平臺(tái)受到限制,是它最大的缺點(diǎn)。
C++語言特點(diǎn):
1、在C語言的基礎(chǔ)上進(jìn)行擴(kuò)充和完善,使C++兼容了C語言的面向過程特點(diǎn),又成為了一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語言;
2、可以使用抽象數(shù)據(jù)類型進(jìn)行基于對(duì)象的編程;
3、可以使用多繼承、多態(tài)進(jìn)行面向?qū)ο蟮木幊蹋?/p>
4、可以擔(dān)負(fù)起以模版為特征的泛型化編程。
Java語言特點(diǎn):
Java語言是一種完全的面向?qū)ο笳Z言,雖然它的底層(運(yùn)行時(shí)庫(kù))是用C語言開發(fā)的,可是并不依賴于C。因?yàn)镴ava的運(yùn)行是在運(yùn)行時(shí)庫(kù)的支持下進(jìn)行的,所以運(yùn)行效率比起可以更接近底層的C/C++來說效率會(huì)有所影響,不過Java的類庫(kù)采用很好的設(shè)計(jì)理念設(shè)計(jì),非常好用,也非常實(shí)用,已經(jīng)成為業(yè)界的一種標(biāo)準(zhǔn)開發(fā)語言。它的跨平臺(tái)的特性尤其讓很多開發(fā)者歡迎,你只需要開發(fā)一次就能在所有安裝了Java運(yùn)行時(shí)庫(kù)的系統(tǒng)上運(yùn)行。Java發(fā)展了十幾年了,可以應(yīng)用領(lǐng)域非常之廣泛,Web開發(fā)有JSP,J2EE,桌面領(lǐng)域現(xiàn)在有JavaFX。
Objective-C特點(diǎn):
1.Objecive-C屬于Smalltalk學(xué)派,其面向?qū)ο笈cC++面向?qū)ο缶幊塘Φ腟imula 67(一種早期面向?qū)ο笳Z言)學(xué)派不同;
2.Objective-C 是ANSI C的超集,擴(kuò)展了C 語言使它具備面向?qū)ο笤O(shè)計(jì)的能力,例如類、消息‘繼承;同時(shí)在Objective-C的代碼中可以有C和C++語句,它可以調(diào)用C的函數(shù),也可以通過C++對(duì)象訪問方法;
3.Objective-C可以實(shí)現(xiàn)底層系統(tǒng)編程,另一方面可以支持利用動(dòng)態(tài)架構(gòu)進(jìn)行開發(fā)。
Objective-C和C++的區(qū)別就是Objective-C更加靈活而降低了其編譯的要求(這個(gè)降低并不是說編譯就無要求,不會(huì)進(jìn)行類型檢查等),而C++提高編譯的要求,在編譯的過程發(fā)現(xiàn)更多的潛在錯(cuò)誤,在運(yùn)行前改正,同時(shí)會(huì)降低程序的靈活性。因此,在Smalltalk看來正確的程序在Simulr 67那里就無法通過。
Java和C++相同點(diǎn):
都是面向?qū)ο笳Z言,具有面向?qū)ο笏枷耄ǚ庋b、繼承、多態(tài)),而由于C++兼容了C,使得自身成為了帶類C的語言。而Java則是完全面向?qū)ο蟮恼Z言。
不同之處:
Java無法讓編程者通過指針來直接訪問內(nèi)存—無指針,并且自動(dòng)添加了內(nèi)存管理功能,從而有效的防止了C、C++語言中指針操作失誤;但是Java虛擬機(jī)內(nèi)部仍然使用了指針,只是程序員不可使用而已。
C++支持多重繼承,允許多個(gè)父類派生一個(gè)類,但使用復(fù)雜;Java不支持多重繼承,但允許實(shí)現(xiàn)多個(gè)接口,實(shí)現(xiàn)了C++多重繼承的功能,又避免了C++中的多重繼承實(shí)現(xiàn)方式帶來的諸多不便。
Java程序中所有的對(duì)象都是用new操作符建立在內(nèi)存堆上。可以自動(dòng)進(jìn)行無用內(nèi)存回收操作,無需程序員進(jìn)行刪除,而C++需要程序員釋放無用內(nèi)存資源。
Java不支持操作符重載和預(yù)處理功能,而C++有預(yù)編譯功能。
C/C++不支持字符串變量,而Java可以用類對(duì)象(String或者StringBuffer)來實(shí)現(xiàn)對(duì)字符串的操作。
Java中的異常機(jī)制用于捕獲意外事件,增強(qiáng)系統(tǒng)容錯(cuò)能力。