第4章 物件導向分析與設計簡介 4-1 物件導向的軟體系統開發 4-2 物件導向分析與設計 4-3 UML的物件導向分析與設計

Slides:



Advertisements
Similar presentations
系統分析與設計 楊子青 H-1 H 、物件導向技術 n 物件導向的基本概念 – 物件、類別 – 封裝、繼承 – 同名異式 ( 多型 ) 、超荷 ( 過載 ) n 物件導向分析與設計及塑模工具 n UML 塑模工具.
Advertisements

3.2 Java的类 Java 类库的概念 语言规则——程序的书写规范 Java语言 类库——已有的有特定功能的Java程序模块
<<會計資訊系統課程講義>> 統一塑模語言(UML)語法精要 -- 物件導向概念、需求分析及系統分析
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
第九章 認識勞退新制及因應之道 大葉大學 助理教授 邱祈豪.
人 因 工 程 四室一B 黃雅勤 四室一B 黃曉楓 四室一B 鄭羽真 四室一B 張起順.
第一章 資料結構導論 1-1 資料結構簡介 1-2 認識程式設計 1-3 演算法效能分析 1-4 物件導向程式設計與Java.
Ch02物件導向程式設計 物件導向系統分析與設計.
第10章 領域、概念與分析模型 10-1 再談物件導向分析 10-2 找出類別建立領域模型 10-3 指定責任建立概念模型
第八章 信息系统开发概述.
主講人:臺中市政府警察局 交通警察大隊 行政組組長簡仁照
面向对象的程序设计(一).
第二章 UML簡介 課前指引 本章介紹什麼是UML以及利用圖形來塑模資訊系統的好處在哪裡。文中也介紹了何謂「4+1的觀點」、以及簡述各項UML圖形的使用目的。並且,我們從靜態以及動態這兩個觀點來分類、介紹各圖形的使用時機。
第一章 面向对象程序设计.
设计模式可以帮助我们改善系统的设计,增强 系统的健壮性、可扩展性,为以后铺平道路。
第10章 考试系统的分析与设计 1.
第二章 JAVA语言基础.
普通高等教育“十一五”国家级规划教材 信息系统分析与设计 刘腾红 孙细明 主编 科 学 出 版 社.
類別與物件 Class & Object.
第15章 繼承與多重繼承 15-1 繼承的基礎 15-2 覆寫與隱藏父類別的成員 15-3 子類別的建構與解構子 15-4 多重繼承
第八章 分析與設計階段 – 物件導向設計(OOD)
Chapter 1 OBJECT-ORIENTED ANALYSIS AND DESIGN
第5章 面向对象程序设计 本章要点 5.1 面向对象程序设计概述 5.2 Java语言的面向对象程序设计 5.3 方法的使用和对象数组
H、物件導向技術 物件導向的基本概念 物件、類別 封裝、繼承 同名異式(多型) 、超荷(過載) 物件導向分析與設計及塑模工具 UML塑模工具.
物件導向程式設計 (Object-Oriented rogramming)
C++语言程序设计 第四章 类与对象 成都信息工程学院计算机系.
Chap 18 類別與物件 夫有土者,有大物也。有大物者,不可以物。 物而不物,故能物物。 明乎物物者之非物也,豈獨治天下百姓而已哉!
第十一章 面向对象设计 第十二章 面向对象实现
軟體工程 -物件導向程式設計與UML系統分析實作
CHAPTER 9 建構方法 ROBERT.
物件導向系統分析與設計與UML.
單元3:軟體設計 3-2 順序圖(Sequence Diagrams)
UML工具 --8种优秀的UML工具.
程式設計實作.
软件建模精要 面向对象软件建模技术.
JUDE教學 Jude安裝教學篇 Jude初步介紹篇 Jude繪圖介紹篇 介紹jude的安裝和下戴 介紹jude的初基本功能
C++ 與 物件導向 程式設計概念簡介 魏天君 2018/12/3.
第9章 類別圖與物件圖 9-1 類別圖與物件圖的基礎 9-2 類別圖的符號 9-3 類別關係 9-4 物件圖 9-5 繪製類別圖與物件圖
软件建模与UML.
第九單元 Classes and data abstraction I
7-1 互 動 7-2 順序圖 7-3 合作圖 7-4 順序圖的個案說明 7-5 合作圖的個案說明
UML类设计工具 任课老师:黄武 上午2时50分 10.
UML介绍.
C/C++/Java 哪些值不是头等程序对象
两种不同类别的软件: 功能预定义软件;用户驱动的软件。他们对软件工程方法有不同的需求
類別與物件 I (Classes and Objects I)
UML语言.
管理信息系统 第九章 面向对象的系统开发方法.
JAVA 编 程 技 术 主编 贾振华 2010年1月.
软件测试 (四)静态测试与动态测试.
第6章 資料庫設計與實體關聯模型 6-1 資料庫設計的基礎 6-2 實體關聯模型 6-3 建立實體關聯圖 6-4 實體關聯圖的常見錯誤
第二章 Java基本语法 讲师:复凡.
第13章 設計模型 13-1 再談物件導向設計 13-2 建立互動圖 13-3 建立狀態機圖 13-4 設計模型的類別圖
第6章 使用案例圖 6-1 使用案例圖的基礎 6-2 使用案例圖的符號 6-3 動作者與使用案例的關係 6-4 繪製使用案例圖
ER Model.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第二章 資訊系統開發模式.
課程報告 使用開放原始碼工具實作軟體產品線方法
Object-Oriented Programming in C++ 第二章 类和对象
第6章 面向对象开发的 分析与设计.
第二章 Java语法基础.
Review 1~3.
第二章 Java基本语法 讲师:复凡.
UML ISKM Lab.
OOA/OOD UML RUP Architecture Pattern MDA
面向对象建模 对象(object) 对象具有的含义: 现实世界中某个具体的物理实体或概念在计算机逻辑中的映射和体现。 在现实世界中:
JAVA 程式設計與資料結構 第三章 物件的設計.
判斷(選擇性敘述) if if else else if 條件運算子.
輸出執行結果到螢幕上 如果要將執行結果的文字和數值都「輸出」到電腦螢幕時,程式要怎麼寫? class 類別名稱 {
第二章 Java基本语法 讲师:复凡.
Presentation transcript:

第4章 物件導向分析與設計簡介 4-1 物件導向的軟體系統開發 4-2 物件導向分析與設計 4-3 UML的物件導向分析與設計 4-4 使用SIM執行UML塑模

4-1 物件導向的軟體系統開發 4-1-1 傳統的軟體系統開發 4-1-2 物件導向的軟體系統開發 4-1-3 為什麼使用物件導向的軟體系統開發

4-1-1 傳統的軟體系統開發-說明 傳統的軟體系統開發是將資料和操作分開來思考,著重於如何找出解決問題的程序或函數,即演算法。例如:一家銀行的客戶甲擁有帳戶A和B兩個帳戶,客戶甲在查詢帳戶A的餘額後,從帳戶A提出1000元,然後將1000元存入帳戶B。傳統應用程式開發建立的模型,如下圖所示:

4-1-1 傳統的軟體系統開發-函數呼叫 在主程式main()是一序列的函數呼叫,首先呼叫getBalance()函數查詢帳戶A的餘額,參數是帳戶名稱,然後呼叫withdraw()函數從帳戶A提出1000元後,呼叫deposit()函數將1000元存入帳戶B,如下所示: getBalance(A); withdraw(A, 1000); deposit(B, 1000);

4-1-2 物件導向的軟體系統開發-說明 物件導向的軟體系統開發是將資料和操作一起思考,其主要工作是找出參與物件和物件之間的關係,並且透過這些物件的通力合作來解決問題。 例如:針對上一節相同的銀行存提款問題,使用物件導向軟體系統開發建立的模型,如下圖所示:

4-1-2 物件導向的軟體系統開發-物件集合 物件導向軟體系統開發因為是將資料和操作一起思考,所以帳戶物件除了餘額資料外,還包含處理帳戶餘額的相關方法:getBalance()、withdraw()和deposit()方法,如下圖所示:

4-1-3 為什麼使用物件導向的軟體系統開發- 說明 物件導向的軟體系統開發可以輕鬆擴充現有系統來建立出大型的軟體系統,不同於傳統軟體系統開發建立的系統,當成長到一定尺寸後,就會快速增加系統的複雜度,讓開發者很難了解、撰寫、維護和擴充軟體系統。 換句話說,相同尺寸的大型軟體系統如果使用物件導向方法,將比傳統方法建立的軟體系統來的容易了解、撰寫、維護和擴充。

4-1-3 為什麼使用物件導向的軟體系統開發- 原因 對應真實世界的物件:物件導向軟體系統是模擬真實世界的物件,而不是內部的資料結構,開發者可以很容易了解和維護別人建立的軟體系統。 資訊隱藏(Information Hiding):物件導向軟體系統是一個物件集合,每一個物件包含資料和處理資料的函數,將實際處理的資料隱藏起來,稱為封裝(Encapsulation)。當我們升級或維護軟體系統時,更改的物件是獨立單位,並不會影響到軟體系統的其他部分。 軟體元件的模組(Modularity):每一個物件都是可重複使用的軟體元件,如同電腦硬體的隨插即用(Plug and Play),將物件一一插入,就可以組合成軟體系統。不只如此,我們還可以擴充軟體元件的物件,輕鬆使用在其他專案來快速開發軟體系統。

4-2 物件導向分析與設計 4-2-1 物件導向分析 4-2-2 物件導向設計 4-2-3 物件導向程式設計

4-2 物件導向分析與設計-說明 物件導向程式設計是一種更符合人性化的程式設計方法,它是使用物件來模擬現實生活的世界,因為我們本來就是生活在物件的世界,思考模式也是遵循著物件導向方式。 請注意!物件導向分析與設計的分野並不十分清楚,因為使用的方法論不同,系統開發者可以自行依需要或實際情況來決定其範圍,在這一節筆者區分物件導向分析和設計的目的只是為了教學上的考量。 筆者準備使用學生選課的一個簡單實例來說明物件導向分析、設計與程式設計的基本過程,在本書後各章節筆者會進一步說明物件導向分析、設計和搭配各種UML圖形建立的模型。

4-2 物件導向分析與設計-問題 學生選課問題的描述 學生在輸入學號進入系統後,顯示學生可選的課程清單,學生在選擇指定課程後,系統檢查該課程是否已滿,如果未滿,就註冊該課程,並且繼續選課,直到學生結束選課為止。

4-2-1 物件導向分析-說明 物件導向分析(Object-Oriented Analysis,OOA)強調如何從問題領域(Problem Domain)的描述建立使用案例模型(Use Case Model),然後識別出物件,在抽象化成類別後建立領域模型(Domain Model),最後指定類別責任來建立概念模型(Conceptual Model)。

4-2-1 物件導向分析-主要步驟 在物件導向分析階段並不用考量實作細節,我們主要是找出系統功能和服務,以便能夠作出對的事情。事實上,物件導向分析就是在回答下列問題,如下所示: 軟體系統能做什麼事? 在軟體系統中有哪些類別? 每一個類別負責什麼? 上述三個問題對應物件導向分析的三個主要步驟:建立使用案例模型(第1個問題)、建立類別(第2個問題)和指定責任(第3個問題)。

4-2-1 物件導向分析- 建立使用案例模型(使用案例圖) 在需求階段找出系統需求的功能與服務後,我們就可以建立使用案例模型(Use Case Model),包含使用案例圖(Use Case Diagram)和使用案例規格(Use Case Specification)。使用案例圖是使用圖形化表示從問題領域擷取的系統功能,例如:學生選課的使用案例圖,如下圖所示:

4-2-1 物件導向分析- 建立使用案例模型(使用案例規格) 例如:【選課】使用案例的使用案例規格,如右所示:

4-2-1 物件導向分析- 建立類別 在建立類別(Creating Classes)步驟是使用清單方式列出系統所有可能的物件,然後將它抽象化成類別,稱為候選類別(Candidate Classes)。在作法上,我們可以從使用案例規格描述中,一一識別出可能的物件後,再抽象化成類別,在第10章有進一步的說明。 從候選類別的清單中,我們可以選出系統真正需要的類別,刪除哪些不屬於系統的類別(可能只是屬性)。例如:從學生選課問題可以找出學生(Student)、課程(Course)、選課(Class)和註冊(Registration)4個類別來建立領域模型的類別圖。

4-2-1 物件導向分析- 指定責任(說明) 在指定責任(Assigning Responsibilities)步驟是指定類別的責任,即類別主要的功能與服務,並且列出需要哪些類別共同合作才能完成指定的責任,也就是類別之間的關係。 在作法上,我們可以使用CRC卡完成此步驟的工作,CRC卡是Kent Beck和Ward Cunningham發展的技術,CRC代表類別(Class)、責任(Responsibilities)和合作(Collaborators)。

4-2-1 物件導向分析- 指定責任(CRC卡) 例如:學生選課4個類別的CRC卡,如下圖所示:

4-2-1 物件導向分析- 指定責任(概念模型的類別圖)

4-2-2 物件導向設計-說明 物件導向設計(Object-Oriented Design,OOD)是進一步決定類別屬性、行為和類別關係的細部設計,以便在實作時能夠將事情做對,其最後建立的設計結果是設計模型(Design Model),設計模型是一個已經完成到足以實作成程式碼的模型。

4-2-2 物件導向設計-主要步驟 事實上,物件導向設計主要是在回答下列問題,如下所示: 如何保證類別已經知道它所需知道的所有資訊? 類別如何處理其指定的責任? 類別如何在系統之中進行溝通? 上述三個問題是物件導向設計的二個步驟:指定屬性與行為(前2個問題)和類別關係(最後1個問題)。

4-2-2 物件導向設計-指定屬性與行為 當進入此步驟時,相信每一個類別都已經指定責任和合作關係,所以指定屬性與行為(Assigning Attributes And Behaviors)步驟是將指定的責任與合作轉換成詳細類別屬性的變數和行為的方法,通常一個分析階段的功能可能轉換成1至多個設計行為,即設計方法。 在作法上,我們可以使用UML循序圖(Sequence Diagram)和通訊圖(Communication Diagrams)等互動圖來進一步分析責任與合作關係。

4-2-2 物件導向設計- 指定類別關係(說明) 在指定類別關係(Assigning Relationships)步驟的工作是指定類別之間更詳細的關係,包含:Is-a、Has-a或Part-Of關係,詳見第2-4-3節的說明。 最後,我們可以更新概念模型來建立設計模型(Design Model)的類別圖。

4-2-2 物件導向設計- 指定類別關係(設計模型的類別圖)

4-2-3 物件導向程式設計-說明 物件導向程式設計(Object-Oriented Programming,OOP)是使用物件導向程式語言C++、C#和Java 等,將設計模型的類別圖轉換成實作的程式碼,也就是建立實作模型(Implementation Model)。

4-2-3 物件導向程式設計-範例1 class Registration { private Courses[] courses; private Student student; public boolean checkId() { return false; } public Courses selectCourse() { return null; } } class Student { private int stdId; private Class class; public int getId() { return 0; } public Class getClass() { return null; }

4-2-3 物件導向程式設計-範例2 class Courses { private int c_no; private int c_name; private int c_credit; public boolean isAvailable() { return false; } } class Class { private Student student; public void registerCourse(Courses c_no) { } public int getNumOfClass() { return 0; }

4-3 UML的物件導向分析與設計 4-3-1 UML與物件導向分析與設計 4-3-2 UML塑模過程的範例

4-3-1 UML與物件導向分析與設計- UML塑模過程 Rational統一流程的主要特點是使用案例驅動(Use-Case Driven),以UML圖形來說,就是建立使用案例圖來啟動物件導向分析與設計過程,我們可以稱之為UML塑模過程,如下圖所示:

4-3-1 UML與物件導向分析與設計- UML塑模過程說明1 需求擷取:我們需要找出使用者的真正需求,也就是系統提供的功能與服務。 建立使用案例模型:以UML使用案例圖來描述從問題領域擷取的系統需求,然後寫出使用案例圖主要使用案例的描述和情節(Scenarios),也就是使用案例的詳細故事。我們可以使用UML活動圖描述流程來完成使用案例模型的建立。 定義概念模型:在此步驟定義概念模型的類別圖,這是一種簡化的類別圖。

4-3-1 UML與物件導向分析與設計- UML塑模過程說明2 定義設計模型:在此步驟是建立設計模型的類別圖,我們可以從循序圖和通訊圖找出類別關係、屬性和行為,然後更新概念模型建立設計模型的類別圖。

4-3-1 UML與物件導向分析與設計- UML塑模過程與物件導向分析與設計 UML塑模過程是一種使用UML圖形來執行物件導向分析與設計的過程。至於在UML塑模過程的哪些步驟是物件導向分析?哪些步驟屬於物件導向設計?如下圖所示:

4-3-2 UML塑模過程的範例-問題 在這一節筆者準備使用一個簡單實例來說明UML塑模過程。因為物件導向技術的精神是模擬真實世界的東西,所以,筆者準備建立一個模擬電子鬧鐘的軟體程式,如右圖所示:

4-3-2 UML塑模過程的範例-問題說明 電子鬧鐘擁有LCD螢幕顯示時間,提供鬧鈴功能和貪睡裝置,可以調整時間和設定鬧鈴時間。 電子鬧鐘擁有5個操作按鈕,【設定】鈕可以設定時間,按【設定鬧鈴】鈕2秒鐘調整鬧鈴時間,按一下切換是否啟用鬧鈴,加減號鈕調整時間。當鬧鈴響時,按上方【貪睡】鈕,可以貪睡5分鐘。

4-3-2 UML塑模過程的範例-需求擷取 從問題領域(Problem Domain)進行需求擷取,可以定義出系統提供的功能有: 1. 電子鬧鐘系統會讀取時間(Read Time)。 2. 電子鬧鐘系統會設定時間(Set Time)。 3. 電子鬧鐘系統會設定鬧鈴時間(Set Alarm Time)。 4. 電子鬧鐘系統會關閉鬧鈴聲(Cancel Alarm)。

4-3-2 UML塑模過程的範例- 建立使用案例模型(使用案例圖) 在此步驟是繪出使用案例圖來描述參與系統的動作者和系統功能的使用案例,這是以客戶與使用者角度來顯示系統功能,如右圖所示:

4-3-2 UML塑模過程的範例- 建立使用案例模型(使用案例規格) 然後我們可以寫出主要使用案例的詳細描述,稱為使用案例規格(Use Case Specifications)。筆者僅以設定時間(Set Time)使用案例為例,其使用案例規格如右所示:

4-3-2 UML塑模過程的範例- 建立使用案例模型(UML活動圖)

4-3-2 UML塑模過程的範例-定義概念模型 在這個步驟可以找出系統的類別,我們可以從使用案例規格的描述中找出系統的物件,然後抽象化成類別來建立概念模型,如下圖所示:

4-3-2 UML塑模過程的範例- 建立互動圖(說明)

4-3-2 UML塑模過程的範例- 建立互動圖(循序圖) 例如:設定電子鬧鐘時間的循序圖,如下圖所示:

4-3-2 UML塑模過程的範例- 建立互動圖(狀態機圖) UML狀態機圖可以顯示物件的狀態變化,我們可以透過狀態機圖來進一步分析物件的狀態轉變。例如:設定時間時,LCDDisplay螢幕類別的物件擁有多個閃爍狀態,此物件的狀態機圖,如右圖所示:

4-3-2 UML塑模過程的範例-定義設計模型 在建立概念模型和循序圖等互動圖後,我們就可以從循序圖找出類別屬性和行為的細節來更新概念模型,建立出最後設計模型的類別圖,如下圖所示:

4-4 使用SIM執行UML塑模 Software Ideas Modeler(SIM)塑模工具可以幫助我們執行UML塑模,因為在同一個SIM專案可以建立多個模型,以不同觀點來檢視系統,而且在每一個模型之下,可以包含多個描述此模型的UML圖形。 基本上,我們可以使用兩種方式來執行UML塑模,如下所示: 在SIM專案分別建立使用案例模型、概念模型(或分析模型)和設計模型。 在SIM專案使用UML的4+1觀點,替每一個觀點建立模型。

End