This page looks plain and unstyled because you're using a non-standard compliant browser. To see it in its best form, please visit upgrade to a browser that supports web standards. It's free and painless.

Kenming's 軟體設計思維 會員登入 會員註冊

說明

從生活面的觀點來觀察時,當發現到兩個以上的類別有其相似之處(但又不盡相同),我們可以把相似之處抽象(abstract)放在更高層次的一般性類別。例如,觀察「貓」與「狗」兩個類別,是否有可能抽象化成為一般性的類別? 兩者的品種完全不同,但其實也存在著某種程度的相似性,事實上,若我們要開發一個 “寵物店管理系統”,那麼,其實很自然,就可以將此兩個類別抽象成為「寵物」這個一般化的類別。相對來說,只要是符合「寵物」一般化類別共同特性的其它類別,包括可愛、能取悅、陪伴主人等特徵與行為,就可以成為「寵物」的特殊化類別。一般化—特殊化關係的 UML 表示法如下圖。

範例、一般化—特殊化的 UML 表示法
圖1、範例 一般化—特殊化的 UML 表示法

概念上,所有貓、狗的個體(instances)從定義來看也都是「寵物」的個體,那麼就可以將「貓」、「狗」等視為是「寵物」的子型態(sub-type)。由此可以看出,「貓」是一種特別的「寵物」。其中一個重要的觀念在於,所有與「寵物」有關係的特徵(features),包括關連、屬性(attributes)與操作(operations),對「貓」、「狗」、「烏龜」來說也都是成立的。

從軟體的觀點來看,對一般化關係的具體實作就是 “繼承(inheritance)” : 「貓」是「寵物」的子類別(sub-class),在主流的 OOP 語言,包括 Java 與 .NET 等,子類別會繼承超類別(super-class)的所有特性,而且還可以覆寫(override)任何超類別的方法(method)。

一般程式設計人員最容易誤解物件導向的繼承觀念就在於,以為繼承是被用來 “可重用(re-use)”的:可重用既有的程式碼。其實繼承的最重要原則是在於 “可被替代性(substitutability)”,而這正是物件導向另一個非常重要的思維– “多型(polymorphism)”:讓外界(Client)能以「一視同仁」的角度來看待多個特殊化類別所抽象出的一般化類別!

關於 "多型" ,留待在在進階主題內再行詳述。請記得,多型同時也是解決軟體複雜度的一個重要原則。

範例—車子的一般化—特殊化類別

UML 表示法

範例—範例—車子的一般化—特殊化 UML 表示
圖2、範例—範例—車子的一般化—特殊化 UML 表示

卡車、坦克車、悍馬車,都是屬於 “車子” 的特殊化類別。特殊化類別均具有 “車子” 的共同特性,但也可以 “修正” 與 “擴展” 一般化類別的行為。以上圖為例,卡車可以 “超載(override)” “車子” 的 “get車況” 這個操作;同時又 “擴展(extend)” 了原來 “車子” 所沒有的行為: “裝載物資”。 事實上,當從一般化類別的角度來看時,設計人員是因為需要 “修正(也就是超載)” 與 “擴展” 原來類別的行為時,才有必要設計 “特殊化類別”。

再來從 “汽車工廠” 的角度來觀察時,它提供了 “列出所有車況” 這個操作給外界來使用(有可能是部隊指揮官想知道部隊內所有各類型車子的車況),請注意,”汽車工廠” 是將所有車子的類型,包括卡車、坦克車、悍馬車…等,均當作 “一般性車子” 來看待,因為,這些特殊軍用車輛,仍是具備了 “車子” 的共同特性,所以並不需要讓外界個別來宣告與存取這些特殊化類別,只要透過 “車子” 的 “get車況” 操作,然後才在動態的期間,來呼叫這些實體(instance)物件的 “get車況” 操作。如此封裝了這些特殊化類別的變動設計(你不知道哪時候又會增加了 “奘甲飛彈車” 這種新的特殊化類別設計),卻又能動態存取這些特殊化類別的操作,這就是 “多型(polymorphism)” 的效果!

※延伸參考:

類別之間的關係(Relationship) — 整體-局部(Whole-parts) (2)

類別之間的關係(Relationship) — 結合(Association)關係 (1)

淺論「類別(Class)是什麼?」

淺論「什麼是物件(Object)?」

Java 程式範例碼

