Java是物件導向的程式語言,而物件導向的實踐,成功地拉近人類大腦的思維邏輯與程式開發的邏輯,使得程式開發專案從需求、分析、架構、設計到製作,各階段的鴻溝得以縮到最小,進而降低專案失敗的可能性。
物件導向模擬真實世界的情境,藉由不同功能物件的協同作業,來達成系統特定的功能。然而在某些情況下,物件的思維反而會使得程式開發變得有點煩瑣和累贅,例如提供給視窗程式用的事件處理器(Event Handler)、提供給排序邏輯用的比較子(Comparator)、建構執行緒用的Runnable物件等,如果都按照正統的作法來開發,最精簡的方式大概就只有透過巢狀類別(Nested Class)的寫法了。
舉例來說,假設有一個Product類別,其成員包括id(int)、name(String)、stock(int)、unitPrice(double),Product本身並沒有實作Comparable,現在有一群存放在ArrayList裡的Product物件,我們想利用Product的name欄位來排序,但又不想額外撰寫比較子(Compatator)類別,其做法可能如下:
ArrayList <Product>
products = new ArrayList< >();
products.add (new Product(5, "Tiger", 500,
380000.6));
products.add (new Product(1, "Elephant", 200,
290000.5));
products.add (new Product(6, "Cat", 700,
80000.2));
products.add (new Product(4, "Impala", 600,
120000.3));
products.add (new Product(2, "Lion", 100,
450000.9));
products.add (new Product(3, "Dog", 300,
90000.7));
Collections.sort (products, new
Comparator <Product> () {
@Override
public int compare(Product o1, Product o2) {
return o1.getName().compareTo(o2.getName());
}
});
for (Product p:products){
System.out.println(p);
}
巢狀類別的寫法,的確讓程式碼變得稍微複雜,可讀性也降低了不少。Java SE 8引進了Lambda Expression的語法,可讓程式碼進一步簡化如下:
ArrayList <Product>
products = new ArrayList< > ( );
products.add (new Product( 5, "Tiger", 500,
380000.6));
products.add (new Product( 1, "Elephant", 200,
290000.5));
products.add (new Product( 6, "Cat", 700,
80000.2));
products.add (new Product( 4, "Impala", 600,
120000.3));
products.add (new Product( 2, "Lion", 100,
450000.9));
products.add (new Product( 3, "Dog", 300,
90000.7));
Collections.sort(products, (Product o1, Product o2)
- > o1.getName( ).compareTo(o2.getName( )));
products.stream( ).forEach((p) - >
{System.out.println(p);});
是不是優雅多了呢?不只比較子,連for-each迴圈都變得更精簡、更直覺了!透過Lambda Expression的寫法,Java程式的語法得以更精簡、更容易上手,可讀性跟維護性當然也跟著大幅提升。
初階
---------
products.add (new Product(5, "Tiger", 500, 380000.6));
products.add (new Product(1, "Elephant", 200, 290000.5));
products.add (new Product(6, "Cat", 700, 80000.2));
products.add (new Product(4, "Impala", 600, 120000.3));
products.add (new Product(2, "Lion", 100, 450000.9));
products.add (new Product(3, "Dog", 300, 90000.7));
Collections.sort (products, new Comparator <Product> () {
@Override
public int compare(Product o1, Product o2) {
return o1.getName().compareTo(o2.getName());
}
});
for (Product p:products){
System.out.println(p);
}
products.add (new Product( 5, "Tiger", 500, 380000.6));
products.add (new Product( 1, "Elephant", 200, 290000.5));
products.add (new Product( 6, "Cat", 700, 80000.2));
products.add (new Product( 4, "Impala", 600, 120000.3));
products.add (new Product( 2, "Lion", 100, 450000.9));
products.add (new Product( 3, "Dog", 300, 90000.7));
Collections.sort(products, (Product o1, Product o2) - > o1.getName( ).compareTo(o2.getName( )));
products.stream( ).forEach((p) - > {System.out.println(p);});
是不是優雅多了呢?不只比較子,連for-each迴圈都變得更精簡、更直覺了!透過Lambda Expression的寫法,Java程式的語法得以更精簡、更容易上手,可讀性跟維護性當然也跟著大幅提升。
---------
課程目標
本課程將協助您了解Java技術的重要特性,並引導您進入Java技術的殿堂。課程內容以循序漸進的方式,著重於基本的Java語法介紹及物件導向基礎概念,像是封裝、繼承與多型等概念,讓初學者以輕鬆無負擔的方式來學習Java程式語言。課程中以Netbeans來開發Java應用程式,讓您能更熟悉Java程式語言的語法與物件導向概念。
適合對象
- 程式設計師、網頁設計人員、欲熟悉Java語言程式開發技術者
- 欲開發Android App
- 特別為沒有程式開發經驗者所量身訂製,以深入淺出的方式介紹Java語言強大的開發能力
預備知識
- 會操作Windows作業系統
- 基本邏輯概念
課程內容
- Java平台與開發環境介紹
- 建立Java主程式類別(Main Class)
- 介紹變數
- 處理字串資料
- .處理數值資料
- 處理多重項目資料
- 描述物件(Object)與類別(Class)
- 資料操作及格式化
- 方法建立與使用
- 封裝
- 決策語法
- 使用NetBeans Debugger
- 陣列與迴圈
- 繼承
- 多型
- 介紹Lambda Expression
- 例外處理
進階
---------
課程目標
本課程教您使用最新的Java SE 8來撰寫Java程式,課程內容涵蓋物件導向的概念以及Java進階語法,像是Lambda Expression、Design Pattern、JDBC連結資料庫、多執行序以及Fork-Join框架等與設計觀念,並為已熟悉電腦語言、程式設計的開發人員介紹如何利用Java語言及環境來開發Application。
適合對象
- 專門為已熟悉電腦語言程式設計的開發人員介紹如何開發Java Application
- 欲開發Android App
- 適合想要了解Java程式語言的開發人員
預備知識
- 已熟悉電腦語言程式設計
- 會操作Windows作業系統
- Java程式語言基礎語法
- 資料庫基礎概念
- 基礎SQL語法
課程內容
- Java平台與開發環境介紹
- 回顧Java語法及類別
- 封裝與繼承 (ok, 2015/Aug)
- Overriding Method (ok, 2015/Aug)
- 多型 (ok, 2015/Aug)
- static (ok, 2015/Aug)
- Singleton Design Pattern (NEED TO STUDY MORE)
- 抽象類別、介面、巢狀類別 (ok, 2015/Oct)
- Lambda Expressions (ok, 2015/Oct)
- 集合(Collections)與泛型(Generics) (NEED TO STUDY MORE)
- Builder Design Pattern (NEED TO STUDY MORE)
- 使用Lambda Expression走訪集合物件 (ok, 2015/Nov)
- 使用Lambda Expression過濾集合物件 (ok, 2015/Nov)
- Lambda內建的Funtional Interface (ok, 2015/Nov)
- 使用Lambda操作資料 (ok, 2015/Nov)
- Exceptions 及 Assertions (ok, 2015/Oct)
- Java Date/Time API (NEED TO STUDY MORE)
- I/O基礎及NIO.2 (Ok for file reader/buffered reader ... etc, need to browse detailed exam subjects)
- 並行(Concurrency)及Fork-Join框架 (NEED TO STUDY MORE ABOUT CONCEPT)
- Parallel Streams (NEED TO STUDY MORE ABOUT CONCEPT BEFORE PROGRAMMING)
- JDBC (NEED TO STUDY MORE , Especially for stored procedure)
- Localization (NEED TO STUDY MORE ABOUT CONCEPT)
No comments:
Post a Comment