UML(統一建模語言)
軟體設計和軟體工程
任何事情都要先想清楚了才能做,軟體開發更是如此!軟體開發過程不可能一上來就開始盲目寫程式碼,寫程式碼之前必須搞清楚下面一些基本問題: 1、要做什麼? 2、做成什麼樣? 3、怎麼去做? 軟體設計: 把軟體開發想清楚的過程. 軟體工程: 對軟體開發全過程進行建模和管理.
模型
模型: 對問題的書面上的無歧義文字或圖形的描述.簡言之, 模型是對現實的簡化. 通過模型, 人們可以瞭解所研究事物的本質. 最傑出的模型: 地圖
建模: 對現實系統進行適當的過濾, 用適當的表現規則描述出簡潔的模型. 建模是一種深入解決問題的方法.
建模的原則
(1). 選擇建立什麼樣的模型對如何發現和解決問題具有重要的影響。正確的模型有助於提高開發者的洞察力。 (2). 每個模型可以有多種表達方式. 使用者的身份和使用的原因是評判模型好壞的關鍵。 (3). 最好的模型總是能夠切合實際. 模型是現實的簡化,必須保證簡化過程不會掩蓋任何重要的細節。 (4). 孤立的模型是不完整的。
UML
UML(United Modeling Language, 統一建模語言): 是一種基於面向物件的視覺化建模語言. UML 採用了一組形象化的圖形(如類圖)符號作為建模語言, 使用這些符號可以形象地描述系統的各個方面 UML 通過建立圖形之間的各種關係(如類與類之間的關係)來描述模型.
UML 中一共有 10 種圖:
靜態模型圖: 描述系統的靜態結構 類圖**** 物件圖 包圖 元件圖 部署圖
動態模型圖: 描述系統行為的各個方面
用例圖** 時序圖*** 協作圖 狀態圖 活動圖*
UML 中的關係
UML 中的關係主要包括 4 種: 關聯關係(association) 依賴關係(dependency) 泛化關係(generalization) 實現關係(realization)
用例圖
用例圖(Use Case Diagram): 也稱為使用者模型圖, 是從軟體需求分析到最終實現的第一步, 它是從客戶的角度來描述系統功能.
用例圖包含 3 個基本元件: 參與者(Actor), 用例(Use Case), 關係:
參與者(Actor): 與系統打交道的人或其他系統即使用該系統 的人或事物. 在 UML 中參與者用人形圖標表示 用例(Use Case): 代表系統的某項完整的功能. 在 UML 中使 用一個橢圓來表示 關係: 定義用例之間的關係 ------ 泛化關係, 擴充套件關係, 包含關係
用例圖
用例之間的關係----泛化關係
泛化關係: 表示同一業務目的(父用例)的不同技術實現(各個子用例). 在 UML 中, 用例泛化用一個三角箭頭從子用例指向父用例. 以下是某購物網站為使用者提供不同的支付方式
用例之間的關係----包含關係 一個用例可以包含其他用例具有的行為, 並把它包含的用例行為作為自身行為的一部分. 在 UML 中包含關係用虛線箭頭加 “<>”, 箭頭指向被包含的用例
用例之間的關係----擴充套件關係
如果在完成某個功能的時候偶爾會執行另外一個功能, 則用擴充套件關係表示.在 UML 中擴充套件關係用虛線箭頭加 “<>”, 箭頭指向被擴充套件的用例
類圖
1、類圖是面向物件系統建模中最常用的圖. 是定義其他圖的基礎. 2、類圖主要是用來顯示系統中的類, 介面以及它們之間的關係. 3、類圖包含的主要元素有類, 介面和關係. 其中關係有泛化關係,關聯關係, 依賴關係和實現關係. 在類圖中也可以包含註釋和約束.
類的表示法
類是類圖的主要元件, 由 3 部分組成: 類名, 屬性和方法. 在 UML 中, 類用矩形來表示, 頂端部分存放類的名稱, 中間部分存放類的屬性, 屬性的型別及值, 底部部分存放類的方法, 方法的引數和返回型別.
在 UML 中可以根據實際情況有選擇的隱藏屬性部分或方法部分或兩者都隱藏 在 UML 中, 共有型別有 + 表示, 私有型別用 – 表示, 保護型別用 # 表示. UML 的工具開發商可以使用自己定義的符號表示不同的可見性
介面的表示法 介面中包含方法, 但不包含屬性. 在 UML 中介面用一個帶有名稱的圓圈表示, 並且通過一條實線與它的模型元素相連
類之間的關係 ---- 泛化關係
在 UML 中, 泛化關係用來表示類與類, 介面與介面之間的繼承關係. 泛化關係有時也稱為”is a kind of”關係 在 UML 中泛化關係用一條實線空心箭頭有子類指向父類
類之間的關係 ---- 實現關係
在 UML 中, 實現關係用來表示類與介面之間的實現關係. 在 UML 中實現關係用一條虛線空心箭頭由子類指向父類
類之間的關係 ---- 依賴關係
關聯
#include <iostream>
using namespace std;
//依賴(虛線): 一個類是另外一個類的函式引數或者函式返回值
class Car;
class ZhangSan
{
public:
//依賴關係
void GoWork(Car *p)
{
}
Car * fix()
{
}
protected:
private:
};
class Car
{
public:
protected:
private:
};
//關聯(實線) 關聯 張三 有車 一個類 是 另外一個類的成員變數
class AdvZhanSan
{
public:
void GoWork()
{
//m_car->
}
protected:
private:
Car *m_car;
//Car m_car2;
};
void main11()
{
cout<<"hello..."<<endl;
system("pause");
return ;
}
關聯關係的多重性
關聯關係的多重性是指有多少物件可以參與該關聯, 多重性可以用來表達一個取值範圍, 特定值, 無限定的範圍.
類圖練習
汽車和自行車都是交通工具(vehicle). 一輛自行車(bicycle)只歸一個人(person)所有, 但一輛汽車(auto)可歸一個人或兩個人所有. 一個人可能沒有自行車或汽車, 也可能有多輛自行車或汽車. 人分為男人(male)和女人(female). 每個人都有年齡(age)和名字(name). 每輛交通工具都有自己的顏色(color)和商標(brand). 每輛汽車都只有兩個前燈(headlight)和一臺發動機(motor)
時序圖
ATM 使用者成功登陸的時序圖
物件: 時序圖中物件使用矩形表示, 並且物件名稱下有下劃線. 將物件置於時序圖的頂部說明在互動開始時物件就已經存在了. 如果物件的位置不在頂部, 表示物件是在互動的過程中被建立的. 生命線: 生命線是一條垂直的虛線. 表示時序圖中的物件在一段生命週期內的存在. 每個物件底部中心的位置都帶有生命線. 訊息: 兩個物件之間的單路通訊. 從傳送方指向接收方. 在時序圖中很少使用返回訊息. 題目