View
238
Download
5
Category
Preview:
Citation preview
軟體工程 Slide 1
物件導向分析設計
軟體工程 Slide 2
物件導向開發流程的三大原則 Architecture centric
• 穩固的 Architecture 才能支持隨時可能發生的變化 Iterative and Incremental
• 分析一點點、 Coding 一點點、測試一點點• 逐步完成、降低風險
Use case driven• 從最關鍵的 Use case 開始• 實現 I&I 的方法• 驗證架構
軟體工程 Slide 3
點餐結帳系統 專題目標:
1. 加快結帳跟點餐速度2. 讓出餐更為快速正確。
專案內容 當接受到點餐的訊息以及資料,點餐系統將匯整
各桌的點餐內容發送到廚房以及結帳系統,讓廚房出餐,結帳系統也將於客人用餐完 畢後,列印出點餐明細以及金額。
軟體工程 Slide 4
Use Case Diagram 將客戶需求轉換成客戶與開發人員的共
通文件• Use cases 描述系統功能需求• 找出系統的 Actors• 定義 Actors 與 Use cases 的關係• 定義系統的邊界• 定義 Use cases 間的關係• Actors 與系統的對話
軟體工程 Slide 5
Use Case Diagram
點餐
結帳
維護員工資料
服務生
櫃檯人員
店長
帶位
維護菜單資料
上菜
軟體工程 Slide 6
Use case description Use case: 帶位 Actor: 服務生 Description:
1. 服務生輸入人數2. 系統顯示所有可帶位桌號3. 服務生輸入帶位之桌號4. 系統顯示成功訊息
Exception: 如果客滿,詢問顧客是否願意等待,排隊候補
軟體工程 Slide 7
Use case description Use case: 點餐 Actor: 服務生 Description:
1. 服務生輸入點餐桌號2. 系統顯示菜單及狀態3. 服務生輸入顧客點用之菜色4. 系統顯示請輸入服務生編號5. 服務生輸入服務生編號6. 系統顯示成功訊息
Exception:
軟體工程 Slide 8
Use case description Use case: 上菜 Actor: 服務生 Description:
1. 服務生輸入菜色2. 系統顯示點用該菜色之桌號及上菜順序3. 服務生輸入桌號4. 系統顯示成功訊息
Exception:
軟體工程 Slide 9
Use case description Use case: 結帳 Actor: 櫃檯人員 Description:
1. 櫃檯人員輸入桌號2. 系統顯示該桌點用菜色內容及金額3. 櫃檯人員輸入是否為會員4. 系統顯示應付款金額5. 櫃檯人員輸入付款方式6. 系統顯示成功訊息
Exception:
軟體工程 Slide 10
Class Diagram 描述系統的靜態架構 描述系統中物件的各種型態 描述物件之間各式各樣的靜態關係,其中兩種
最主要的靜態關係,包含:• Association( 結合關係、關聯 )
• Generalization( 一般化關係 )
軟體工程 Slide 11
Class Diagram 的三個觀點 概念性觀點
• 表現 Domain 的 Concept
• 和實作軟體無關 規格觀點
• 注重的是軟體的介面而不是實作 實作觀點
• 直接談論實作面
軟體工程 Slide 12
Concept Class Diagram
服務生 櫃檯人員 店長
菜單
菜色 餐桌
帳單
員工
顧客
軟體工程 Slide 13
Design Class Diagram – 菜色
Class name Attributes Methods Access Type Parameters
Food
-ID: int
-name: string
-price: int
+getID(): int
+getName(): string
+getPrice: int
+setID(int): void
+setName(string): void
+setPrice(int): void
軟體工程 Slide 14
Design Class Diagram – 菜單
Menu
-foods: Food[]
+getFoods(): Food[]
+getFood(int): Food
+setFood(int, Food): void
+setFoods(Food[]): void
軟體工程 Slide 15
Design Class Diagram – 餐桌
Table
-number: int
-arriveTime: time
-foods: Food[]
-status: int
+getNumber(): int
+getArriveTime(): time
+getFoods(): Food[]
+getStatus(): int
+setNumber(int): void
+setArriveTime(time): void
+setFoods(Food[]): void
+setStatus(int): void
軟體工程 Slide 16
Design Class Diagram – 帳單
Bill
-ID: int
-tableNumber: int
-chechBillTime: time
-paymentType: int
+getNumber(): int
+getArriveTime(): time
+getFoods(): Food[]
+getStatus(): int
+setNumber(int): void
+setArriveTime(time): void
+setFoods(Food[]): void
+setStatus(int): void
軟體工程 Slide 17
Sequence Diagram 系統倚賴的不是功能有限的個別物件,而是將
這些小物件的基本功能連結起來,構成一股龐大的力量。
連接系統功能與靜態架構 通常每個 Use case 會有一個 Sequence diagram 按時間先後次序發送的訊息 物件的概念
軟體工程 Slide 18
物件和生命線 類別
物件
生命線
Table
t01 : Table : Table
: Table
已命名物件 未命名物件
物件和生命線
類別
軟體工程 Slide 19
訊息 當某一物件需要協助時,便會發送訊息給另一
個物件 訊息的符號是一條帶箭頭的實線 訊息名稱及參數
: 信用卡
設定信用額度 ( 信用額度 )
:客服人員
查詢可用餘額 ()
軟體工程 Slide 20
活動期 表現物件執行運算的期間 符號是長條狀的空心矩形
: 信用卡
設定信用額度 ( 信用額度 )
:客服人員
查詢可用餘額 ()
軟體工程 Slide 21
Sequence Diagram – 帶位:Table :Time
findTable(int)
findTable(int) getStatus()
getTime()
setAttriveTime(int)
:Leading_UCO
selectTable(int)
:Table_DAO
findTable(int)
setStatus(int, time)setStatus(int)
1. 服務生輸入人數2. 系統顯示所有可帶位桌號3. 服務生輸入帶位之桌號4. 系統顯示成功訊息
軟體工程 Slide 22
修正 Table Class Diagram
Table
-number: int
-arriveTime: time
-foods: Food[]
-status: int
+getNumber(): int
+getArriveTime(): time
+getFoods(): Food[]
+getStatus(): int
+setNumber(int): void
+setArriveTime(time): void
+setFoods(Food[]): void
+setStatus(int): void
+findTable(int): Table[]
軟體工程 Slide 23
Sequence Diagram – 點餐
:Table :Menu
orderTable(int)
getStatus(int)
setFoods(Food[])
:Order_UCO
orderFoods(Food[])
:Table_DAO
getStatus(int)
setFoods(int, Food[])
getFoods()
:Food :Food_DAO
getName() getName()
setWaiter(int)
setWaiter(int)
setWaiter(int)
1. 服務生輸入點餐桌號2. 系統顯示菜單及狀態3. 服務生輸入顧客點用之菜色4. 系統顯示請輸入服務生編號5. 服務生輸入服務生編號6. 系統顯示成功訊息
軟體工程 Slide 24
修正 Table Class DiagramTable
-number: int
-arriveTime: time
-foods: Food[]
-status: int
-waiter: int
+getNumber(): int
+getArriveTime(): time
+getFoods(): Food[]
+getStatus(): int
+setNumber(int): void
+setArriveTime(time): void
+setFoods(Food[]): void
+setStatus(int): void
+findTable(int): Table[]
+getWaiter(): int
+setWaiter(int): void
軟體工程 Slide 25
Sequence Diagram – 上菜
:Table
serveFood(Food)
findTable(Food)
:ServeFood_UCO
selectTable(int)
:Table_DAO
findTable(Food)
1. 服務生輸入菜色2. 系統顯示點用該菜色 之桌號及上菜順序3. 服務生輸入桌號4. 系統顯示成功訊息
selectTable(int)selectTable(int)
軟體工程 Slide 26
修正 Table Class DiagramTable
-number: int
-arriveTime: time
-foods: Food[]
-status: int
-waiter: int
+getNumber(): int
+getArriveTime(): time
+getFoods(): Food[]
+getStatus(): int
+setNumber(int): void
+setArriveTime(time): void
+setFoods(Food[]): void
+setStatus(int): void
+findTable(int): Table[]
+getWaiter(): int
+setWaiter(int): void
+findTable(Food): Table[]
+selectTable(int): void
軟體工程 Slide 27
修正 Table Class DiagramTable-number: int
-arriveTime: time
-foods: Food[]
-status: int
-waiter: int
+getNumber(): int
+getArriveTime(): time
+getFoods(): Food[]
+getStatus(): int
+setNumber(int): void
+setArriveTime(time): void
+setFoods(Food[]): void
+setStatus(int): void
+findTableForIdle(int): Table[]
+getWaiter(): int
+setWaiter(int): void
+findTableForFood(Food): Table[]
+selectTableForServe(int): void
Table
-number: int
-arriveTime: time
-foods: Food[]
-status: int
-waiter: int
+getNumber(): int
+getArriveTime(): time
+getFoods(): Food[]
+getStatus(): int
+setNumber(int): void
+setArriveTime(time): void
+setFoods(Food[]): void
+setStatus(int): void
+findTable(int): Table[]
+getWaiter(): int
+setWaiter(int): void
+findTable(Food): Table[]
+selectTable(int): void
軟體工程 Slide 28
Sequence Diagram – 結帳
:Table
checkBill(int)checkBill(int)
:CheckBill_UCO
isMember()
:Table_DAO
checkBill(Bool, int)
getFoods()
:Food:Food_DAO
getPrice(int)
payType(int)createBill(Bool, int, int)
1. 櫃檯人員輸入桌號2. 系統顯示該桌點用菜色內容及金額3. 櫃檯人員輸入是否為會員4. 系統顯示應付款金額5. 櫃檯人員輸入付款方式6. 系統顯示成功訊息
:Bill:Bill_DAO
getFoods()
getPrice()
createBill(Bool, int, int)
軟體工程 Slide 29
修正 Table Class DiagramTable
-number: int
-arriveTime: time
-foods: Food[]
-status: int
-waiter: int
+getNumber(): int
+getArriveTime(): time
+getFoods(): Food[]
+getStatus(): int
+setNumber(int): void
+setArriveTime(time): void
+setFoods(Food[]): void
+setStatus(int): void
+findTable(int): Table[]
+getWaiter(): int
+setWaiter(int): void
+findTable(Food): Table[]
+selectTable(int): void
+chechkBill(int): int
軟體工程 Slide 30
修正 Bill Class DiagramBill
-ID: int
-tableNumber: int
-chechBillTime: time
-paymentType: int
+getNumber(): int
+getArriveTime(): time
+getFoods(): Food[]
+getStatus(): int
+setNumber(int): void
+setArriveTime(time): void
+setFoods(Food[]): void
+setStatus(int): void
+checkBill(Bool, int): int
+createBill(Bool, int, int): void
軟體工程 Slide 31
練習 每個人練習畫
• Use case Diagram
• Concept Class Diagram
• Design Class Diagram
• Sequential Diagram
Recommended