Android Studio中繪制UML類圖介紹

分類:編程 時間:2016-11-08

[摘要:內容提要:本文首要先容UML類圖的觀點,和若何正在android Studio中行使代碼去編寫一個UML類圖,偏偏於新腳背。 效果 比來最先瀏覽項目源碼,從個中一個模塊最先看,若何怎樣大項目]

內容概要:本文主要介紹UML類圖的概念,以及如何在Android Studio中利用代碼來編寫一個UML類圖,偏於新手向。

動機

最近開始閱讀項目源碼,從其中一個模塊開始看,奈何大項目中的一個模塊,對於萌新而言,也太過於復雜。類和類之間的繼承,接口的定義及回調時機,各種設計模式下的邏輯跳轉。。。隨著代碼不斷跟蹤,回過頭來已不知身處何處。因此想著,能把大致的類圖框架繪制出來,在此基礎上學習,無論是幫助自己理清邏輯,還是對於講來給他人講解都大有幫助,那麽,開始UML吧!

UML介紹

統一建模語言(英語:Unified Modeling Language,縮寫 UML)是非專利的第三代建模和規約語言。UML是一種開放的方法,用於說明、可視化、構建和編寫一個正在開發的、面向對象的、軟件密集系統的制品的開放方法。

UML類圖基礎

首先需要說明的是,UML可以幹很多事,畫各種各樣的邏輯圖,這裏只關心它在類圖中的使用。

下圖是一個典型的類圖,包括類名,類中有的屬性和方法,也展現了響應的訪問級別(雖然不是必需的):

Alt pic

當多個類圖放置在一起時,通過各種連接線將類圖之間的關系表示出來,就表達出了我們需要的類的結構信息,典型如下圖:

Alt pic

上圖每個類做了簡化,只體現出其類名,我們重點關註的是類和類之間的連接。 圖中有6中連接線,一般可以表達我們常見的類和類之間的關系。 標準的連接線內涵的定義可見此:http://design-patterns.readthedocs.io/zh_CN/latest/read_uml.html 這裏我結合網上的說明,簡化一下表達而更好的用於Java類圖當中。

Alt pic 空心箭頭實線: 表示類A繼承於類B

Alt pic 空心箭頭虛線:表示小汽車和自行車實現了“車”這個接口

Alt pic 帶方向的實線: 表示A中具有B這個成員變量

Alt pic 帶方向的虛線:表示A中的一般方法需要B作為傳入參數

Alt pic 空心棱形實線: 表示B中的構造方法(或set方法)需要A作為傳入參數

Alt pic 實心棱形實線: 表示B中構造函數中將A進行了實例化

OK,六種基本線的涵義大致如上,可能有偏差,具體還是以UML的定義為準,這裏只是為了更好的理解和使用。

UML類圖的繪制

Talk is easy, show me the code.

繪制UML類圖的工具有很多,在線的、本地的、收費的、免費的。本文中使用的繪制UML類圖的,是PlantUML,這實際上是一個java類庫,能夠將代碼轉化成UML類圖。 因此我們繪制UML的過程,實際上就是一個編寫代碼的過程,相比於拖動控件,更為適合程序員?。? 在Android Studio中,需要做的準備有:

  • 在file --> settings --> plugins中搜索UML,搜索結果中安裝plantUML插件,重啟AS;
  • 安裝plantUML繪圖的依賴庫,大名鼎鼎的貝爾實驗室開發的一個工具包:Graphviz;

詳細的安裝請參考:http://blog.csdn.net/u013831257/article/details/50118461

PlantUML的使用

先來一幅圖看看效果:

Alt pic

上圖就是利用PlantUML代碼編寫的UML類圖。實際上,PlantUML的語法非常簡單,和Markdown語法有的一比。 先貼代碼,然後分析:

Fragment <|-- BillMainFragment
class BillMainFragment{
    +{static}CategorySelectorState
    +{static}CategorySelectorChangeEvent
    #ViewPager;
    #DataSelectView;

}
ViewPager <--> DataSelectView
CategorySelectorState --> BillModule

BillMainFragment --> MonthPagerAdapter
BillMainFragment --> YearPagerAdapter
BillMainFragment --> CustomPagerAdapter

CalendarModel <|.. MonthPagerAdapter
CalendarModel <|.. YearPagerAdapter
CalendarModel <|.. CustomPagerAdapter

MonthPagerAdapter --|> FragmentStatePagerAdapter
YearPagerAdapter --|> FragmentStatePagerAdapter
CustomPagerAdapter --|> FragmentStatePagerAdapter

講道理,自己對著代碼和類圖看看就能明白,這裏大概總結一下:

  • (“>")代表方向箭頭,("--")代表實線,("..")代表虛線,("|>")代表封閉的空心箭頭,(”*“)代表實心棱形,(”o“)代表空心棱形
  • 箭頭具有方向行,代碼中的箭頭方向和類圖中的會保持一致
  • 兩端都可以有箭頭或者其他標誌,可以自由組合,試試就清楚
  • 可以定義類,用class關鍵字;也可以不定義直接使用
  • 相同名字的類會被認為是同一個
  • 可以用+、#、-、等來定義一個類中的訪問控制
  • 代碼中的先後順序和繪制圖中的順序沒有必然聯系
  • 更多的還是要參看plantUML的語法,本文中沒有使用到更多的語法,附件裏有plantuml的語法書

    PlantUML_Language_Reference_Guide.pdf

總結

內容不多,希望提供一個指引作用,要了解的更多還是使用一下就好。使用代碼生成的好處是能更理解類之間的關系,但是壞處是當類關系復雜時,畫出的UML類圖不能排版, 特別亂。

工欲善其事,必先利其器。

畫好UML類圖後,再去看源碼,再也不怕迷路了。

修改1

發現更簡單的編寫方式,class A extends B implements C plantUML支持這種寫法!可以自動繪制類A、類B、接口C並生成連接關系!


Tags: Android 大項目 連接線 英語 接口

文章來源:


ads
ads

相關文章
ads

相關文章

ad