學習目標:
1.理解與掌握物件導向的概念與方法。
2.使用UML。
3.完成物件導向的分析與設計工作。
4.瞭解OO的設計原則及一些典型的設計模式
什麼是物件導向?
- 物件導向(Object-Orientation, 簡稱OO)是一種系統建模技術。
- 物件導向編程(Object-Orientation Programming,簡稱OOP)是按照OO的方法學來開發程式的過程。
- 通過分析系統內對象的互動來描述或建模一個系統。
- 互動的對象最終以類的形式組織。
- OO的方法由三部分組成:過程,標識,規則。
對象
- 是一個客觀存在的、唯一的實體。
- 是物件導向編程過程中分析與解決問題的出發點與基礎。
- 擁有自己的標識、資料與行為。
- 可以簡單或複雜。
- 可以抽象或具體。
- 在OOP中是一個類的動態執行個體。
- 如Student—id,name,age(attribute)
--setName,getName,countScore(methods)
--new Student()
類
- 類是對象的模板。
- 對象通過類執行個體化產生。
- 一個類可以建立多個對象
OOAD
OOAD(Object Oriented Analysis and Design),物件導向的分析與設計。
OOAD是根據OO的方法學,對軟體系統進行分析與設計的過程。
--OOA
分析階段
--OOD
設計階段
定義OOA階段
- 分析階段主要解決以下問題
-- 建立針對業務問題域的清晰視圖。
-- 列出系統必須完成的核心任務。
-- 針對問題域建立公用詞彙表。
-- 列出針對此問題的最佳解決方案。
2.此階段要解決的核心問題是“What to
do?”
定義OOD階段
1.設計階段主要解決以下問題
--
如何解決具體的業務問題。
--
引入系統工作所需的支援元素。
--
定義系統的實現策略
2. 此階段要解決的核心問題是“How to
do?”
OOP的主要特徵
1 .抽象(abstract)
2.封裝(encapsulation)
3.繼承(inheritance)
4.多態(polymorphism)
5.關聯(association)
6.彙總(aggregation)
7.組合(composition)
8.內聚與耦合(cohesion &
coupling)
抽象
- 忽略掉一個對象或實體的細節而只關注其本質特徵的過程。
- 簡化功能與格式。
- 協助使用者與對象互動。
封裝
- 隱藏資料和實現。
- 提供公用方法供使用者調用功能。
- 對象的兩種視圖。
--外部視圖:對象能做的工作。
--內部視圖:對象如何完成工作。
繼承
- 通過存在的類型定義新類型的機制。
- 通常在兩個類型之間存在“is a”或“kind of”這樣的關係。
- 通過繼承可實現代碼重用,另外繼承也是多態的基礎。
如:蘋果“is a”水果。
多態
- 一個名稱,多種形式。
- 基於繼承的多態
- 調用方法時根據所給的對象的不同選擇不同的處理方式。
- 如Football—play(): 使用腳來完成。
Basketball—play(): 使用手來完成。
5.給出一個具體的足球或籃球,使用者自動知道該使用誰的方式去執行play().
關聯
- 對象之間互動時的一種引用方式。
- 當一個對象通過另一個對象的引用去使用另一個對象的服務或操作時,兩個對象之間便產生了關聯
- 如:person使用computer,person與computer之間就存在了關聯關係。
彙總
- 關聯關係的一種,一個對象成為另外一個對象的組成部分。
- 是一種關係較強的關聯。
- 在兩個對象之間存在“has a”這樣的關係,一個對象作為另一個對象的屬性存在,在外部被生產時,可由用戶端指定與其關聯的內部對象。
- 如汽車與輪胎,輪胎作為汽車的一個組成部分,它和汽車可以分別生產以後裝配起來使用,但汽車可以換新輪胎,輪胎也可以卸下來給其它汽車使用。
組合
- 當一個對象包含另一個對象時,外部對象負責管理內部對象的生命同期的情況。
- 關聯關係中最為強烈的一種。
- 內部的建立由外部對象自己控制。
- 如電視機與顯示器。
領域模型
- 領域模型是物件導向的。在物件導向術語中,領域模型也可稱為設計模型。領域模型由以下內容組成:
--具有狀態和行為的域對象
--域對象之間的關係。
域對象之間的關係
- ·關聯(Association)
- ·依賴(Dependency)
- ·聚焦(Aggregation)
- ·一般化(Generalization)
關聯關係
Customer
<---------------------- Order[customer:Customer]
從Order到Customer的多對一單向關聯
Customer[orders:Set]-----------------àOrder
從Customer到Order的一對多單向關聯
Customer[orders:Set]ß------------à Order[customer:Customer]
從Customer到Order的一對多雙向關聯
依賴關係
BusinessService---------àCustomer
BusinessService類依賴Customer類
在BusinessService類中訪問Customer類的方法,
並且構造Customer執行個體。
聚集關係
聚集指的是整體與部分之間的關係,在實體域對象之間很常見。
Person{Set< Hand> hands}<--Hand
Person類與Hand類之間的聚集關係
一般化關係
一般化關係指的是類之間的繼承關係
內聚與耦合
- 內聚:度量一個類獨立完成某項工作的能力。
- 耦合:度量系統內或系統之間依賴關係的複雜度。
- 設計原則:增加內聚,減少耦合(高內聚,低耦合)。
開發過程概述
1.傳統開發過程—瀑布模型
2.統一軟體開發過程(USDP)
傳統開發過程(瀑布模型)
RequirementsàAnalysisàDesignàImplementationàTest
OOAD的開發過程
- 大項目分解為一些子項目
- 使用UML工具
- 統一軟體開發過程是一個迭代、遞增的開發過程。
迭代、遞增的專案生命週期
- 項目是迭代、遞增的。
- 迭代指生命週期中的一個步驟。
- 迭代導致“遞增”或者是整個項目的增長。
- 大項目分解為子項目。
- 在每一個迭代的階段,應該做以下工作
--選擇並分析相關用例
--根據所選架構進行設計
--在組件層次實現設計
--驗證組件滿足用例的需要
6.當一次迭代滿足目標後,開發進入下一個迭代周期。
Inception—start up
Elaboration—refine
Construction—implement
Transition--promotion
7.每一個周期包含一次或多次迭代
8.一個階段的結束稱之為“裡程碑”(milestone)
初始化階段
該階段的增量集中於:
--項目啟動
--建立業務
--定義業務問題域
--找出主要的風險因素
--定義項目需求的外延
--建立業務問題域的相關說明文檔
細化階段
--高層的分析與設計
--建立項目的基礎架構
--監督主要的風險因素
--制訂達成項目目標的建立計劃
構建階段
本階段的增量集中於
--代碼及功能的實現
移交階段
本階段的增量集中於
--向使用者發布產品
--beta測試
--執行效能調優,使用者培訓和接收測試
每一個階段所含工作流程
·每一次遞增都由5部分工作流程組成
--需求與初始分析
--分析
--設計
--實現
--測試
--每一次迭代執行工作流程的深度不同
--早期的迭代在深度上覆蓋初始工作流程,後期迭代在深度上覆蓋後期工作流程。
--80/20原則
迭代、遞增生命週期的優勢
·降低成本
·便於更好地維護項目進度
·便於團隊的協作開發
·便於適應使用者需求的動態變化