uml 类图_UML-类图
概念
Class diagram is UML structure diagram which shows structure of the designed system at the level of classes and interfaces, shows their features, constraints and relationships - associations, generalizations, dependencies, etc.類圖是用于描述類、接口這一層次的圖形,他表達(dá)了類、接口的功能、約束以及他們之間的關(guān)系。
使用場景
類圖是適用于面向?qū)ο筮M(jìn)行建模的場景,通過類圖,我們能夠知道我們對系統(tǒng)被抽象成了哪些類,以及他們之間的關(guān)系。因此,類圖適用于使用面向?qū)ο蟮姆椒ㄟM(jìn)行設(shè)計的系統(tǒng)、應(yīng)用。
對于后端來說,一般類圖常用于單一的系統(tǒng)內(nèi),對于微服務(wù)這類分布式架構(gòu)的表達(dá),更適用于組件圖或者部署圖。 對于前端來說,由于 js 的語言特性,以及react、vue 這類組件化框架大行其道,簡單的業(yè)務(wù)場景就不需要使用到類圖了,基于面向?qū)ο蠼7炊沁^度設(shè)計,此時用組件圖表達(dá)即可。但是當(dāng)業(yè)務(wù)復(fù)雜到到一定程度,不得不使用面向?qū)ο髮I(yè)務(wù)層進(jìn)行建模時,類圖就有意義了。
類圖元素
類(class)
類是面向?qū)ο蟮母拍?#xff0c;是描述一系列對象共有的功能和約束 對于類來說,功能即類的屬性以及方法,約束即屬性及方法的可見性。
接口(interface)
接口描述的是功能的合集,一般我們會對功能進(jìn)行分類,同一類別的功能統(tǒng)一放在一個接口里,用接口來描述功能的抽象,以此來增強(qiáng)接口的可復(fù)用性。 比如 cloneable 接口,表述實現(xiàn)了這個接口的類是支持 clone 相關(guān)的行為的。接口和類最大的不同在于接口只描述行為,表達(dá)的是能力,比如 cloneable 接口,表達(dá)的是 clone 的能力,具體怎么 clone (如何實現(xiàn))是在類的范疇,因此接口的抽象程度更高。
因為接口是一個高度的抽象,因此接口需要有實際的載體,也就是類,所以接口是需要配合類來一起表達(dá)才能有實際的含義,因此聲明了接口后,還需要表明誰來實現(xiàn),或者相關(guān)的依賴。
類圖關(guān)系
類的基本元素比較簡單,難點在于關(guān)系的表達(dá)。業(yè)務(wù)之所以復(fù)雜,不是因為業(yè)務(wù)中可以抽象出多個類,而是類之間的關(guān)系,每個類的變動都可能牽扯到其他部分,業(yè)務(wù)行為正是通過這些”牽扯“組成的。因此我們使用面向?qū)ο蠼?#xff0c;核心的目的在于讓關(guān)系變得簡單,簡單意味著可控,業(yè)務(wù)行為便可預(yù)測。
本章節(jié)不會把所有的關(guān)系全部說清楚,只會講到平時開發(fā)過程中常見的 5 種關(guān)系線,他們的含義以及用法。
依賴(dependency)
兩個對象間最弱的關(guān)系,表示一個類的某些行為與另一個類有相關(guān)性。 敲黑板!依賴關(guān)系是行為之間產(chǎn)生關(guān)聯(lián)
A 依賴 B 的三種場景:
class A {function fn(B b) { }function fn2() {B b = new B()}function fn3() {return new B()} }泛化(generalization)
通常指一個類(或接口)繼承另一個類(或接口),并可以增加它自己的新功能的能力。
A 繼承類 B 實現(xiàn) IC 接口:
class A extends B implements IC { }關(guān)聯(lián)(association)
二元關(guān)系,表示對象與對象之間有持有關(guān)系
單向關(guān)聯(lián)關(guān)系,A 關(guān)聯(lián) B :
class A {B b } class B { }雙向關(guān)聯(lián)關(guān)系,A 與 B 互相關(guān)聯(lián):
class A {B b } class B {A a }聚合(aggression)
含義更明確的單向關(guān)聯(lián)關(guān)系,表示群體與個體的關(guān)系。群體解散了,個體可能還會存活。 聚合關(guān)系強(qiáng)調(diào)了對象間生命周期的關(guān)系,聚合的對象是有各自獨立的生命周期的。
class A {B bconstructor(B _b) {this.b = _b}setB(B b) {this.b = b} }組合(composition)
和聚合關(guān)系類似,屬于更明確的關(guān)聯(lián)關(guān)系,表示全體和局部的關(guān)系。全體不存在了,局部也不存在了(或沒有意義了),和聚合的區(qū)別在于聲明周期的不同。
class A {B bconstructor() {this.b = new B()} }小結(jié)
我們講的 5 種關(guān)系,都屬于二元關(guān)系,區(qū)別在于使用的時機(jī)與生命周期的不同。依賴與關(guān)聯(lián)的區(qū)別在于依賴僅是在行為上會使用到另一個類,而關(guān)聯(lián)則是需要持有對象,會影響對象的生命周期。 聚合與組合是提出了更明確含義的關(guān)聯(lián)關(guān)系,區(qū)別在于聚合的對象,生命周期是各自獨立的,組合的對象,生命周期跟隨整體。
要注意的是,關(guān)系是對現(xiàn)實事務(wù)的表達(dá),因此關(guān)系本身也是有語義的。為了方便理解,我們使用對象聲明周期的影響來區(qū)分依賴與關(guān)聯(lián),聚合與組合,但是這個只是充分非必要條件,不能狹隘的通過生命周期來反推關(guān)系
總結(jié)
- UML的類圖是從程序邏輯層面上來表達(dá)系統(tǒng)設(shè)計的方法
- 類圖是一種靜態(tài)圖,描述的是系統(tǒng)的靜態(tài)結(jié)構(gòu)
- 依賴關(guān)系,表達(dá)的是基于對象行為上的關(guān)聯(lián)
- 關(guān)聯(lián)關(guān)系,表達(dá)的是對象間的持有關(guān)系,影響對象的生命周期
- 聚合關(guān)系表達(dá)的是群體和個體的關(guān)系,刪除了群體,可能不影響個體的生命周期
- 組合關(guān)系表達(dá)的是整體和局部的關(guān)系,刪除了整體,局部隨之消亡
思考題
- 企業(yè)與員工是什么關(guān)系?
- 企業(yè)與個人是什么關(guān)系?
- 工廠類與被生成的類是什么關(guān)系?如果是支持緩存的工廠類呢?ML
總結(jié)
以上是生活随笔為你收集整理的uml 类图_UML-类图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1964年诞生的第一代电子计算机,世界第
- 下一篇: python爬虫中文乱码_解决Pytho