伊莉討論區

標題: 請問java 跟C++會差很多嗎? [打印本頁]

作者: qsqswdwd33    時間: 2016-8-12 07:24 PM     標題: 請問java 跟C++會差很多嗎?

自己有學過C++,現在想要學app,只不過沒學過java,
想請問 java跟C++會差很多嗎?


謝謝
作者: chevylin0802    時間: 2016-8-13 01:34 PM

本帖最後由 chevylin0802 於 2016-8-13 02:20 PM 編輯

就精通並深入了解各種程式語言的差異者來講
JAVA跟C++存在著很大的差異
這裏面包括在使用上以及理論上與觀念上都有很大的差異性

但就學習程式的人的角度來說
兩者之間的差異性並不算很多
因為JAVA承繼了C/C++大約80%以上的語法用法
因此看起來
有C++的底子要學會JAVA並不難
但是也就是因為這樣子
使得許多從C++轉學JAVA的人底子打得並不好
原因是多數都只是掌握住語法卻不知道它的觀念以及理論
也因此許多人從C++轉換跑道到JAVA的時候
常常會寫出一堆垃圾級的程式
甚至於也常常有許多的BUG

但是會使用C++的人也有一項只懂得使用JAVA的人所無法企及的領域
那就是JNI的介面

純JAVA的工程師無法跨越到撰寫JNI的這個領域上
也因為它涉及到的是JAVA所沒涉及到的領域
因此兩者皆通的人往往會比只懂得純JAVA的人更勝出一級

兩者之間究竟有什麼樣的差別呢?
這需要從兩者之間的發展史開始講起
C++被稱為第一種物件導向程式語言
但是C++卻不是成熟的物件導向程式語言
事實上C++的基礎點仍然是承繼於C這種程序式的程式語言之上
也因此C++保有著相當多的程序語言的程式特性與程式特徵
而除此之外
C++擁有著多重繼承的特性也是其他多數物件導向程式語言所不具備的
即使其他的物件導向程式語言可以用別種概念來實作比如JAVA
但是JAVA卻是一種物件化最高的程式語言
JAVA包括變數在內都可被視為一種物件
例如 字元, 整數, 浮點數, 高精度浮點數等

除此之外JAVA採取的觀念則是以單一繼承為主
extends的語法與implements的語法在觀念上事實上是完全不同的事情
它並不能夠讓人很單純化的把implements的實作當成是物件的繼承
因為兩者在深入的理論上是不同的兩件事情
extends所繼承的parent class是真正繼承的觀念
而implements則設計成用於虛擬物件的實作

除此之外JAVA在多工環境上也有獨到的部份
async與sync的關鍵字用來分別出非同步與同步處理的程序語法
然而C++卻必需要遵循POSIX 的規範去使用
即使JAVA也一樣有許多物件與函式是依循POSIX規範而存在的

也因為兩者之間有非常多的東西是不一樣的
因此JAVA的程式設計必需要完全站在物件的角度去思考
兩者之間當然各有各種不同的優勢以及利弊

C++是一種可以讓人直接碰觸到作業系統運作的程式語言
然而JAVA則否
JAVA只能靠JNI介面經由JAVA物件封裝之後去使用
微軟平台甚至於允許使用C++直接實作驅動程式(雖然本人非常反對這種做法)
JAVA卻完全不可能做到這點

這也使得兩者在用途上走不一樣的路線
C++被用來作為程式庫甚至於框架上
比如GDK, KDE等
JAVA則被用來作更上層的應用
比如UI介面相關的APP以及Android JAVA框架
甚至於許多大數據方面的應用

C++當然也可以做到原始碼的跨平台
不過並沒有像JAVA那麼直接可以使用JAR檔直接的跨平台
當然如果JAR裏面還需要包JNI程式庫就有可能掛了

也因此
C++比較容易學到專精
而JAVA往往有更多的人卻只是在APP或者UI上層的部份學會應用
事實上如果要講到UI層的應用
那麼Python也一樣可以做得到
甚至不遜色於JAVA

IOS從原先使用Objectiv-C轉到使用Swift的方式開發
Windows系列則更是想依靠C#來做到可以讓PC與手機的程式開發相並存
未來Android也未嚐不可能從原本使用JAVA開發的APP逐步轉變成使用javascipts
事實上Chrome OS就沒有使用JAVA
排除JAVA的原因在於Oracle的JAVA擁有權的問題

追逐熱門程式語言無可厚非
不過還是必需要注意到一點
那些大巨獸級的企業不會跟你講道理的
他們隨時可以高捧任何一種程式語言
也可以隨時拋棄
Apache的Cordova與Adobe的PhoneGAP
打的都是通吃的算盤
目前看起來這兩種開發環境的優勢是存在的
畢竟能夠在PC端, 微軟手機, Android平台以及Apple IOS都能通吃的方式
會比較容易造成龐大的人力投入
當它大到有比C#, JAVA, Swift更多的程式資源的時候
未嚐不會來個大翻轉


