系統是由一群物件組成,不是類別 物件有自己的資料屬性,可以獨立完成,這樣稱作:內聚力 物件彼此沒有太多關聯性:很低的耦合力
設計原則:強內聚力、弱耦合力
UML
15種圖 分為:
- 結構性圖示:個體結構的靜態關係
- 行為式圖式:系統物件間的動態關係 所有的設計都來自於需求 三種圖:
- 僅有類別類別圖
@startuml
class Customer
@enduml- 含有名稱屬性
@startuml
class Employee{
int ID
}
@enduml- 含名稱、屬性跟方法
@startuml
class Student{
String name;
String getName();
}
@enduml關聯符號
通常用動詞,並加上方向鍵號
@startuml
class 老師
class 學生
老師 "1" -right- "1..*" 學生 :"教導 >"
@enduml畫線一定代表有功能要用到他,一定會有功能由右用到左或左用到右
一般化和特殊化

物件導向
- Object-oriented:有使用繼承、有使用多型
- Object-based:類別圖沒有使用繼承與多型
常用UML圖形

使用案例圖

領域模型
出來的圖叫做初步類別圖

系統循序圖
人跟系統互動的圖
進一步說明操作內容:合約
合約內容:
- 操作(Operation) 操作名稱和參數(parameter)
- 交互參照(Cross Reference) 使用案例名稱,操作所發生之地方
- 前置條件(Preconditions) 操作執行前之系統狀態
- ** 後置條件(Post-conditions) 操作執行後之系統狀態
以上都是分析階段
小考:
- 系統分析師有四個基本能力要求,是哪四個系統分析師具備的能力? 要求:請你自己回答,你的專題組,這四個能力準備好了沒? 技術、知識、溝通不良有沒有準備好了?
類別圖與循序圖

設計類別圖
領域類別圖:初步類別圖,只有名稱、關聯性,頂多放資料
@startuml
class 老師{
string name;
}
class 學生{
string name;
int score;
}
老師 "1" -right- "1..*" 學生 :"教導 "
@enduml設計類別圖:將類別操作加入類別圖,有方向性
@startuml
class 老師{
- string name;
+ string getName()
}
class 學生{
- string name;
- int score;
+ string getName()
+ int getScore()
}
老師 "1" -right- "1..*" 學生 :"teacherStudent >"
@enduml物件導向分析設計程序
物件導向分析
如專題初審

- 訪談並確認利害關係人之目標或利益 描述利害關係人與目標的表格:利害關係人目標表
- 目標事件轉成功能

- 描述出參與者與系統互動的細節
把系統看成一個黑箱,參與者要求系統進行工作 (系統事件),系統如何處理工作並回應訊息給參與者即可

graph TD
利害關係人 --> 目標 --> 系統事件區塊 --> 系統功能區塊 --> 類別
subgraph 目標區塊
利害關係人
目標
end
目標區塊-->目標表
subgraph 系統事件區塊
direction TB
系統事件
end
系統事件區塊 --> 事件表
subgraph 系統功能區塊
direction TB
系統功能 --> 使用實例 --> 實例圖
系統功能 --> 人-系統互動 --> 系統循序圖
direction TB
類別 --> 資料 --> 類別圖
end
系統循序圖
每一個事件都要寫出來

物件導向設計程序
如專題總審所需要繳交的文件
graph TD
以個別使用案例為主設計出互動圖-->描繪設計類別圖-->明確說明每一方法之標示符號與演算法-->定義展現層和資料存取層
- 重新調整類別圖 檢視所有類別,以建立繼承/包含關係、調整類別間之關聯性和增加相依關係 (例如大物件包含小物件,若刪除大物件則將連帶刪除小物件)。
- 明確說明每一方法的標示符號與演算法
- 合約方式
- 虛擬碼
- 定義展現層和資料資料存取層 透過DAO讓資料可以放進資料庫去
設計類別圖

期中
瀑布式軟體發展程序
請畫出完整符合MVC架構的物件(設計)循序圖
sequenceDiagram
Actor User
User ->>+ System:
System ->>+ User:
box lightblue View
participant User
participant System
end
System ->>+ ObjA:
ObjA ->>+ System:
box Pink Controller
participant ObjA
participant ObjB
participant ObjC
participant ObjD
end
box lightgrey Model
participant DAO
participant DB
end
ObjA ->>+ ObjB:
ObjB ->>+ ObjA:
ObjB ->>+ ObjC:
ObjC ->>+ ObjB:
ObjA ->>+ DAO:
ObjB ->>+ DAO:
ObjC ->>+ DAO:
ObjD ->>+ DAO:
DAO ->>+ DB:資料庫