物件導向系統分析與設計(建國)
TRANSCRIPT
建國科技⼤大學.資訊管理系
Object-Oriented System Analysis and Design
物件導向系統分析與設計
講師:林彥宏(lyhcode.info)
Week 1
⾃自我介紹
❖ 林彥宏
❖ 雲林科技⼤大學資訊管理所
❖ 思創軟體、︑遠通科技軟體⼯工程師
❖ Software R&D, Java, Linux and Database
❖ lyhcode.info
UML 2Latest version ?
Unified Modeling Language
UML 2.4.1August 2011
UML 2.5 Still Beta
OMG
OMG
❖ Object Management Group
❖ http://www.omg.org/
❖ 1989年由11家公司(包括IBM、︑Sun Micorsystems、︑蘋果公司、︑美國航空等)創⽴立
❖ 最初的⽬目的是開發⼀一個物件導向系統的標準
Model-Driven Architecture
❖ 簡稱為 MDA
❖ 使⽤用 Specification Language 定義 Platform Independent Model
❖ 常以 UML 作為塑模語⾔言(Modeling Language)
❖ 抽象化的系統定義
❖ 理想是由⾃自動化⼯工具將模型轉換為實際的電腦程式
UML 三劍客
❖ Use Case Diagram
❖ Class Diagram
❖ Sequence Diagram
Language
Language
010110011101
Language
if (x > 10) { printf(“????”);
}
Language
咕咕
呱呱
Language
UML Implementation
❖class Singleton❖{❖ private static Singleton instance;❖ private Singleton()❖ {❖ ...❖ }
❖ public static synchronized Singleton getInstance()❖ {❖ if (instance == null)❖ instance = new Singleton();
❖ return instance;❖ }❖ ...❖ public void doSomething()❖ {❖ ...❖ }❖}
UML and
Source Code
Use Case
Class Diagram
Sequence Diagram
UML Exercise
❖ ATM
Learning by doing
作業:專案⼼心智圖
使⽤用⼼心智圖說明專案內容及⼩小組成員,請盡可能發揮最⼤大創意,格式與內容沒有限制。︒
Business Model Canvas
Week 2
軟體安裝
列舉本課程中使⽤用的軟體,請儘早下載安裝。︒
BlueJ
http://www.bluej.org/
http://www.bluej.org/download/download.html
http://www.oracle.com/technetwork/java/javase/downloads/index.html
提⽰示:電腦必須先安裝JDK軟體
塑模
讓概念中的系統「視覺化」呈現
塑模(Modeling)
⼯工程領域通常先做「模型」,例如⾶飛機、︑建築或橋樑等。︒
軟體⼯工程的模型可以使⽤用UML製作。︒
塑模⽬目的
模擬與測試!
軟體開發是⼀一件浩⼤大的⼯工程,先建⽴立軟體的模型,不僅幫助溝通,可以及早做好各種可能的測試,利⽤用模型進⾏行模擬,盡量減少可以預期及預防的問題,並儘
早作修正。︒
4+1 View
邏輯
⼯工作流 佈署
實作
使⽤用案例
使⽤用案例
完整⽬目的
✔
✘
完整事件
喝⽔水
✘
✔
使⽤用案例的繼承
如何獲取使⽤用案例︖?
常⾒見詢問⽅方式:1. 您對系統有什麼期望︖?2. 您打算在這個系統裡做些什麼事情︖?3. 您做這件事情的⽬目的是什麼︖?4.您做完這件事情希望有⼀一個什麼樣的結果︖?
5W1H 思考
類別圖
電腦程式 = 資料 + 處理
結構化程式設計 物件導向程式設計
資料 變數 屬性
處理 函式 ⽅方法
BlueJ - 視覺化的類別與物件設計
類別圖與程式實作
類別與物件
步驟(⼀一)、建⽴立 Person 類別
步驟(⼆二)、產⽣生 person1 物件
繼承關係
步驟(⼀一)、新增 Student 類別
步驟(⼆二)、繼承 Person 類別
步驟(三)、產⽣生 student1 物件
循序圖
循序圖的特性
❖ 包含時間軸與⽣生命線
❖ 描述角⾊色及物件的「互動」
❖ 事件發⽣生的「順序」很重要
循序圖
Week 3
使⽤用的軟體
BlueJ
Astah Community
類別圖Class Diagram
資料
處理+
Stereotype
Boundary-Control-Entity Patterns
❖ Ivar Jacobson 博⼠士(照⽚片)
❖ 軟體⼯工程世界級權威⼤大師
❖ 系統類別分為:
❖ 邊界類別(boundary class)
❖ 控制類別(control class)
❖ 實體類別(entity class)
– UML創始⼈人
Grady Booch、︑James Rumbaugh、︑Ivar Jacobson
❖ 實體類別❖ 邊界類別 ❖ 控制類別
系統使⽤用者與邊界類別互動
系統功能操作、︑對資料的存取動作
從應⽤用領域分析獲得的實體需要被保存
Stereotype
購物⾞車
訂單
會員
商品資料
使⽤用者資料
交易記錄
信⽤用卡資料
典型的類別樣式
Stereotype 實際應⽤用
❖ MVC 架構
❖ Model 資料模型
❖ View ⼈人機界⾯面
❖ Controller 控制器︔;資料處理邏輯
Stereotype 實際應⽤用
❖ Spring Framework 軟體元件類型
❖ Component (元件)
❖ Controller (e.g. a web controller).
❖ Repository (or called DAO, Data Access Object).
❖ Service (e.g. a business service facade).
封裝
屬性能⾒見度
public
private
protected
package
UML 模型與實作
使⽤用案例圖
類別圖
Week 4
使⽤用的軟體
BlueJ
Astah Community
類別圖Class Diagram
has-a
❖ 組成(composition)
❖ 聚合(aggregation)
is-a
❖ 繼承(inheritance)
關聯
選修
class Course {Student student;
}
class Student { Course course;}
class Course {List<Student> students;
}
class Student { List<Course> courses;}
組成
聚合
練習(⼀一)
辨識類別之間的關聯、︑聚合、︑組成關係。︒
繼承
繼承
class Person { int age;}
class Student extends Person { int schoolId;}
練習(⼆二)Use Case
練習(三)Class Diagram
練習(四)Class Diagram
public class Person{ protected String myName; public void setName(String name) { myName = name; } public String getName() { return myName; } public void sayHello() { System.out.println("你好, 我是 " + myName); }}
public class Student extends Person{ private Phone phone = new Phone(); private int phoneNo; public void setPhoneNo(int no) { phoneNo = no; } public int getPhoneNo() { return phoneNo; } public void chat(Person who) { System.out.println(myName + " 正在聊天,對象是 " + who.getName()); } public void call(Student who) { System.out.println("打電話給 " + who.getName()); phone.dial(who.getPhoneNo()); } public void playGame(String gameName, String password) { Game game = new Game(gameName); game.login(password); game.play(); }}
public class Phone{ public void dial(int no) { System.out.println("正在撥號 " + no); }}
public class Game{ private String gameName; public Game(String name) { gameName = name; } public void login(String password) { Server server = new Server(); if (server.check(password)) { System.out.println("登⼊入成功"); } } public void play() { System.out.println("正在執⾏行遊戲: " + gameName); } }
public class Server{ public boolean check(String password) { if (password == "1234") { return true; } return false; }}
循序圖Sequence Diagram
⽣生命線
活動
活動
角⾊色
訊息
作業(五)Sequence Diagram
Week 5
使⽤用的軟體
BlueJ
Astah Community
物件圖
物件圖(Object Diagram)
❖ Object(物件)也稱為 Instance(實例)
❖ ⽤用途:
❖ 描述實際領域的物件關係
❖ 檢驗類別圖
類別圖
❖ 類別名稱
❖ 屬性(Attributes)
❖ 操作⽅方法(Operations)
物件圖
❖ 物件名稱
❖ 來⾃自某個類別
❖ 屬性(Attributes)
❖ 沒有操作⽅方法(Operations)
從類別圖到物件圖
物件是從類別產⽣生,所以不必重複描述操作⽅方法
類別圖要描述操作⽅方法
類別的關係(⼀一對⼀一、︑⼀一對多、︑多對多)
物件之間的關係來⾃自類別的定義
⽤用物件圖檢驗類別圖如果⼀一位學⽣生可以擁有多⽀支⼿手機︖?
使⽤用 Astah 繪製物件圖
先建⽴立”類別圖“在類別圖建⽴立物件
作業⼀一、︑物件圖練習❖ 請定義兩個類別:智慧型⼿手機、︑使⽤用者
❖ 智慧型⼿手機
❖ 屬性:螢幕尺⼨寸、︑處理器速度、︑作業系統、︑相機畫素
❖ 操作⽅方法:撥號、︑照相、︑瀏覽網⾴頁
❖ 使⽤用者
❖ 屬性:姓名、︑年齡、︑性別
❖ 操作⽅方法:購物、︑打電話、︑上網
❖ 請製作類別圖,必須清楚定義上述的類別屬性與操作⽅方法。︒
❖ 請製作物件圖,至少必須包含兩位使⽤用者與五⽀支智慧型⼿手機。︒
通訊圖
❖ Communication Diagram
❖ 指物件間的通訊
❖ 描述使⽤用案例中物件互動的過程
❖ 強調物件間的合作與訊息傳遞
通訊圖
作業⼆二、︑通訊圖練習
❖ 延續作業⼀一。︒
❖ 請完成使⽤用者透過⼿手機照相的使⽤用案例圖與通訊圖。︒
循序圖
⽣生命線
傳遞訊息
物件使⽤用另⼀一個物件的操作⽅方法
同步與非同步
⽣生命線
活動
活動
角⾊色
訊息
作業三、︑循序圖練習
❖ 延續使⽤用者及智慧型⼿手機類別。︒
❖ 請再增加⼀一個「⼿手機遊戲」類別。︒
❖ 請⾃自定遊戲的屬性與操作⽅方法。︒
❖ 利⽤用循序圖描繪使⽤用者透過智慧型⼿手機玩遊戲的訊息傳遞流程。︒
Week 6
使⽤用的軟體
BlueJ
Astah Community
Balsamiq Mockup
狀態圖State Diagram
作業(1):狀態圖練習
❖ 使⽤用狀態圖說明「你」⼀一天的各種狀態與事件。︒
元件圖Component Diagram
什麼是元件︖?
❖ 執⾏行檔 *.exe
❖ 函式(元件)庫 *.dll
❖ 網⾴頁⽂文件 *.html
❖ 資料庫 *.mdb
❖ 資料表
❖ ⽂文件 *.doc, *.txt
A Component Diagram
執⾏行檔
元件
網⾴頁
Modeling a Physical Database
學校資料庫
學⽣生學校教師系所課程
Modeling Source Code
註冊
搜尋
訂位
部署圖Deployment Diagram
主伺服器 伺服器 伺服器 伺服器
快取伺服器網際網路
⽤用⼾戶端
伺服器
使⽤用者介⾯面設計User Interface Mockup (or Wireframing)
作業(2):使⽤用者介⾯面
❖ 使⽤用Balsamiq 設計⼀一個 網站 或 ⼿手機APP 的畫⾯面。︒
作業(3):系統分析綜合練習❖ 系統規劃(⼼心智圖)
❖ 使⽤用案例圖
❖ 活動圖
❖ 類別圖、︑物件圖
❖ 循序圖、︑通訊圖
❖ 狀態圖
❖ 元件圖、︑部署圖
❖ 使⽤用者介⾯面設計(Mockup)