作者: qsqswdwd33    時間: 2016-8-13 02:31 PM

chevylin0802 發表於 2016-8-13 01:34 PM
就精通並深入了解各種程式語言的差異者來講
JAVA跟C++存在著很大的差異
這裏面包括在使用上以及理論上與觀 ...

謝謝你的解說,
非常詳細!
就我而言,學java是因為自己要寫app
目前還是先以java語言為主,
另外,想再請教,有建議的java入門書嗎?
有C++的底子,對於C++的基礎算是很OK

謝謝

作者: chevylin0802    時間: 2016-8-13 06:08 PM

本帖最後由 chevylin0802 於 2016-8-13 06:10 PM 編輯
qsqswdwd33 發表於 2016-8-13 02:31 PM
謝謝你的解說,
非常詳細!
就我而言,學java是因為自己要寫app

JAVA的入門書不少
翻譯本的會比較穩妥
盡量別去買台灣人自己創作的入門書
也盡量別去買大陸人自己創作的入門書
如果你是想要做APP的話
那麼還必需要了解
Android JAVA跟一般的JAVA仍然是有很多差異
因為Android不是用main()做為起始的程式

有C++底子未必需要看入門書
網路有一堆原始碼範例
尤其如果你要學的是Android APP的話
那麼還是建議先去學會如何使用Android Studio這套開發環境
Google有許多範例可以直接在Android Studio下載



作者: kyo478    時間: 2016-8-21 11:46 AM

chevylin0802 發表於 2016-8-13 01:34 PM
就精通並深入了解各種程式語言的差異者來講
JAVA跟C++存在著很大的差異
這裏面包括在使用上以及理論上與觀 ...

你分析的好仔細,感謝您的多年心得分享!
作者: thebestjavauser    時間: 2016-8-22 12:25 AM

有 C++ 底子建議從 Scala 開始,Scala 就語言特性來說和 C++ 比較相像,語法方面差不多是 Java 的超集合
而且 Scala 也是建立在 JVM 之上,也同樣能夠用來寫 Android App 和 .Net,完美替換掉 Java C# 兩兄弟
供你參考
作者: chevylin0802    時間: 2016-8-23 10:47 AM

本帖最後由 chevylin0802 於 2016-8-23 10:56 AM 編輯
thebestjavauser 發表於 2016-8-22 12:25 AM
有 C++ 底子建議從 Scala 開始,Scala 就語言特性來說和 C++ 比較相像,語法方面差不多是 Java 的超集合
而 ...

強烈不建議這種做法
Scala本身雖然基礎於JAVA
但因為它也允許單獨的函數
也因此它幾乎可以被視為C++形式的JAVA
這意味的是Scala本身就不是一個純物件程式語言
對於已經完全可以在各個不同程式語言領域開發的工程師而言
寫Scala並不會造成任何困擾
但是對於只是程式語言的學習者來講
那是很要命的致命傷

Scala不可能去取代JAVA
不單單只是因為JAVA目前是Oracle在主導的原因
而是從歷史角度就可以證實
即使C++程式設計師在二十多年前即已吹噓C++將全面取代C
然而事情仍然並沒有發生

Scala雖然近幾年開始被少數人所追捧
但事實上JAVA的純物件導向語言特性
是在於它的易於進行擴充與維護
即使是要全面改寫
也遠比混合式的程式語言要容易許多
所謂的混合式指的就是Scala跟C++這類型的程式語言

但是對於程式語言學習者來說
他們應該學習的是如何去掌握各個不同程式語言的特徵以及理論與觀念
並不是貪快
更不應該採取這種手段學習


作者: thebestjavauser    時間: 2016-8-23 07:16 PM

chevylin0802 發表於 2016-8-23 10:47 AM
強烈不建議這種做法
Scala本身雖然基礎於JAVA
但因為它也允許單獨的函數

混合導向程式語言(COP)是有明確定義的
不過 Scala 的確不適合想要使用 OO 的初學者學習使用
比較適合已經熟悉指令式/物件導向轉往函數式語言的初學者學習使用
我想論壇上的發表也可以給除了原 Po 以外的其他人做參考所以才推薦 Scala
總之 感謝 c 大的補充


作者: jackyo04    時間: 2018-7-6 04:42 PM

語言這東西,我感覺沒差很多啦,我可能還挺新的XD
你可以將它當成是一種工具,怎麼使用就看你自己,你會java去摸C++,最大的差別就是敘述方式而已,就好比國文跟英文,很多時候英文翻成中文不是那麼的正確,或是說,敘述得不夠好,不夠美...主要都差在架構跟敘述方式而已




歡迎光臨 伊莉討論區 (http://www64.eyny.com/) Powered by Discuz!