演講人 : 郭義境 服務單位 : 傑策科技 / 技術研發 協理 E-Mail : jimmy@hitto.com.tw OOAD & UML 淺談 演講人 : 郭義境 服務單位 : 傑策科技 / 技術研發 協理 E-Mail : jimmy@hitto.com.tw
Outline 1.程序導向vs.物件導向 2.UML 簡介 3.UML Diagrams 4.Design Pattern 6.實務經驗分享
第一章.程序導向vs.物件導向 程序導向(Process Oriented) 物件導向(Object Oriented) 物件導向的概念 OO設計實例 系統發展方法論說明 系統開發程序 傳統系統發展方法與物件導向發展方法的比較
程序導向(Process Oriented) 把焦點放在程式的程序(處理步驟) 變更程序時所配合的資料必需跟著修改 程序A 程序B 程序D 程序C 資料A 資料B 資料C DFD的範例 部門A 部門B Source : Technologic Arts Inc., “UML參考辭典”
物件導向(Object Oriented) 是一種思維、思考方式 資料(屬性) 平面映像管、天線、顏色 程序(操作) 開機、切換頻道、關機
物件導向的概念 封裝(Encapsulation)訊息(Message) 抽象化(Abstraction)類別(Class) 實體(Instance)物件(Object) 繼承(Inheritance) 多型(Polymorphism) 動態繫結(Dynamic Binding)
OO設計實例(1/3) 西遊記的電腦遊戲 角色 - 唐三藏、孫悟空、豬八戒、妖怪 事件 - 過河、遇到妖怪 Source : 吳明皓, “物件導向實例 – 是定理還是方法”, 2002.8.22
OO設計實例(2/3) 傳統程序導向的系統切割 西遊記主程式 過河 三藏師徒遇到妖怪 妖怪遇到三藏師徒 如果唐三藏過河則划船 如果孫悟空過河則用飛的 如果豬八戒過河則用游的 三藏師徒遇到妖怪 如果唐三藏遇到妖怪則念經 如果孫悟空遇到妖怪則斬妖 如果豬八戒遇到妖怪則大喊救命 妖怪遇到三藏師徒 如果是唐三藏則吃掉 如果是孫悟空則逃跑 如果是豬八戒則戲弄他 Source : 吳明皓, “物件導向實例 – 是定理還是方法”, 2002.8.22
OO設計實例(3/3) 物件導向的系統切割 系統主程式 唐三藏 孫悟空 豬八戒 妖怪 過河則划船 遇到妖怪則念經 過河則飛 遇到妖怪則斬妖 過河則游 遇到妖怪則呼救 妖怪 遇到唐三藏則吃 遇到孫悟空則跑 遇到豬八戒則戲弄 Source : 吳明皓, “物件導向實例 – 是定理還是方法”, 2002.8.22
系統發展方法論說明 系統發展之方法論中包含了程序(Process) 及表示法(Notation)兩個部份,其中: 程序指的是系統開發的流程,例:瀑布模式、漸增模式、擴展模式、雛型模式、螺旋模式等。 表示法指的是建構軟體模型中所會用到之符號及規則。例:UML、DFD 、 ER Model Source : 郭惠民, “淺談UML”
系統開發程序(1/2) 瀑布式(waterfall)開發程序 由上而下(Top-Down) 上一階段結束後,下一階段才會進行 愈到後面的階段,改變的成本愈高 初學者比較容易理解 適合順序性,變動小的專案 需求 分析 設計 實作 測試 建置
系統開發程序(2/2) 往覆(Iterative)與漸增式(Incrementally)開發程序 系統切割成許多 部分 初學者不易理解 如何切割 可提早發現風險 適合變動大的專 案 需求 分析 設計 實作 測試 建置
傳統系統發展方法與物件導向發展方法的比較 區分 傳統的開發 Traditional development 物件導向的開發 Object-Oriented Development 方法 Method 程序導向 Procedure-Oriented 物件導向 Object-Oriented 分解基礎 Decomposition based on 演算法 Algorithm 類別 Class 生命週期 Life Cycle 由上而下 Top-Down 往覆與漸增 Iterative and Incrementally 開發系統的可維護性 Maintainability of Developed System 困難 容易 可再使用性 Reusability 低 高 失敗與風險 Failure and Risk
第二章.UML 簡介 為什麼需要Modeling? 什麼是UML? UML與OO的關係 UML的歷史 使用UML的好處
為什麼需要Modeling? vs. 簡單 / 功能少 / 單人 複雜 / 功能多 / 多人
什麼是UML? UML就是Unified Modeling Language UML是用來製作模型的工具 草稿 藍圖 程式語言 正向工程 反向工程
UML與OO的關係 UML之訂定與物件導向方法有非常密切之關係。 UML中的各種符號及規則與物件導向語言(Java,C++、C#)之結構有完整對應。 UML不僅限用在物件導向軟體開發,UML中有些概念與圖形甚至可說是與物件導向無關,例:Use Case Diagram及State Chart Diagram 軟體開發時無論是否採用物件導向方法,UML都是適用的。 Source : 郭惠民, “淺談UML”
UML的歷史(1/2) Grady Booch、Ivar Jacobson 與Jim Rumbaugh 三位OO大師整合了以OO為基礎的模式語言創造 出了UML Grady Booch Ivar Jacobson Jim Rumbaugh Booch方法論 OMT方法論 OOSE方法論
UML的歷史(2/2) UML的版本演進
使用UML的好處 它是一個標準(Standard) UML支援完整的軟體發展生命週期(Life Cycle) UML支援各種不同型態的系統 UML結合MDA (Model-Driven Architecture)可成為一種程式語言的開發架構
第三章.UML Diagrams UML與開發程序(Process)的關係 UML的觀點(View) UML Diagrams 的種類
UML Diagrams - Process Business Model Requirement Model User Experience Model look-Feel & Interaction Analysis Model Design Model Architecture design Data Model Implementation Model Test Model Deployment Model Requirement analysis System analysis System Design Implementation Testing Deployment
UML Diagrams - View Process View Deployment View Logical View Implementation View Programmers Software management Performance Scalability Throughput System Integrators System topology Delivery, installation communication System Engineering Use-Case View Structure Analysts/ Designers End-user Functionality
UML Diagrams 的種類 UML 13 種 Diagrams (UML 2.0版) { Diagrams } { Behavior } (動態 / 行為) Use Case Diagram(使用案例圖) Activity Diagram(活動圖) State Machine Diagram(狀態機圖) { Structural } (靜態 / 結構) Class Diagram (類別圖) Component Diagram(元件圖) Composite Structure Diagram (組合結構圖) Object Diagram(物件圖) Package Diagram(套件圖) Deployment Diagram(部署圖) { Interaction } (交互) Sequence Diagram (循序圖) Timing Diagram (時序圖) Communication Diagram (通訊圖) Interaction Overview Diagram (互動概圖)
Use Case Diagrams (1/3) 使用案例圖 (需求、分析階段) 表達企業內部流程與外部流程與單位彼此之間的關係 表達系統所提供的功能與外部要素(使用者或外部系統)之間的關係 需配合使用案例內容敘述
Use Case Diagrams (2/3) 總統大選網路投開票系統 手機簡訊投票 選民 1.投票作業 戶政系統 Actor 確認身份 <<extend>> <<Actor>> 選民 <<include>> 1.投票作業 戶政系統 Actor 確認身份 2.開票作業 Use Case 選務人員 系統邊界
(main success scenario) 使用案例敘述:進行遊戲 (義境) Use Case Diagrams (3/3) 使用案例內容敘述範例 使用案例名稱 1.投票作業 行為者(Actor) 選民 : 指合於投票資格的中華民國國民 選務人員 : 從事選舉事務相關工作的人 戶政系統 : 全國戶政資訊管理系統 簡述 選民透過網路投票作業功能來投票 主要成功情節 (main success scenario) 1.1 登入 : 選民登入投票系統 1.2 檢核 : 系統檢核該選民是否身份符合 1.3 領票 : 選民確認領票 1.4 圈票 : 選民圈選候選人 1.5 登出 : 投票完成登出系統 擴充情節(extension) 1.1a 如果選民沒有網路可登入投票系統,則可 透過手機簡訊投票 事先條件(pre-condition) 事後保證(guarantee) 觸發事件(trigger)
Activity Diagram (1/2) 活動圖 (需求、分析階段) 表達、掌握業務的流程步驟(了解流程、流程再造) 表達、掌握活動處理的順序 可代替「事務流程圖」
Activity Diagram (2/2) [沒咖啡] [沒可樂] 找飲料 [找到咖啡] [找到可樂] 拿可樂罐 放咖啡到濾杯 加水到咖啡機 拿杯子 拿濾杯到機器 開機器煮咖啡 咖啡煮好 倒咖啡 喝飲料
Class Diagram (1/3) 類別圖(分析、設計、實作階段) 表達、掌握系統的靜態結構 以類別為單位 商品 類別名稱 商品編號 : String - 商品名稱 : String # 單價:int 賣點 [ 0..* ordered ] ~ 開始販賣日期:Date=登錄日期 + 登錄商品資訊 (商品資訊) # 取得商品資訊():商品資訊 類別名稱 可見度 屬性1: 型別=初始値 可見度 屬性2: [多重度] 可見度 操作 (參數:型別=預設值):傳回値型別
Class Diagram (2/3) 可見度(對其他類別的公開程度) + 公開的(public) - 私有的(private) # 保護的(protected) ~ 套件(package) 套件 類別1 類別2 類別3
Class Diagram (3/3) 系統畫面(UI) +接受訂購資訊(訂購資訊) +登錄訂購資訊() +取消訂單() 訂單資訊 訂單 -訂單編號 -訂單日期 +登錄訂單資訊(訂購資訊) -取得訂購日期():訂購日期 -訂購數量 -折扣 1 1..* +登錄訂單詳細資訊(詳細資訊) 0..* 0..* 1 1 商品 倉庫 客戶 -商品編號 -商品名稱 -單價 0..* 存放 1..* -倉庫名稱 -地址 -電話號碼 -客戶編號 -客戶姓名 -地址 -電話號碼 庫存 會員 -會員編號 -庫存量
Sequence Diagram (1/2) 順序圖(分析、設計、實作階段) 以時間順序表達、掌握物件之間的動態關係 以時間順序表達、掌握物件之間的訊息關係
Sequence Diagram (2/2) :訂單受理畫面 :商品 :庫存 :訂單 :訂單明細 訂單受理人員 查詢庫存狀況( ) 取得庫存狀況( ) 查詢商品價格( ) 取得庫存狀況( ) 要打折:取得折扣價格() 不打折:取得訂價() 庫存狀況 庫存狀況 輸入訂單資訊(訂單資訊) 顯示庫存狀況(庫存狀況) 登錄訂單( ) 輸入訂單資訊(訂單資訊) :訂單 :訂單明細 輸入訂單資訊(訂單明細) Source : Technologic Arts Inc., “UML參考辭典”
Interaction overview diagram(1/2) 互動概圖(分析、設計階段) 活動圖(activity diagram)與循序圖(sequence diagram)的混合 用於畫出使用案例(use case)中不同情節的邏輯路徑
Interaction overview diagram(2/2) sd 販賣 :訂購畫面 :訂單 登錄訂單 sd 接受訂單 ref 出貨 ref 結算
Communication Diagram(1/2) 通訊圖(分析、設計階段) UML 2.0以前稱為合作圖 將焦點放在物件的關係,表達、掌握物件間尋的傳遞
Communication Diagram(2/2) 4:登錄訂單 5:顯示登錄資訊 登錄資訊 :訂單管理 :訂單輸入畫面 1:輸入訂單資訊 2:登錄訂單資訊 3:建立訂單 訂單A:訂單 Source : Technologic Arts Inc., “UML參考辭典”
State Machine Diagram 狀態機圖(設計、實作階段) 表達狀態之間的轉移 門打開/關閉 , 門鎖開鎖/鎖上 關閉 開鎖 門打開/關閉 , 門鎖開鎖/鎖上 沒上鎖 上鎖 關閉 開啟 開鎖 鎖上 打開 Source : Technologic Arts Inc., “UML參考辭典”
Package diagram 包裹圖(實作階段) 表達、掌握模型元素的群組
Object Diagram 物件圖(實作、測試階段) 表現、掌握物件在某個情境的靜態模型 A先生的訂單:訂單 錄影機的訂單明細:訂單明細 錄影機:商品 訂單編號 = 001 訂單日期 = 2005/6/1 訂購數量 = 2台 折扣=10% 產品編號 = 016 商品名稱 = PIPEER 單價=5430 冰箱的訂單明細:訂單明細 冰箱:商品 A先生:客戶 訂購數量 = 1台 折扣=30% 產品編號 = 023 商品名稱 = LGG 單價=33600 客戶編號 = 068 客戶名稱 = A先生 地址 = 台中縣沙鹿鎮 電話號碼=03-1234-5678
Component Diagram 元件圖(測試、部署階段) 用來表達軟體內部的物理架構 構成軟體的基礎物理架構,元件可以是程式原始檔、執行檔、程式庫檔案、甚至是圖片等資源檔案。
Composite Structure Diagram 組合結構圖(實作階段) 可秀出某個類別或是元件在執行時期可能包含的實例與連結器 筆記型電腦 零件 連接器 :螢幕 文字輸入 :硬碟 :CPU :鍵盤 :電池 port
Deployment Diagram SQL Server Server SMTP Server Client Mail Server Browser LAN WAN Application server SQL Server LAN LAN Server SMTP Server WAN Client Mail Server 部署圖(部署階段) 用來表示系統的物理架 構,用於需要考慮執行 環境的實作階段。 可以表示出系統的硬 體架構與硬體內部佈 署的軟體架構。
Timing Diagram 時序圖 展現物件狀態與時間變化的方式 幫浦 Off On Off 加熱板 Off On Off {>10s} 咖啡機的範例 Source : Martin Fowler, “UML distilled Third Edition”
第四章.Design Pattern 什麼是Design Pattern ? 為什麼要使用Design Pattern ?
什麼是Design Pattern? Pattern 最簡單的定義 Pattern 就是一種「千錘百鍊」的智慧結晶 Ex. 第四台賣東西、選舉、動作片、愛情片、 色情片、恐怖片 Pattern 就是一種「千錘百鍊」的智慧結晶 Pattern 是某外在背景環境(Context)之 下﹐對特定問題(Problem)的慣用解決之道(Solution)
為什麼要使用Design Pattern ? 於OOD(設計階段)使用的Pattern 使系統更有彈性,而易於應付外在的變動 減少系統出錯的機會 學習結構化設計的方法 注意 : Design Pattern 並不是萬靈丹
Design Pattern 範例 Façade Design Pattern Facade client client client Subsystem
第五章.UML在資料庫設計上的應用 ER-MODEL和UML的比較 物件導向資料庫的特性
ER-MODEL和UML的比較(1/3) 實體集合與屬性 ER-MODEL UML – Class Diagram
ER-MODEL和UML的比較(2/3) 關係 基數條件限制 UML – Class Diagram ER-MODEL
ER-MODEL和的UML比較(3/3) 一般化與特殊化 UML – Class Diagram ER-MODEL
物件導向資料庫的特性 可自訂資料型態、函數以及運算(操作) 可將資料與運算結合 具有組合、繼承、複合的特性 以OID (Object ID)代替主鍵與外鍵
第六章.實務經驗分享 給專案經理的話 給系統分析師的話 給程式設計師的話
給專案經理的話 找到正確的KEY MAN決定專案的成敗 要有勇氣堅持自己的預估 測試的時間超過寫程式的時間 大型軟體專案需要有共通的規範和準則 3個人4個月的工作絕不等於12個人1個月的工作 監控進度
給系統分析師的話 客戶的需求永遠在變 與程式設計師培養良好的默契 不要寫天書 了解開發工具和語言的特性
給程式設計師的話 不要為了OO而OO 程式功能剛好夠用就好 程式不要害怕 Refactor 學習產業Know-how 學習與人溝通的技巧 測試永遠不嫌多
課程完畢 謝謝各位!!