原始碼下載
#001 public class 車子 {
#002 	public String get車況(){
#003 		return "我是一般化車子...";
#004 	}
#005 }

#001 public class 卡車 extends 車子 {
#002 	public String get車況(){
#003 		return "我是卡車,可以裝載很多物資...";
#004 	}
#005 	public String 裝載物資(String 物資){
#006 		return "";
#007 	}
#008 }

#001 public class 坦克車 extends 車子 {
#002 	public String get車況(){
#003 		return "我是坦克車,可以發射大砲...";
#004 	}
#005 
#006 	public void 發射大砲(){
#007 	}
#008 }

#001 public class 悍馬車 extends 車子 {
#002 	public String get車況(){
#003 		return "我是悍馬車,機動靈活也可以發射火箭炮...";
#004 	}
#005 	public void 發射火箭炮(){
#006 	}
#007 }


#001 import java.util.*;
#002 public class 汽車工廠 {
#003 	private ArrayList list = new ArrayList();
#004 
#005 	public 汽車工廠(){
#006 		list.add(製造(0));
#007 		list.add(製造(1));
#008 		list.add(製造(2));
#009 		list.add(製造(3));
#010 	}
#011 
#012 	public String 列出所有車子(){
#013 		String 車子資訊="";
#014 		Iterator e = list.iterator();
#015 		while (e.hasNext())
#016 			車子資訊 = 車子資訊 + ((車子)e.next()).get車況() + "n";
#017 		return 車子資訊;
#018 	}
#019 
#020 	private 車子 製造(int 型別){
#021 		switch(型別){
#022 		case 0: return new 車子();
#023 		case 1: return new 卡車();
#024 		case 2: return new 悍馬車();
#025 		case 3: return new 坦克車();
#026 		default: return new 車子();
#027 		}
#028 	}
#029 }

這裡設計一個測試用的 Java stand-alone 的程式: TestCar,以站在 “汽車工廠r” 的角度,來看看如何取得工廠內所有車子的車況:

#001 public class TestCar {
#002 	public static void main(String[] args) {
#003 		汽車工廠 factory = new 汽車工廠();
#004 		
#005 		System.out.println(factory.列出所有車子());
#006 	}
#007 }

執行結果如下:

我是一般化車子...
我是卡車,可以裝載很多物資...
我是悍馬車,機動靈活也可以發射火箭炮...
我是坦克車,可以發射大砲... 

使用環境

  • IBM RSA(Rational Software Architect 6.0) Trial UML 工具
  • JDK 1.5

新增 UML 空白專案

首先開啟 Rational Software Architect(使用版本為 6.0),並切換 workspaces 至 workspacesGoFPatterns。

新增名為 CoRProject 的 UML 專案:

  1. 在工作區中,選擇File > New > Project > Other
  2. 選擇 UML Project 並選擇 Next
  3. 輸入 CoRProject 作為專案名稱,並選擇 Next
  4. 選擇範本為 “空白模型(Blank Model)”,檔名輸入為 CoRModel,然後在預設選項中勾選 在新模型中建立預設圖形,預設圖形選擇 開放式圖形(Freeform Diagram),選擇 Finish 完成。

    圖1、新增 UML 空白專案
    (點擊圖片鏈接看原圖)圖1、新增 UML 空白專案

  5. 在 “模型瀏覽器(Model Explorer)” 視圖中,可以看到一個新增的 UML 空白專案。

    圖2、Model Explorer 所顯示的空白 UML 專案
    (點擊圖片鏈接看原圖)圖2、Model Explorer 所顯示的空白 UML 專案

