1. 語言類型:
首先,C/C++、Java 、Python都是強(qiáng)類型的語言。強(qiáng)類型語言的定義如下:
- 強(qiáng)類型語言是一種強(qiáng)制類型定義的語言,即一旦某一個變量被定義類型,如果不經(jīng)強(qiáng)制轉(zhuǎn)換,那么它永遠(yuǎn)就是該數(shù)據(jù)類型。而弱類型語言是一種弱類型定義的語言,某一個變量被定義類型,該變量可以根據(jù)環(huán)境變化自動進(jìn)行轉(zhuǎn)換,不需要經(jīng)過現(xiàn)行強(qiáng)制轉(zhuǎn)換。
- 強(qiáng)類型語言包括:Java、.Net、Python、C/C++ 等語言。其中 Python 是動態(tài)語言,是強(qiáng)類型定義語言,是類型安全的語言,Java 是靜態(tài)語言,是強(qiáng)類型定義語言,也是;類型安全的語言;
- 弱類型語言包括:VB,PHP,JavaScript 等語言。其中 VBScript 是動態(tài)語言,是一種類型不安全的原因。
- 強(qiáng)類型語言和弱類型原因其判斷的根本是是否會隱形進(jìn)行語言類型轉(zhuǎn)變。強(qiáng)類型原因在速度上可能略遜于弱類型語言,但是強(qiáng)類型定義語帶來的嚴(yán)謹(jǐn)性又避免了不必要的錯誤。
上面提到了動態(tài)語言與靜態(tài)語言,那就講講動態(tài)語言靜態(tài)語言的區(qū)別:
- 動態(tài)類型語言:動態(tài)性語言是指在運(yùn)行期間才去做數(shù)據(jù)類型檢查的語言,也就是說動態(tài)類型語言編程時,永遠(yuǎn)不用給任何變量指定數(shù)據(jù)類型,該語言會在第一次賦值給變量時,在內(nèi)部將數(shù)據(jù)類型記錄下來。Python 和 Ruby 就是一種典型的動態(tài)類型語言,其他的各種腳本語言,如 VBScript 也多少屬于動態(tài)類型語言。
- 靜態(tài)類型語言:靜態(tài)類型語言與動態(tài)類則剛好相反,它的數(shù)據(jù)類型在編譯期間檢查,也就是說在寫程序時要聲明所有變量的數(shù)據(jù)類型,C/C++ 是靜態(tài)類型語言的典型代表,其他靜態(tài)語言還有 C#、Java 等。
對于動態(tài)語言與靜態(tài)語言的區(qū)分,其根本在于判斷是在運(yùn)行期間去做數(shù)據(jù)類型還是在編譯期間檢查。
?文章來源地址http://www.zghlxwxcb.cn/news/detail-780809.html
?
2. 面向過程與面向?qū)ο?/strong>
C 語言是面向過程的,C++、JAVA、Python 都是面向?qū)ο?/strong>的。
- 面向過程是直接將解決問題的步驟分析出來,然后用函數(shù)把步驟一步一步實(shí)現(xiàn),然后再依次調(diào)用就可以了。
- 而面向?qū)ο笫菍?gòu)成問題的事物,分解成若干個對象,建立對象的目的不是為了完成一個步驟,而是為了描述某個事物在解決問題過程中的行為。
打個比方,我們想求長方形的面積:
++++++++++++++++++++++++++++++++++++++++++++++
面向過程會以,求解數(shù)學(xué)題的思路去思考:
設(shè)定長方形的長和寬分別為 x 和 y,
確定長方形面積的算法
編寫出計(jì)算面積的函數(shù)
將 x、y 傳入相對應(yīng)的函數(shù),求解長方形的面積。
++++++++++++++++++++++++++++++++++++++++++++++
面向?qū)ο髸裕枋鰧ο蟮乃悸啡ニ伎迹?/p>
對規(guī)則圖形的一般屬性和性質(zhì)進(jìn)行定義,如周長和面積
在規(guī)則圖形的基礎(chǔ)上,創(chuàng)建長方形,描述長方形的屬性和性質(zhì)
創(chuàng)建長方形的對象,調(diào)用它的面積函數(shù),以求解長方形的面積
++++++++++++++++++++++++++++++++++++++++++++++
從這個簡單的例子中我們可以看出面向?qū)ο蠛兔嫦蜻^程解決問題的不同,但似乎他們的規(guī)模并沒有太大區(qū)別。這是因?yàn)槔又袉栴}規(guī)模非常小,當(dāng)我們實(shí)際解決一個規(guī)模不小的問題時,可能會涉及多個對象間的交互、代碼的復(fù)用及擴(kuò)展問題,此時面向?qū)ο蟮膬?yōu)點(diǎn)就顯現(xiàn)出來了。畢竟,面向?qū)ο缶褪菫榱私档拖到y(tǒng)的耦合度而提出的。(耦合度:各模塊間相互聯(lián)系程度的度量)?但面向過程也并非一無是處,其優(yōu)良的效率是面向?qū)ο箅y以達(dá)到的。
因此,我們可以將他們的優(yōu)缺點(diǎn)概括如下:
面向過程
特性
自頂向下、逐步求精、模塊化
優(yōu)點(diǎn)
性能比面向?qū)ο蟾?,因?yàn)轭愓{(diào)用需要實(shí)例化,開銷比較大,比較消耗資源。
如單片機(jī)、嵌入式開發(fā)、Linux/Unix 等一般采用面向過程開發(fā),因?yàn)樵谒鼈兛磥硇阅苁亲钪匾囊蛩亍?/p>
缺點(diǎn)
沒有面向?qū)ο笠拙S護(hù)、易復(fù)用、易擴(kuò)展
(按照面向過程的思想,在解決問題時,各函數(shù)之間是為了這個問題服務(wù);而面向?qū)ο蟮乃枷?,則是站在提出問題的主體的角度去解決問題,可將解決這一具體問題的步驟,抽象為解決這一類問題的方法,以后再遇到類似的問題,可以復(fù)用解決思路)
?
面向?qū)ο?/strong>
特性
封裝、繼承、多態(tài)、抽象
優(yōu)點(diǎn)
易維護(hù)、易復(fù)用、易擴(kuò)展
缺點(diǎn)
性能比面向過程低
?
?
3. 編譯型和解釋型語言
計(jì)算機(jī)是不能理解高級語言的,更不能直接執(zhí)行高級語言,它只能直接理解機(jī)器語言,所以使用任何高級語言編寫的程序若想被計(jì)算機(jī)運(yùn)行,都必須將其轉(zhuǎn)換成計(jì)算機(jī)語言,也就是機(jī)器碼。而這種轉(zhuǎn)換的方式有兩種:
1.編譯
2.解釋
由此高級語言也分為編譯型語言和解釋型語言。
主要區(qū)別在于,前者源程序編譯后即可在該平臺運(yùn)行,后者是在運(yùn)行期間才編譯。所以前者運(yùn)行速度快,后者跨平臺性好。
?
編譯型語言
編譯型語言使用專門的編譯器,針對特定的平臺,將高級語言源代碼一次性的編譯成可被該平臺硬件執(zhí)行的機(jī)器碼,并包裝成該平臺所能識別的可執(zhí)行性程序的格式。
特點(diǎn)
在編譯型語言寫的程序執(zhí)行之前,需要一個專門的編譯過程,把源代碼編譯成機(jī)器語言的文件,如exe格式的文件,以后要再運(yùn)行時,直接使用編譯結(jié)果即可,如直接運(yùn)行exe文件。因?yàn)橹恍杈幾g一次,以后運(yùn)行時不需要編譯,所以編譯型語言執(zhí)行效率高。
總結(jié)
1. 一次性的編譯成平臺相關(guān)的機(jī)器語言文件,運(yùn)行時脫離開發(fā)環(huán)境,運(yùn)行效率高;
2. 與特定平臺相關(guān),一般無法移植到其他平臺;
3. 現(xiàn)有的 C/C++、Objective 等都屬于編譯型語言。
?
解釋型語言
使用專門的解釋器對源程序逐行解釋成特定平臺的機(jī)器碼并立即執(zhí)行。是代碼在執(zhí)行時才被解釋器一行行動態(tài)翻譯和執(zhí)行,而不是在執(zhí)行之前就完成翻譯。
特點(diǎn)
解釋型語言不需要事先編譯,其直接將源代碼解釋成機(jī)器碼并立即執(zhí)行,所以只要某一平臺提供了相應(yīng)的解釋器即可運(yùn)行該程序。
總結(jié)
1. 解釋型語言每次運(yùn)行都需要將源代碼解釋稱機(jī)器碼并執(zhí)行,效率較低;
2. 只要平臺提供相應(yīng)的解釋器,就可以運(yùn)行源代碼,所以可以方便源程序移植;
3. Python 等屬于解釋型語言。
?
編譯型與解釋型,兩者各有利弊
前者由于程序執(zhí)行速度快,同等條件下對系統(tǒng)要求較低,因此像開發(fā)操作系統(tǒng)、大型應(yīng)用程序、數(shù)據(jù)庫系統(tǒng)等時都采用它,像 C/C++、Pascal/Object Pascal(Delphi) 等都是編譯語言,而一些網(wǎng)頁腳本、服務(wù)器腳本及輔助開發(fā)接口這樣的對速度要求不高、對不同系統(tǒng)平臺間的兼容性有一定要求的程序則通常使用解釋性語言,如 Java、JavaScript、VBScript、Perl、Python、Ruby、MATLAB 等等。
?
?
關(guān)于 Java
Java 和其他的語言不太一樣。因?yàn)?Java 針對不同的平臺有不同的 JVM,實(shí)現(xiàn)了跨平臺。所以 Java 語言有一次編譯到處運(yùn)行的說法。
1. 你可以說它是編譯型的:因?yàn)樗械?Java 代碼都是要編譯的,.java 文件不經(jīng)過編譯就什么用都沒有。
2. 你可以說它是解釋型的:因?yàn)?Java 代碼編譯后不能直接運(yùn)行,它是解釋運(yùn)行在 JVM 上的,所以它是解釋運(yùn)行的,那也就算是解釋的了。
3. 但是,現(xiàn)在的 JVM 為了效率,都有一些JIT優(yōu)化。它又會把 .class 文件的二進(jìn)制代碼編譯為本地的代碼直接運(yùn)行,所以,又是編譯的。
?
?
?
筆者認(rèn)為 Java 更偏向解釋型的語言,因?yàn)殡m然 Java 也需要編譯,編譯成 .class 文件,但是并不是機(jī)器可以識別的語言,而是字節(jié)碼,最終還是需要 jvm的解釋,才能在各個平臺執(zhí)行,這同時也是 Java 跨平臺的原因。
?
因此可以如下分類:
編譯型的語言:C/C++
解釋型的語言:Java、Python
另附上一張 JAVA 與 C/C++ 對比的圖片,是筆者在學(xué)習(xí)時看到的,有些方面筆者也正在學(xué)習(xí)中,因此不一一解釋了,供大家一起學(xué)習(xí)。
文章來源:http://www.zghlxwxcb.cn/news/detail-780809.html
?
到了這里,關(guān)于全面對比 Python、Go、VB、PHP、C/C++、C#、.Net、Java、… 等多編程語言區(qū)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!