日期:11/07星期三 12:30-14:00
參與人數:六人,韓宏光、林庭弘、陳惠娟、林峻鵬、吳佳頤、卓亞萱
討論主題:討論並交流蒐集到的JAVA歷史,與其形成的歷程
主持人:韓宏光
紀錄:林峻鵬
昇陽公司對Java語言的解釋是:「Java程式語言是個簡單、物件導向、分布式、解釋性、健壯、安全與系統無關、可移植、高效能、多執行緒和動態的語言」
※歷史
最一開始是由昇陽電腦(Sun MicroSystems)公司開始研究的,因為其公司的工程師在使用C++、C語言(當時就常用的程式語言)有許多的不方便,於是公司內的成員【派屈克】開始計劃自己研究新的程式語言,讓他具備物件導向的概念。
在經過兩年的努力之後,他們已經可以展示他們成果的一部份:Green操作系統、程式語言、類別庫、硬體(類PDA)。在同年11月他們提出另一個方案─機上盒平台,但是因為控制權問題而失敗,最後使他們將目標轉向於【全球資訊網】,後來寫出了一個瀏覽器【HotJava】。
Java在瀏覽器的地位漸漸被取代,例如:IE、Chrome、Firefox等,另外在簡單的互動性動畫也被Adobe公司的Flash排擠。2005年,Java的地位被迫往更複雜的遊戲應用程式發展。途中雖然被IE和Windows公司排擠,但是卻在全球資訊網的伺服器端和手持裝置得到支持。
Java版本歷史
1995年5月,Java語言誕生
1996年1月,第一個JDK-JDK1.0誕生
1996年4月,10個最主要的作業系統供應商申明將在其產品中嵌入JAVA技術
1996年9月,約8.3萬個網頁應用了JAVA技術來製作
1997年2月,JDK1.1發行
1997年9月,JavaDeveloperConnection社群成員超過十萬
1999年6月,SUN公司發行Java的三個版本:標準版(J2SE)、企業版(J2EE)和微型版(J2ME)
2001年6月,NOKIA宣布,到2003年將出售1億部支援Java的手機
2002年2月,J2SE1.4發行,自此Java的計算能力有了大幅提升
2004年9月18:00PM,J2SE1.5發行,成為Java語言發展史上的又一里程碑。為了表示該版本的重要性,J2SE1.5更名為Java SE 5.0
Java語言的吉祥物─Duke |
2005年6月,JavaOne大會召開,SUN公司公開Java SE 6。此時,Java的各種版本已經更名,以取消其中的數位「2」:J2EE更名為Java EE,J2SE更名為Java SE,J2ME更名為Java ME
2010年11月,由於Oracle公司對於Java社群的
不友善,因此Apache揚言將退出JCP[3]
2011年7月,Oracle公司發佈Java SE 7
※開源軟體
Eclipse
NetBeans
以上兩者都是常用的Java編輯環境
Eclipse可以直接執行,試著跑出結果,資管系在大二之後就會學著使用這套軟體;
NetBeans需要在網路上做測試,因此至少要在自己的電腦中架設一個虛擬的網路。
Android |
2008年被Google公司收購,屬於半開放原始碼的作業系統,現在逐漸拓展到智慧型手機、平板電腦和其他領域上。
Apache |
是Apache軟體基金會的一個開放原始碼的網頁伺服器,多和NetBeans一起使用,也是最流行的Web伺服器端軟體之一。
還有許多開源軟體像是:JEdit、Azureus BitTorrent客戶端、JNode作業系統、JBoss和GlassFish應用服務器。
※重點回顧
研究人員最初對於C++趕到的不便:
- 內嵌類型平台可以使用的資源相當有限
- 缺少垃圾回收系統
- 可移植的安全性
- 分布程式設計
- 多執行緒功能
Java之所以被開發,是要達到以下五個目的:
- 應當使用物件導向程式設計方法學
- 應當允許同一程式在不同的電腦平台執行
- 應當包括內建的對電腦網路的支援
- 應當被設計成安全地執行遠端程式碼
- 應當易於使用,並借鑒以前那些物件導向語言(如C++)的長處。
※附錄
- 跨平台:
一次編譯、到處執行
在Java誕生的一開始,因為要在多個平台都可使用,大大降低了程式碼的執行效率,但是隨著電腦硬體的提升,運算速度可以負載的等級也跟著提升,讓可以再多個平台執行的效率提高許多。
- 物件導向
Java的特點之一就是物件導向,是程式設計方法的一種。「物件導向程式語言」的核心之一就是開發者在設計軟體的時候可以使用自訂的型別和關聯操作。程式碼和資料的實際集合體叫做「物件」。一個物件可以想像成繫結了很多「行為(程式碼)」和「狀態(資料)」的物體。對於資料結構的改變需要和程式碼進行通訊然後操作,反之亦然。物件導向設計讓大型軟體工程的計劃和設計變得更容易管理,能增強工程的健康度,減少失敗工程的數量。
物件導向設計另外一個標的就是能產生很多的有關聯的類,可以讓軟體的再開發變得簡單。舉例來說,很多軟體工程都有同樣的功能,尤其是很多應用了同一原理組織的軟體工程。軟體的二次開發者想自己為軟體開發外掛程式以增強功能的時候,絕對不想看到混亂的開發程式碼和管理計劃。物件導向的目的就是不生產難懂且難以使用的程式碼,為軟體各個功能群之間建立有效的通訊通道。很多開源軟體社群正在計劃給軟體作者提供更多的類來讓軟體的二次開發變得簡便。
- 自動垃圾回收(Garbage Collection)
C++語言被用戶詬病的原因之一是大多數C++編譯器不支援垃圾收集機制。程式員在編寫完程式之後經常要進行刪除多於資源的動作,而程式員又忘記進行刪除,那麼就會造成記憶體洩漏(Memory Leak)。長此以往,程式執行的時候可能會生成很多不清除的垃圾,浪費了不必要的記憶體空間。雖然C++有【智慧指標】或者【C++託管擴展編譯器】幫助解除這項煩惱,但是若使用不佳可能會會電腦造成更大的資源負擔。
Java語言則不同,上述的情況被自動垃圾收集功能自動處理。對象的建立和放置都是在記憶體堆疊上面進行的。當一個物件沒有任何參照的時候,Java的自動垃圾收集機制就發揮作用,自動刪除這個物件所佔用的空間,釋放記憶體以避免記憶體洩漏。
- 應用程式介面(API)
在Java語言中,應用程式介面(API)化身成類別,並且封包成為套件。良好的介面設計可以降低系統各部分的相互依賴,提高組成單元的內聚性,降低組成單元間的耦合程度,進而提高系統的維護性和擴展性。
- 程式語言使用比例
※關於Java的批評
- 整體性問題
並不是所有的工程和環境需要企業等級的複雜性,比如一個簡單的個人網站或者獨自編程的程式師所寫的程式。這些程式師會發現Java的複雜管理對於自己要做的程式來說過於強大了。
- 語言問題
有些程式師不喜歡原始類型(primitive type)和型別(class)的分離,尤其是那些曾經使用過Smalltalk和Ruby的程式師。Java的代碼相對於其他的代碼來說過於冗長,這與它的輕便化聲明相違背。
- 類別庫問題
若平台不同,帶有GUI(圖形用戶介面)的程式和其他原始程式非常不同。如果使用的話,就要提供每個平臺上面所需的API,這將是一項龐大的工程。
- 效能問題
Java的設計目的主要是安全性和可攜性,所以對於一些特性,比如對硬體架構和記憶體位址訪問的直接訪問都被去除了。如果需要間接調用這些底層功能的話,就需要使用JNI(Java本地介面)來調用本地代碼,而間接訪問意味著頻繁調用這些特性時效能損失會很大。
編譯時間過久,為求使用者方便將造成程式碼和硬體上的負擔。
※參考資料
http://zh.wikipedia.org/wiki/Wikipedia:%E9%A6%96%E9%A1%B5
https://www.google.com/imghp?hl=zh-TW&tab=ii&biw=1366&bih=681
http://pydoing.blogspot.tw/2012/10/java-tutorial.html
http://www.oracle.com/technetwork/java/index.html