產(chǎn)品經(jīng)理必學(xué)UML:類圖
本篇文章主要介紹了UML靜態(tài)視圖中的類圖,包括類圖的概念、用途及相關(guān)元素,供大家一起參考和學(xué)習(xí)。
UML(Unified Modeling Language)又稱統(tǒng)一建模語(yǔ)言或標(biāo)準(zhǔn)建模語(yǔ)言,可以看做用于系統(tǒng)設(shè)計(jì)階段給開(kāi)發(fā)做參考的一種方式,其中很多圖需要用到面向?qū)ο蟪绦虻乃季S。
上圖為產(chǎn)品經(jīng)理經(jīng)常用到的UML圖,包括靜態(tài)視圖(類圖)和動(dòng)態(tài)視圖(用例圖、狀態(tài)圖、順序圖、活動(dòng)圖),其中靜態(tài)視圖主要用來(lái)分析業(yè)務(wù)概念,描述靜態(tài)場(chǎng)景;動(dòng)態(tài)視圖描述業(yè)務(wù)行為,分析動(dòng)態(tài)場(chǎng)景。
本文主要介紹類圖。
一、概念
類圖(Class Diagrame)是描述類、接口、協(xié)作以及它們之間關(guān)系的圖,用來(lái)顯示系統(tǒng)中各個(gè)類的靜態(tài)結(jié)構(gòu)。
類圖包含7個(gè)元素:類、接口、協(xié)作、依賴關(guān)系、泛化關(guān)系、實(shí)現(xiàn)關(guān)系以及關(guān)聯(lián)關(guān)系。
二、用途
- 對(duì)系統(tǒng)的詞匯建模(建立抽象系統(tǒng)詞匯,如班級(jí)、學(xué)生);
- 對(duì)簡(jiǎn)單協(xié)作建模(將系統(tǒng)詞匯中是事物協(xié)同工作的方式可視化和詳述,如班級(jí)和學(xué)生的關(guān)系表示);
- 對(duì)邏輯數(shù)據(jù)庫(kù)模式建模。
三、類圖元素
在類圖中,類用矩形來(lái)表示,分為3個(gè)部分:名稱部分(Name)、屬性部分(Attribute)和操作部分(Operation,也可稱作方法)。
1. 類名稱(ClassName)
類的名稱是一個(gè)文本串,分為簡(jiǎn)單名稱和路徑名稱。簡(jiǎn)單名(single name)即單獨(dú)的名稱不含冒號(hào);路徑名(path name)即用類所在的包的名稱作為前綴。
簡(jiǎn)單名、路徑名
2. 屬性(Attribute)
描述類在軟件系統(tǒng)中代表的事物所具備的特性。UML中類屬性的語(yǔ)法: [可見(jiàn)性]?屬性名 [:類型] [=初始值] [{屬性字符串}],
如【-姓名: string】,其中[]中的部分是可選的。
(1) 可見(jiàn)性
包括共有(Public)、私有(Private)和受保護(hù)(Protected)3種。
共有類型可以被外部查看和使用,用“+”表示;私有類型即不可以從其他類中訪問(wèn)該屬性,用“-”表示;
受保護(hù)類型常與泛化和特化一起使用,用“#”表示。如果沒(méi)有符號(hào),表示沒(méi)有定義該屬性的可見(jiàn)性
(2) 屬性名
由描述所屬類的特性的名詞或名詞短語(yǔ)組成。按約定,單字屬性名小寫(xiě),多個(gè)單詞的話需要合并,且除第一個(gè)單詞之外的其余單詞首字母大寫(xiě),比如className。當(dāng)然,若為中文就不必如此。
(3) 類型
典型的屬性類型有:整數(shù)(int)、布爾型、實(shí)型和枚舉類型。當(dāng)一個(gè)類的屬性被完整定義后,任何一個(gè)對(duì)象的狀態(tài)都由這些屬性的特定值所決定。
(4) 初始值
保證系統(tǒng)的完整性;為用戶提供易用性。
(5) 屬性字符串
關(guān)于屬性的其他信息。
3. 操作(Operation)
類的操作是對(duì)類的對(duì)象所能做的事務(wù)的抽象,相當(dāng)于服務(wù)的實(shí)現(xiàn)。UML中類操作的語(yǔ)法:[可見(jiàn)性]?操作名 [ (參數(shù)表)] [: 返回類型] [{屬性字符串}],如【+查詢( ): 歌曲】,其中[]中的部分是可選的。
(1) 可見(jiàn)性
包括共有(Public)、私有(Private)、受保護(hù)(Proteted)和包內(nèi)公有(Package)4種。
其中公有類型即只要調(diào)用對(duì)象能訪問(wèn)操作所在的包,就可調(diào)用該操作,用“+”表示;私有類型即只有屬于同一個(gè)類的對(duì)象才可以調(diào)用,用“-”表示;
受保護(hù)類型即只有子類的對(duì)象才可以調(diào)動(dòng)父類,用“#”表示;
包內(nèi)公有類型即只有在同一個(gè)包里的對(duì)象才可以調(diào)用,用“~”表示。
(2) 操作名
描述所屬類的行為的動(dòng)詞或動(dòng)詞短語(yǔ)。約定同屬性名。
(3) 參數(shù)表
指一些按順序排列的屬性定義了操作的輸入。定義方式采取“名稱:類型”,多個(gè)參數(shù)用逗號(hào)隔開(kāi)。
(4) 返回類型
絕大部分編程語(yǔ)言只支持一個(gè)返回值,即返回類型至多一個(gè)。
4. 接口(Interface)
接口是指類或組件所提供的、可以完成特定功能的一組操作的集合。接口描述了類或組件的對(duì)外的、可見(jiàn)的動(dòng)作,通常一個(gè)類實(shí)現(xiàn)一個(gè)或多個(gè)接口。
定義看起來(lái)比較枯燥,通俗點(diǎn)說(shuō)接口就像螺絲和螺帽的關(guān)系,是為類制定了一種規(guī)范,是類與類之間的一種約束和協(xié)定。
對(duì)于一些小程序,一般不需要接口,因?yàn)楣δ艿母膭?dòng)對(duì)整體的影響不大;但對(duì)于大的程序,一旦用戶需求對(duì)功能進(jìn)行變動(dòng),而功能之間的耦合度高的話就會(huì)對(duì)整個(gè)程序造成影響,而如果使用接口的話,就能在使用之前就想好它要實(shí)現(xiàn)的全部功能,即功能的封裝。之后需求變化只需要重新寫(xiě)實(shí)現(xiàn)類,同樣其他人只需要調(diào)用接口,不需要知道類的消息。
5. 關(guān)系(Ralationship)
(1) 依賴(Dependency)關(guān)系
表示某一類元以某種形式依賴于其他類元,它表現(xiàn)了這樣一種場(chǎng)景,如下圖,對(duì)于一個(gè)元素(提供者)的某些更改會(huì)影響或提供消息給其他元素(客戶),即客戶以某種形式依賴于提供者。
(2) 泛化(Generalization)關(guān)系
表示一種存在于一般元素和特殊元素之間的分級(jí)關(guān)系,描述了“is a kind of”(是……的一種)的關(guān)系,如汽車是交通工具的一種。在類中一般元素稱為超類或父類,特殊元素稱為子類。
(3) 關(guān)聯(lián)(Association)關(guān)系
表示一組具有共同結(jié)構(gòu)特征、行為特征、關(guān)系和語(yǔ)義的鏈接,是一種結(jié)構(gòu)關(guān)系,指明一個(gè)事物的對(duì)象與另一個(gè)事物的對(duì)象間的關(guān)系。如學(xué)生和大學(xué)的關(guān)系,學(xué)生在大學(xué)里學(xué)習(xí),大學(xué)又包括了很多學(xué)生,所以可以在學(xué)生和大學(xué)之間建立關(guān)聯(lián)關(guān)系。
(4) 聚合(Aggregation)關(guān)系
是一種特殊形式的關(guān)聯(lián)關(guān)系。表示整體與部分關(guān)系的關(guān)聯(lián),簡(jiǎn)單來(lái)說(shuō),就是關(guān)聯(lián)關(guān)系中的一組元素組成了一個(gè)更大、更復(fù)雜的單元。描述了“has? a”的關(guān)系。如大學(xué)和學(xué)院,大學(xué)是由很多個(gè)學(xué)院組成的,因此兩者之間是聚合關(guān)系。
(5) 實(shí)現(xiàn)(Realization)關(guān)系
表示規(guī)格說(shuō)明和其實(shí)現(xiàn)之間的關(guān)系,將一種模型元素和另一種模型元素連接起來(lái),比如類和接口。?如打字員和鍵盤(pán),鍵盤(pán)保證自己的部分行為可以實(shí)現(xiàn)打字員的行為。
四、連接關(guān)系圖形小結(jié)
由于連接關(guān)系之間使用的圖形較為相似,基本由箭頭和直線組成,容易混淆,在此進(jìn)行總結(jié),以便查看。
五、小練習(xí)——簡(jiǎn)易聽(tīng)歌系統(tǒng)類圖
- 用戶與歌手:關(guān)聯(lián)關(guān)系,1個(gè)用戶可能關(guān)注0到n個(gè)歌手;
- 用戶與歌曲:關(guān)聯(lián)關(guān)系,1個(gè)用戶可能播放或者收藏0到n首歌曲;
- 歌曲與歌手:關(guān)聯(lián)關(guān)系,1首歌曲對(duì)應(yīng)至少1位歌手;
- 歌曲與歌曲列表:聚合關(guān)系,1到n首歌組成了1個(gè)歌曲列表;
- 用戶實(shí)現(xiàn)接口注冊(cè)和登錄。
第一次寫(xiě),若有錯(cuò)誤的地方,歡迎批評(píng)指正。后續(xù)會(huì)更新用例圖、活動(dòng)圖等,可關(guān)注等待哦。
本文由 @AugTalk 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來(lái)自Unsplash,基于CC0協(xié)議。
為什么沒(méi)有繼承關(guān)系和復(fù)合關(guān)系?
泛化就可以理解為繼承
問(wèn)題:歌手和歌曲的關(guān)系應(yīng)該更復(fù)雜,一個(gè)歌曲對(duì)應(yīng)至少一位歌手,一位歌手也會(huì)對(duì)應(yīng)多個(gè)歌曲啊
是的,用戶與合區(qū)的關(guān)系應(yīng)該是多對(duì)多,即N-N
是的,用戶與歌曲的關(guān)系應(yīng)該是多對(duì)多,即N-N
給你點(diǎn)贊,沒(méi)有系統(tǒng)學(xué)習(xí)過(guò)UML,在你這邊看到滿滿的干貨,很受用
例子里面的符號(hào)沒(méi)有懂,+ ()
+ 是公有屬性;
– 是私有屬性;
()是方法
數(shù)據(jù)庫(kù)要不你也一起寫(xiě)了吧
你的這些類都是用什么軟件做的,powerdesigner?
visio
這個(gè)內(nèi)容可以放在人人都是技術(shù)經(jīng)理里面
B端產(chǎn)品經(jīng)理就是要會(huì)業(yè)務(wù)建模的
有沒(méi)有人進(jìn)來(lái)說(shuō)句實(shí)話,這圖畫(huà)出來(lái)到底有什么實(shí)質(zhì)性作用?直接列到Excel中不是更快更方便嗎?花這么多時(shí)間不如好好打磨產(chǎn)品方案!
visio畫(huà)很快的
如果你要做數(shù)據(jù)中心的產(chǎn)品,這東西太有用了
有些B端偏底層的產(chǎn)品,技術(shù)不懂業(yè)務(wù)或者業(yè)務(wù)不懂技術(shù),單純一個(gè)版本一個(gè)版本的堆功能,走著走著就走死了
畫(huà)了這個(gè)整個(gè)架構(gòu)會(huì)清晰很多
應(yīng)該說(shuō)后端最喜歡看到這個(gè)了,字段類型,接口都弄好了
很受用 ??