型樣瀏覽器(Pattern Explorer)

  1. 在 Windows Menu 中,選擇 顯示視圖 > Pattern Explorer (若沒有出現,則從 Other… 中選取。
  2. 在 Pattern Explorer 視圖中,展開 Design Patterns > Behavioral。
  3. 選擇 Chain of Responsibility Pattern。
  4. 要瞭解 Design Pattern 的結構圖與說明,在 Pattern Explore 視圖底部的 總覽 與 簡要說明 選項之間切換瀏覽。

    圖3、Pattern Explorer 中所顯示的 CoR Pattern
    (點擊圖片鏈接看原圖)圖3、Pattern Explorer 中所顯示的 CoR Pattern

  1. 在 Pattern Explore 視圖中,將 CoR 拖曳到 Design Pattern 的空白編輯器中。
  2. 編輯器中會出現下圖的 CoR Pattern 的個體(instance)。

    圖4、CoR Pattern 的個體(instance)
    (點擊圖片鏈接看原圖)圖4、CoR Pattern 的個體(instance)

使用 CoR 設計樣式

為完成範例中實做,我們需要實現下表中會使用到的類別,並列出主要的屬性與操作名稱。

類別

屬性

操作

說明

TroubleHandler

successor: TroubleHandler

setSuccessor(TroubleHandler): void
handleTrouble(Trouble): void

處理麻煩(trouble)的抽象類別。

TroubleMaker

name: String

getName(): String

麻煩製造者(代表 Client 端)

Trouble

grade: String

getGrade(): String

發生麻煩時的類別,被當作參數,由 TroubleMaker 傳送至 TroubleHandler。

SmallTrouble_Handler

handleTrouble(Trouble): void

處理「小麻煩」的具體(concrete)類別。

MediumTrouble_Handler

handleTrouble(Trouble): void

處理「中麻煩」的具體(concrete)類別。

BigTrouble_Handler

handleTrouble(Trouble): void

處理「大麻煩」的具體(concrete)類別。

NullTrouble_Handler

handleTrouble(Trouble): void

沒有任有處理(視而不見)的具體(concrete)類別。

  1. 在編輯器右側的 選用區(Palette) 中,點擊 Class Diagram 部分。
  2. 選擇 類別(Class) 並在編輯器中任意單擊,參考下圖 5 ,新增五個類別:”TroubleHandler”、”SmallTroubleHandler”、 ”MediumTroubleHandler”、 ”BigTroubleHandler”、 ”NullTroubleHandler”。
  3. 參考下圖 5 ,新增 “TroubleHandler” 類別的操作(operations): handleTrouble()。
  4. 將 “TroubleHandler” 拖曳到 CoR 個體中的 “Handler”,並同時將其操作(operations)拖曳到 “HandleRequest”。
  5. 將 ”SmallTroubleHandler”、 ”MediumTroubleHandler”、 ”BigTroubleHandler”、 ”NullTroubleHandler” 拖曳到 CoR 個體中的 “ConcreteHandler”。
  6. 在 CoR 個體的內容中顯示如下圖 5 。

    圖 5、Composite Pattern 的個體(instance)內容
    (點擊圖片鏈接看原圖)圖 5、Composite Pattern 的個體(instance)內容

  7. 為了觀察 Developer 所新增的類別與 CoR Pattern 個體之間的關係,在編輯器中任一位置,右鍵選擇浮動功能表中的 過濾(Filter) > 顯示/隱藏關係 ,勾選列出所有的關係。
  8. 參考下圖,可以看到該設計樣式中的所有元素與其關係。

    圖 6、CoR 設計樣式中的所有元素與其關係
    (點擊圖片鏈接看原圖)圖 6、CoR 設計樣式中的所有元素與其關係

將模型(Model)轉換(Transform)為 Java 程式碼

  1. 在Model Explorer 中,展開 CoRProject。
  2. 同時點選Developer 所新增上述的五個類別。
  3. 右鍵單擊任一個所選擇的類別,並選擇 轉換(Transform) > 執行轉換 > UML至Java。

    圖 7、執行轉換(Transform)至 Java 程式碼
    (點擊圖片鏈接看原圖)圖 7、執行轉換(Transform)至 Java 程式碼

  4. 在 執行轉換 視窗中,選擇 Target 標籤,單擊 建立新目標儲存器(Create new Target Container)。
  5. 輸入新增的專案名稱為 CoRTransformedJava,其餘相關設定參考下圖。

    圖 8、新增 Java 專案
    (點擊圖片鏈接看原圖)圖 8、新增 Java 專案

  6. 執行轉換作業,此時 RSA 將模型轉換為 Java 程式碼,雙擊已轉換的 Java 檔名,可以查看已轉換的程式碼(將視圖切換至套件瀏覽器(package explorer)),參考如下圖。

    圖 9、從模型轉換至 Java 的程式碼
    (點擊圖片鏈接看原圖)圖 9、從模型轉換至 Java 的程式碼

  7. 轉換之後,不可避免會有一些錯誤發生,例如型別(Type)、該被匯入(import)的參考類別、回傳值 ...等。修正錯誤並補充細節,填上該實做每一個 method 的演算邏輯。修正之後的 Java 程式碼可以正確完成編譯(compile)。
  8. 新增原來在 CoR Pattern 所沒有的類別,包括 Trouble, TroubleMaker,以及新增一個測試類別: CoRAppMain,可以在 Console 下顯示測試結果。該測試類別首先利用亂數模擬產生從 “小、中、大” 與 “NULL” 的各類麻煩,然後新增四個麻煩處理者,專責來處理名為 “敗家子” 的 TroubleMaker 所製造的麻煩,並且將其四個處理者串鍊(chain)在一起,分門別類來處理各類的麻煩。

    圖 10、修正 Java 程式碼、補上實做細節、完成編譯並執行
    (點擊圖片鏈接看原圖)圖 10、修正 Java 程式碼、補上實做細節、完成編譯並執行

反轉(Reverse) Java 程式碼至 RSA 的 Model

  1. 將視圖切換回模型瀏覽器(Model explorer)。
  2. 展開 CoRProject,在 CoRModel 套件(package)內滑鼠按右鍵新增一個類別圖,名稱為 ReversedJava。
  3. 將 CoRTransformedJava 專案 src 套件內所有的 Java 程式,全部拖曳至上述所新增的類別圖畫布內。
  4. 從 Java 程式碼反轉至 EA Model 的類別圖如下圖所示。

    圖 11、從Java程式碼反轉回 RSA 的 Model
    (點擊圖片鏈接看原圖)圖 11、從Java程式碼反轉回 RSA 的 Model


延伸參考

使用環境

  • EA ( Enterprise Architect 6.5) UML 工具
  • Eclipse 3.2
  • JDK 1.5

新增 UML 空白專案

新增 UML 空白專案
首先新增名為 CoRProject 的 UML 專案:

  1. 選擇File > NewProject 。
  2. 在 “Select model(s)” 對話框中,選擇 “simple” 並勾選 Logical View。

    圖1、新增 UML 空白專案
    (點擊圖片鏈接看原圖)圖1、新增 UML 空白專案

  3. 在 “Project Browser” 中,點擊 “Logical View” 並按滑鼠右鍵選擇 Add>Add Diagram… ,在 “New Diagram” 對話框中,”Diagram Types” 選擇 “Class”,並輸入名稱為 CoR Class Diagram。

    圖2、新增 Class Diagram
    (點擊圖片鏈接看原圖)圖2、新增 Class Diagram

使用 CoR 設計樣式

為完成範例中實做,我們需要實現下表中會使用到的類別,並列出主要的屬性與操作名稱。

類別

屬性

操作

說明

TroubleHandler

successor: TroubleHandler

setSuccessor(TroubleHandler): void
handleTrouble(Trouble): void

處理麻煩(trouble)的抽象類別。

TroubleMaker

name: String

getName(): String

麻煩製造者(代表 Client 端)

Trouble

grade: String

getGrade(): String

發生麻煩時的類別,被當作參數,由 TroubleMaker 傳送至 TroubleHandler。

SmallTrouble_Handler

handleTrouble(Trouble): void

處理「小麻煩」的具體(concrete)類別。

MediumTrouble_Handler

handleTrouble(Trouble): void

處理「中麻煩」的具體(concrete)類別。

BigTrouble_Handler

handleTrouble(Trouble): void

處理「大麻煩」的具體(concrete)類別。

NullTrouble_Handler

handleTrouble(Trouble): void

沒有任有處理(視而不見)的具體(concrete)類別。

  1. 將同一視圖下列的標籤切換至 “Resource Explorer”。
  2. 點選 UML Patterns > GoF Behavioral Patterns > Chain of Responsibility。
  3. 按滑鼠右鍵,選擇 “Add Pattern to Diagram”,此時會出現新增 CoR Pattern 的對話框,如下圖 3。
  4. 在 Pattern Element Pane 中,若按下每一行最右邊的 … ,則可以選擇修改類別名稱,我們可以延至在類別圖中來修改,所以在此略過此種方式,直接選擇 OK 完成即可。此時在類別圖的畫布中,會出現如下圖 4的畫面。

    圖 3、新增 CoR Pattern 的對話框
    (點擊圖片鏈接看原圖)圖 3、新增 CoR Pattern 的對話框

    圖 4、出現 CoR Pattern 的類別圖
    (點擊圖片鏈接看原圖)圖 4、出現 CoR Pattern 的類別圖

修改與新增類別

  1. 我們需要將上圖內的類別修改類別名稱,並新增原來在 CoR Pattern 所沒有的類別,包括 Trouble、兩個具體類別(原來只有兩個具體類別,而在本範例中,需要四個),同時,依照上表 1 所列,我們也需要新增或修改各個類別的屬性與操作名稱。
  2. 如何新增與修改類別,請參考 EA Help 內建文檔。修改之後的類別圖如下所示。

    圖 5、修改後的 CoR 的類別圖
    (點擊圖片鏈接看原圖)圖 5、修改後的 CoR 的類別圖

將模型(Model)轉換(Transform)為 Java 程式碼

在執行轉換至 Java 程式碼之前,請先準備兩個步驟:
  • 確認所有要轉換的類別(Class)要產出的程式碼為 Java。以滑鼠雙擊在 “Project Browser” 中的一個類別,會出現該類別的屬性(properties)對話框。在 [General] 標籤中,點選 [Language] 欄位內的值為 Java,如下圖所示。
  • 已新增好 Eclipse 的 Java 專案(其它 IDEs 亦然),並指定好專案中的 source 資料夾。

    圖 5、圖 6、選擇類別的 [Language] 為 Java
    (點擊圖片鏈接看原圖)圖 6、選擇類別的 [Language] 為 Java

    圖 7、在 Eclipse 中設定好專案的 src 資料夾
    (點擊圖片鏈接看原圖)圖 7、在 Eclipse 中設定好專案的 src 資料夾

接著返回 EA 繼續下述步驟…
  1. 在 “Project Browser” 中,點選 “Logical View” package,按滑鼠右鍵選擇 Code Engineering > Generate Source Code。此時會顯示對話框,請勾選 Auto Generate Files,以及在 Root Directory 的目錄中,選擇上述在 Eclipse 新增專案的 src 目錄夾。

    圖 8、Generate Package Source Code 對話框
    (點擊圖片鏈接看原圖)圖 8、Generate Package Source Code 對話框

  2. 切換到 Eclipse IDE 環境中,Refresh 原先所新增的專案,即可以看到 src 資料夾內已出現從 Model 檔所轉換(transform)過來的程式碼。

    圖 9、從 EA Model 轉換到 Eclipse 的 Java 程式碼
    (點擊圖片鏈接看原圖)圖 9、從 EA Model 轉換到 Eclipse 的 Java 程式碼

  3. 轉換之後,不可避免會有一些錯誤發生,例如型別(Type)、該被匯入(import)的參考類別、回傳值 ...等。修正錯誤並補充細節,填上該實做每一個 method 的演算邏輯。修正之後的 Java 程式碼可以正確完成編譯(compile)。
  4. 為測試 CoR 的結構性,我們在 Eclipse 中新增一個測試類別: CoRAppMain,可以在 Console 下顯示測試結果。該測試類別首先利用亂數模擬產生從 “小、中、大” 與 “NULL” 的各類麻煩,然後新增四個麻煩處理者,專責來處理名為 “敗家子” 的 TroubleMaker 所製造的麻煩,並且將其四個處理者串鍊(chain)在一起,分門別類來處理各類的麻煩。

    圖 10、在 Eclipse 新增 Console 測試類別
    (點擊圖片鏈接看原圖)圖 10、在 Eclipse 新增 Console 測試類別

反轉(Reverse) Java 程式碼回 Model

  1. 我們當然可以再將其修正過後的程式碼反轉(reverse)回 EA 的Model檔,先切換回 EA 的環境。為比較反轉回來的 Model 與 原先在 EA所設計的 Model 之間的差異,我們需要另外新增反轉回來後 Model 所在的 package(當然,也可以選擇反轉回原來 Model 所在位置,如此則可以保持 Model 與 程式碼的同步)。
  2. 在 “Project Browser” 中,新增一個 package 名為 “ReverseJava”,點選該資料夾,滑鼠按右鍵,選擇 Code Engineering > Import Source Directory…,在所出現的對話框中,在 “Root Directory” 選擇 Source code 所在目錄;在 “Source Type” 中選擇 Java。

    圖 11、Import Source Directory 對話框
    (點擊圖片鏈接看原圖)圖 11、Import Source Directory 對話框

  3. 從 Java 程式碼反轉至 EA Model 的類別圖如下圖所示。
  4. 關於 C#.NET 轉換步驟幾與轉換 Java 的步驟一樣,在此省略。關於程式碼,請參考附件檔。

    圖 12、從 Java 程式碼反轉回 EA Model 的類別圖
    (點擊圖片鏈接看原圖)圖 12、從 Java 程式碼反轉回 EA Model 的類別圖


延伸參考

範例描述

"敗家子" 是一部經典的武功喜劇,關於本片的劇情介紹,可以參考:【老片分享】經典功夫喜劇片—敗家子
其中,元彪所飾演的 "敗家子",好打架,經常製造許多麻煩,但他又是九代單傳的寶貝兒子。父親怕他受傷,所以派了一個隨從 "派通街",在背後協助解決所製造的麻煩。

敗家子是 "麻煩製造者(trouble maker)",而派通街是 "麻煩處理者(trouble handler)",敗家子所闖的禍,均交由派通街來處理。

而隨著製造的麻煩越多,派通街需要更多的助手來「分門別類」地處理,這些處理者逐漸有系統性地形成一種 "串鍊(chain)",當麻煩透過派通街送進來時,第一個處理者認為麻煩不是他所處理的,就會交給後續的(successor)處理者來處理,如此依序跑完整個 "串鍊",若沒有人可以處理,則拋出 "無法處理" 的訊息。

CoR(Chain of Responsibility) 的說明

敗家子永遠不用擔心 "誰" 來幫他處理麻煩,只要將麻煩丟給一致的介面(interface)–派通街處理即可。

視麻煩的程度或種類,交由串鍊中某一個處理者來處理,當然也有可能因麻煩大到無法解決,而沒有處理者可以處理。

這是一種 "責任的串鍊(Chain of Responsibility, CoR)",Client 端(敗家子)不需要也不會知道 "誰" 來處理他所丟出的麻煩,如此可以降低 "Client" 與 "處理者" 的耦合(coupling)程度;但相對,"串鍊" 的處理者最好不要太多,否則因責任一直轉派的緣故,會降低處理效率。

CoR 類別圖(Class Diagram)說明

圖、CoR 的 UML 類別圖
(點擊圖片鏈接看原圖)圖、CoR 的 UML 類別圖

  • 把 "派通街" 角色設計為 "抽象類別(abstract class)",他本身只負責制訂一致性的處理介面: handleTrouble(),與實作指向後續者(successor)的鏈結。
  • 來自 "敗家子" 的 "Trouble" 訊息,會依照麻煩的大小程度依序交給 "大、中、小" 三個具體的類別來處理;其中 "Null Trouble Handler" 類別,並非是空的,而是指麻煩超乎程度而無法處理了。
  • "大、中、小、Null" 四個具體(concrete)的類別,會覆寫(override) "handleTrouble()" 操作(operation),個別實作處理麻煩的方法。
  • "麻煩(Trouble)" 被當作參數從敗家子傳給派通街,實做上可以是 "字串"、"XML"、"物件" 等。

想利用農曆年前,花個一天的時間,來充實對軟體設計的物件導向觀念基礎與程式碼寫作嗎?

課程只花一天(七個小時)的授課時間,內容就涵蓋從物件本質,到基礎觀念與進階應用等觀念的傳授,並從三個層次的產出—生活與軟體面的實例(同時附 C#.NET and Java),來解釋物件的基礎觀念與實作面的實務,一氣呵成。

HSDc 一直持續 Deliver 軟體設計的理念,而軟體設計的本質又與所謂的「物件導向」息息相關。因為,企業層級的系統開發,已確定在實做層次的程式語言往物件導向的方向來走,例如,Java 與 .NET(C#, VB.NET),所以軟體人員包括程式開發,均需瞭解物件導向的設計觀念才行。但,從 Java 或 .NET 的層次來學習物件導向,並不是一個好方法,因為,軟體人員並不容易瞭解為何要採用物件導向的思維,又,什麼才是實做物件導向的正則,不是隨便設計幾個物件,卻沒有真正釐清物件的本質與應盡的責任,就叫做物件導向的。

本課程僅利用一天,約七個小時的課程時間,從物件本質,到基礎觀念與進階應用等觀念的傳授,包括概念與抽象、物件與類別及其之間的關係等,以及包括封裝、介面與多型的應用。利用三個層次,傳授不同層次的法,但均旨於闡述物件導向思維的本質,從觀念、生活/軟體面的層次、軟體塑模(Modeling)的層次、程式語言的層次。每一個層次,均有其產出,生活/軟體面利用實例來表達;軟體塑模產出類別與物件圖;程式語言同時產出 .NET 與 Java 的程式碼(同時也藉由程式碼範例,瞭解到類別之間的關連、一對多、多對多的關係是如何程式化,又介面與多型的程式碼又是如何表達的...)。

物件導向的思維,從 PM,SA/SD,Programmer ...等,所有軟體人員應該具備的蹲馬步基礎功夫。HSDc 的課程,應該是與從 OOP 為出發點所教授的物件導向觀念是大大不相同的。

對了,下午我們也免費備有點心與咖啡,是現煮的研磨咖啡(也有外購小蜜蜂的冰咖啡),好喝香醇。品味咖啡,並同時瞭解與領悟物件導向的觀念與應用,那可是心靈愉悅舒暢的享受。


物件導向基礎觀念養成 (星期六) — 2007 第一梯次(02/03)
  課程大綱  我要報名
課程簡述:
  • 從物件本質,到基礎觀念與進階應用等觀念的傳授,並從三個層次的產出—生活與軟體面的實例、UML Model、程式碼(同時附 C#.NET and Java),來解釋物件的基礎觀念與實作面的實務。
課程特色:
  1. 示範與引導學員實際操作與練習。
  2. 上課時即會發送給學員教學光碟,內容提供 EA 自動安裝與教材內容及範例。
  3. 本課程均保留與提供了學員免費再旁聽乙次同樣課程的權利,以一次低廉的收費,就可以擁有兩次上課的收穫,課程的師資、內容與品質,我們有信心是不會讓學員們失望的。
課程目標:
  1. 瞭解物件導向最重要的幾個關鍵術語,包括概念與抽象、物件與類別及其之間的關係等。以及包括封裝、介面與多型的應用。
  2. 瞭解物件導向關鍵術語在生活面的觀念與應用,以及在軟體面的設計觀,並能具化至 OOP 程式語言的層次。
  3. 讓學員不只是從 OOP 看物件導向,而應該是從生活面來反映至軟體的實作層次,切莫本末倒置。
授課日期
  1. 2006/10/14 (星期六),共一日。
  2. AM 9:20~12:40、PM 1:40~5:00,計約七個小時上課時間。
授課地點:
  1. 開羅會議中心,地址:台北市光復南路65號B2 (光復南路、市民大道交接口)。
  2. 參考交通與地圖
適合學員:
  • 在職軟體開發人員或在學學生。
  • 對於使用 OOP 卻不得其法或不明其理,想瞭解物件導向 "蹲馬步" 的基本功夫。
課程費用:
  1. $1,800 (含稅)。
  2. 曾經上課過本公司的「單元系列課程」學員,優惠 $1,600,含稅。(請記得註明為舊生,本公司查詢確認即以優惠算)
  3. 三人同行,或同時報名另一單元課程,亦比照舊生的優惠折扣,每位只需$1,600(含稅)。
師資簡介:
  • 賴信仁(Ringle Lai),王克明(Kenming Wang)
  • 擅長將複雜抽象的概念,以非常淺顯易懂的比喻及說明,讓學員一清二楚,並善於引導學員具備設計應有的反思能力。
使用教材:
  1. 由 HSDc 提供物件導向教材,包括內容、案例、Model 與程式碼等,同時並附有完整教學光碟乙片。
  2. 學員可攜帶相關 物件導向 參考書籍,並對於書中內容有問題者,可以直接提問。
開發工具:
  1. EA 6.5(Trial) UML Tool。
備註:
  1. 教室設備包括白板與投影機,由講師親自說明與操作示範。(學員可攜帶錄音筆)
  2. 學員最好能攜帶 Notebook,可以於課程中實際操作與練習。
  3. 報名滿 10 名即確定開班,同時保留 5 名學員重新選修同一課程(請攜帶原上課講義)。
  4. 為確保報名足額人數,煩請先以 ATM 轉帳預約費用($500),並請於報名表備註欄位內,註明您的轉帳帳號末 5 碼與轉帳金額。(若實在不及轉帳者,仍可現場報名,但請在報名表內註明)。 ATM 帳號: 新光銀行 (103) 帳號: 0772-50-100979-9
  5. 關於本課程特色、目標與課程大綱,請參考 HSDc 新聞區與課程公布討論區。
  6. 下午均免費備有冰、熱(現煮)研磨咖啡(非三合一)與點心,供學員享用。

§. 課程諮詢
聯絡電話:(02) 2722-7179
Email: service.hsdc@gmail.com
http://www.hsdc.com.tw