1. 程式人生 > >Java 大黑話講解設計模式 -- UML類圖

Java 大黑話講解設計模式 -- UML類圖

目錄

  • 1、啥是UML類圖?
  • 2、UML類圖有啥用?
  • 3、正式理解UML類圖
  • 4、使用idea畫第一個UML類圖
  • 5、類之間的關係圖【必須牢記】
  • 6、類之間的關係
    • 6.1、依賴
    • 6.2、泛化
    • 6.3、實現
    • 6.4、關聯
    • 6.5、聚合
    • 6.6、組合
  • 7、簡單總結類之間的六種關係

前言
關於UML類圖的這篇文章,我覺得把它放在設計模式專欄的篇首最為合適,因為在學習設計模式的時候,經常會遇到有關UML類圖,沒有去專門學過的童鞋肯定會感覺很複雜。學到後面,發現不掌握UML類圖,對設計模式或者某一個框架沒有整體的把控。所以學好UML類圖,你將會更加有自信!

如果你對類之間的依賴、聚合、關聯、組合等關係還很抵制的話,那麼這篇文章就很有必要看了,隨著對設計模式的慢慢深入瞭解,或許你也會發現,UML類圖就顯得格外重要了,是的,UML類圖主要是用來描述類之間的輪廓圖,而類之間的常見關係就是泛化(Generalization)、實現(Realization)、依賴(Dependence)、關聯(Association)、聚合(Aggregation)、組合(Composition)等。類之間關係的強弱:依賴 < 關聯 < 聚合 < 組合 < 泛化(繼承)

@

1、啥是UML類圖?

首先來看一個專業一點的定義【來自維基百科】

UML即統一建模語言(Unified Modeling Language),它是一種開放的方法,用於說明、視覺化、構建和編寫一個正在開發的、面向物件的、軟體密集系統的製品的開放方法。UML展現了一系列最佳工程實踐,這些最佳實踐在對大規模,複雜系統進行建模方面,特別是在軟體架構層次已經被驗證有效。

不得不說,越專業的描述越讓人看得越發懵逼...

其實吧,簡單的說就是UML它也是一種語言,只不過這種語言比較特殊,UML圖有很多種,其中最為重要的就是UML類圖了,所以我們的重心就是UML類圖。uml類圖是一種靜態的結構圖,描述了系統的類的集合,類的屬性和類之間的關係,可以簡化了人們對系統的理解.

2、UML類圖有啥用?

這麼說吧,2019年11月27號,程式設計師宜春給程式設計師老王打電話,兩哥們聊著聊著就聊起了設計模式,宜春說了一大堆關於工廠模式的應用場景舉例,有場景有例項,可謂聲情並茂。然而老王卻是聽的一臉懵逼:你尋思啥啊,說了一大堆 * 話,別嗶嗶了,直接給我畫上UML類圖就得了,一天天的就會裝b,我忍你很久了...

是的,通過上面的這段對話,我相信各位也應該能身臨其境的體會到UML類圖的核心作用了,那我就不再多嗶嗶了...

3、正式理解UML類圖

絕大多數的類圖分為三個部分。部分類圖有五個部分。我們這裡主要講絕大多數的類圖。

UML類圖的構建有很多種工具或者外掛,可以用PowerDesign 來構建 UML圖,當然像我這麼優(懶)秀(癌)的人肯定是用idea自帶的功能自動生成,同時eclipse也是支援的!

4、使用idea畫第一個UML類圖

首先去Setting中設定一下UML類圖的顯示設定,上一節也說過,絕大部分類圖都是前三部分,因此勾選前三個勾就OK了,操作如下:

下面宜春就以身試水用idea來展示一段簡單的UML圖:

首先編寫一段簡單的Weixin類程式碼:

class WeiXin{
    public int a;  //公有的public屬性  ====1
    private int b; //私有的private屬性 ====2
    
    public String WXInfo(){  //成員方法====3
      
    }
}

然後把剛編寫的Weixin類進行如下操作:

這也忒簡單了吧,小白們都笑出聲來了。當然也可以在idea中安裝一些UML圖外掛,這裡就不再闡述了。

5、類之間的關係圖【必須牢記】

UML類圖主要是用來描述類之間的輪廓圖,而類之間的常見關係就是泛化、實現、依賴、關聯、聚合、組合等。表示關係的強弱:依賴 < 關聯 < 聚合 < 組合 < 泛化(繼承)

在講解類之間的關係之前,我們很有必要來了解關係線條圖,這個特別重要簡直就是UML類圖的靈魂【必須牢記】:

6、類之間的關係

有了上面關係線條圖的概念後,我們正式開始來學習類之間的關係!

6.1、依賴

依賴關係是類與類之間最弱的關係,B呼叫A的方法或者屬性,A變化會影響B,反之不成立。依賴差不多就是使用的意思,B使用了A的方法或屬性這個時候我們就稱為B依賴A。說簡單點就是一個類使用了另一個類,這種關係具有臨時性特徵,一個類的改變由於另一類而受影響。

class A{
    public void methodA(){ }
}

class B{
  public A a;

  public void methodB(){
    a.methodA();
   }
}

上面程式碼: B依賴A

依賴小結:
1、依賴就是類中使用到了對方
2、使用可以包括:使用其成員屬性、作為返回型別、作為引數型別、方法中使用到

6.2、泛化

泛化就是繼承,注意一點就是泛化也是依賴關係的一種特例

6.3、實現

實現就是介面的實現,太簡單了,小白都笑了....

6.4、關聯

關聯關係是一種比較強的關係,同樣也是依賴關係的特例,關聯具有導航型:單向關聯、雙向關聯
怎麼理解呢,比如有兩個類,一個Person類,一個身份證IDcard類

單向關聯

class IDcard{
}

class Person{
  private IDcard card;
}

雙向關聯

class IDcard{
  private Person person;
}

class Person{
  private IDcard card;
}

6.5、聚合

聚合關係是一種特殊的關聯關係,聚合關係強調的是整體和部分的關係,其中部分可以脫離整體而存在。比如電視機和遙控器。

class TV{
}

class Telecontrol{  //遙控器類
  private TV tv;
}

6.6、組合

組合關係也是一種特殊的關聯關係,它與聚合關係很像,組合關係強調的也是整體和部分的關係,其中部分不可以脫離整體而存在。有種同生共死的意思!比如:高尚的說就是宜春可以沒有頭髮但是不能沒有腦袋,可憐一點的說就是宜春可以沒有手和腳但是不能沒有腦袋!頭髮、手、腳這些並不是必須要有的,組合強調的是不可分離而可以存在!如果你在大街上看到宜春沒有頭髮,不是很正常嘛?沒有手沒有腳也能接受理解。那你在大街上看到宜春沒有腦袋,這....(這例子舉的我自己都服了)

class Hair{ //頭髮
}

class Head{ //腦袋
}

class YiChun{  //宜春
  Head head = new Head(); //Head與宜春同生共死
  private Hair hair;
}

7、簡單總結類之間的六種關係


1、依賴就是類中使用到了對方。使用:使用其成員屬性、作為返回型別、作為引數型別、方法中使用到
2、泛化就是繼承,泛化也是依賴關係的一種特例
3、實現就是介面的實現,太簡單了,小白都笑了....
4、關聯是一種比較強的關係,是依賴關係的特例,關聯具有導航型:單向關聯、雙向關聯
5、聚合是一種特殊的關聯關係,聚合強調整體和部分的關係,可有可無!
6、組合是一種特殊的關聯關係,與聚合關係很像,同生共死!

類之間關係的強弱:依賴 < 關聯 < 聚合 < 組合 < 泛化(繼承)

如果本文對你有一點點幫助,那麼請點個讚唄,謝謝~

最後,若有不足或者不正之處,歡迎指正批評,感激不盡!如果有疑問歡迎留言,絕對第一時間回覆!

歡迎各位關注我的公眾號,一起探討技術,嚮往技術,追求技術,說好了來了就是盆友喔...