學習目標:
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原則
迭代、遞增生命周期的優勢
·降低成本
·便於更好地維護項目進度
·便於團隊的協作開發
·便於適應用戶需求的動態變化