1、軟件開發與軟件工程
任何事情都必須想清楚了,才能去做!這樣才不會出現很多不必要的麻煩,軟件開發亦是如此。
寫代碼前要想好:想要做什么?做成什么樣?如何去做?
軟件設計就是把軟件開發想清楚的過程;
軟件工程就是對軟件開發進行建模和管理;
所謂模型,就是對現實進行簡化,幫助人們能更好的了解所要研究事物的本質,例如地圖。
建模就是對現實系統進行適當的過濾,用一種適當的表現規則描繪出簡潔的模型,其是一種深入解決問題的方法。
建模的原則有:1)正確的模型
2)使用者的身份和使用場合是評價建模的好壞的關鍵
3)適當的簡潔,而又不掩藏事物的重要的細節。
4)模型不能孤立
建模的作用:將現實世界的問題映射成計算機世界所能理解並解決的問題。
建模的過程:根據需求,用模型表達設計過程,然后映射成軟件實現。
2、UML
UML(United modeling language)是一種基於面向對象的可視化的建模語言,它采用一種形象化的圖形符號作為語言,通過建立的圖形之間的關系來描繪模型。
3、UML的圖和關系
UML共有10種圖:1)靜態模型圖:用來描述系統的靜態結構
類圖、對象圖、包圖、組件圖、部署圖
2)動態模型圖:用來描述系統行為的各方面
用例圖、時序圖、狀態圖、活動圖、協作圖
UML的關系有四種:關聯關系、依賴關系、泛化(相當於C++中的繼承)、實現關系;
(一)用例圖(用戶模型圖)
它是從客戶的角度來描述系統功能。
有三個基本組件:參與者(Actor)、用例(Use Case)、關系;
其中參與者,表示使用該系統的人或者事物,在UML中,用人形表示,用例代表系統某項完整的功能,用橢圓表示;關系:表示用例之間的關系
用例之間的關系有泛化關系、擴展關系、包含關系
泛化關系:表示同一業務目的的不同技術實現;
擴展關系:在完成一個功能時,再執行另外的功能;
包含關系:一個用例可以包含其他用例具體的行為。
(二)類圖
主要是用來顯示系統中的類,接口以及它們之間的關系,其中關系有泛化關系、關聯關系、依賴關系、實現關系。
類是類圖的主要組件,由三部分組成:類名,屬性和方法(函數),其中+號表示公有屬性,-號表示私有屬性,#表示保護屬性;
接口包含方法,不包含屬性。通過一條實線與它的模型元素相連。
泛化關系:表示類與類之間、接口與接口之間的繼承關系。
實現關系:用來表示類與接口之間的實現關系
依賴關系:簡單的理解就是,假設我開車去上班,但是我沒有車,需要借別人的車才能去上班,我跟這個車之間的關系就是依賴關系,對應代碼實現---》就是一個類作為另一個類的函數參數或者函數返回值;
關聯關系:我的理解是,我牛逼了!我自己有車了,不需要借車去上班了,使用自己的車去上班,這時我跟這個車之間的關系就是關聯關系,對應代碼實現---》就是一個類是另一個類的成員變量
1 #include<iostream> 2 using namespace std; 3 //依賴(虛線):一個類作為另一個類的函數參數或者函數返回值 4 5 class Car; 6 class Lin { 7 public: 8 //依賴關系( 9 void work(Car *p) 10 { 11 12 } 13 Car* fix() 14 { 15 16 } 17 protected: 18 private: 19 }; 20 21 class Car { 22 public: 23 protected: 24 private: 25 }; 26 //關聯(實現) 27 class AdvLin { 28 public: 29 void work() 30 { 31 //m_car01->(使用方式) 32 } 33 protected: 34 private: 35 //Car *m_car01; 36 Car m_car02; 37 }; 38 39 void main() 40 { 41 cout << "Hello World!" << endl; 42 system("pause"); 43 return; 44 }
關聯關系中的角色:角色就是關聯關系中一個類對另一個類所表現的職責。例如車是我的,那么我就是車的主人。
關聯關系的多重性是指有多少對象可以參與該關聯, 多重性可以用來表達一個取值范圍, 特定值, 無限定的范圍。例如我又牛逼了,我可以同時擁有多輛車,這就是關聯關系的多重性。
在C++、Java中關聯關系可以是單向的、也可以是雙向的,它們之間是通過成員變量實現的。
-------------------------------------------------------------------------------------------------------------------華麗的分割線------------------------------------------------------------------------------------------------------------------------
ps:繼上次總結UML已經過去半年多了,現在來補上之前停下來的部分.(2018/11/17)
關聯關系中還有聚合和組合兩種關系:
聚合關系:聚合關系是更強的關聯關系,聚合是整體與部分之間的關系,關聯關系涉及的類處於同一個層次上,而聚合關系,兩個類處於不同的層次,一個整體一個部分。(例如,車與引擎、車輪之間的關系)
組合關系:又稱為強聚合,比聚合更強的關聯關系,代表着整體的對象負責代表部分對象的生命周期。(例如,公司和部門的關系)。