架構(gòu)師01:架構(gòu)設(shè)計(jì)的 UML 圖形思考(Graphic Thinking)

目錄

目錄

一、建模與圖形思考

在項(xiàng)目正式 Coding 之前,架構(gòu)師(Architect)的工作主要有兩個(gè)方面:創(chuàng)意設(shè)計(jì)人際溝通。如何去完成這兩部分內(nèi)容呢?答案就是:UML 圖。

圖片來源于維基百科

借助 UML 圖形,架構(gòu)師可以對整個(gè)項(xiàng)目的架構(gòu)或者框架進(jìn)行創(chuàng)意設(shè)計(jì)。通過圖形建模將內(nèi)含的基本概念和關(guān)系表達(dá)出來。在溝通的時(shí)候也可以通過 UML 圖形,讓不懂代碼的人也能夠理解整體的設(shè)計(jì),減少溝通的成本。

所以,對于架構(gòu)師來說,其圖形繪制能力和思考能力越好,其創(chuàng)意設(shè)計(jì)與人際溝通能力就越好。

二、UML建模工具

Astah Professional:Astah Professional(原名JUDE)是UML建模工具中,最具有簡潔設(shè)計(jì)、輕便簡單、易學(xué)好用的。Astah 功能強(qiáng)大,支持UML2.x中的圖表(Diagram),包括:

  • Class Diagram(類別圖)
  • Use Case Diagram(用例圖)
  • Statemachine Diagram(狀態(tài)機(jī)圖)
  • Sequence Diagram(順序圖)
  • Activity Diagram(活動(dòng)圖)
  • Communication Diagram(通信圖)
  • Component Diagram(模塊圖)
  • Deployment Diagram(布署圖)
  • Composite Structure Diagram(組合結(jié)構(gòu)圖)

官方網(wǎng)站:http://astah.net/

可以下載一個(gè)免費(fèi)小區(qū)型(Community)版本來使用。

三、繪制UML類別圖:表達(dá)<基類/子類>

下載安裝好 Astah 后,我們來嘗試畫一下類別圖,看看在類別圖中,如何表達(dá)基類、子類的關(guān)系。

  • step1:啟動(dòng) Astah ,在菜單欄中選擇<Diagram>,在出現(xiàn)的下拉框中選擇Class Diagram
創(chuàng)建類別圖

選擇后,界面會(huì)出現(xiàn)一個(gè)空白的類別圖,我們將在上面繪制我們需要的 Class。

新建的類別圖

在空白的類別圖上方,有一排類別圖的元素(Element),簡稱「圖素」,如下:

Element
  • step2:在元素列表中,我們選中第二個(gè)圖素,然后移動(dòng)鼠標(biāo)到圖表里面,按下鼠標(biāo)左鍵,就會(huì)在圖標(biāo)中出現(xiàn)一個(gè)類別元素;
選中類別元素
點(diǎn)擊鼠標(biāo)左鍵,生成一個(gè)類別元素

假設(shè)這個(gè)類別元素是 Android 里面的 Activity 。

基類:Activity

tips:如果想要修改類別元素的背景顏色。可以右鍵,選中Set Color,然后選擇自己喜歡的顏色就行。

Set Color

讓我們再畫一個(gè)類別元素,名叫MyActivity

2019-08-08_111738.jpg
  • step3:建立 Activity 和 MyActivity 之間的繼承關(guān)系。在元素列表中,選中Generalization,然后將鼠標(biāo)移動(dòng)到 MyActivity 上,點(diǎn)擊左鍵,再將鼠標(biāo)移動(dòng)到 Activity上,點(diǎn)擊左鍵,即可完成;
選中Generalization
建立繼承關(guān)系

四、繪制UML類別圖:表達(dá)接口(Interface)

對于架構(gòu)師而言,接口(Interface)的角色比類(Class)來得重要多了。在上一小節(jié)中,我們學(xué)些了繼承(extends)關(guān)系的表達(dá),在這一小節(jié),我們來學(xué)習(xí)一下實(shí)現(xiàn)(implements)關(guān)系如何表示。

我們以 Activity 實(shí)現(xiàn) OnClickListener 接口為例:

public class MyActivity extends Activity implements OnClickListener {
  ......
}
  • step1:在元素列表中選中接口圖素,然后移動(dòng)鼠標(biāo)到類別圖的空白位置,點(diǎn)擊鼠標(biāo)左鍵創(chuàng)建一個(gè)接口元素,取名叫OnClickListener;
選中<Interface>圖素
創(chuàng)建一個(gè)接口元素
  • step2:為 OnClickListener 接口創(chuàng)建一個(gè)注釋 <Note>;
選中<Note>

在<Note>里面聲明一下接口中的抽象方法:

聲明onclick方法
  • step3:選中 <NoteAnchor> 圖素將注釋和接口連接起來;
選中 <NoteAnchor>
將注釋和接口連接起來
  • step4:表達(dá) Class 與接口之間的關(guān)系。選中 <Association>圖素,將 MyActivity 和 OnClickListener 連接起來;
選中<Association>圖素
連接 MyActivity 和 OnClickListener

在 MyActivity 中聲明一下實(shí)現(xiàn)的 onClick 方法:

2019-08-08_145315.jpg
2019-08-08_145722.jpg

當(dāng) MyActivity 實(shí)現(xiàn)了 OnClickListener 接口以后,其它類就能通過此接口來調(diào)用 MyActivity 里的 onClick() 函數(shù):

public class MyActivity extends Activity {
@Override public void onCreate(Bundle icicle) {
  super.onCreate(icicle);
  setContentView(R.layout.main);
  Button btn = new Button(this);
  btn.setText("OK");
  btn.setBackgroundResource(R.drawable.heart);
  btn.setOnClickListener(this);
  setContentView(button);
}

上述代碼表示了頁面中有一個(gè) Button,該 Button 調(diào)用了 onClick 方法:

2019-08-08_165235.jpg

那么 onClick 方法調(diào)用的順序是怎樣的呢?下面,我們來畫一畫。

首先,選中<Association>圖素,將 Button 和 OnClickListener 接口連接起來,注意連線的時(shí)候,是從 Button 到 OnClickListener :

2019-08-08_171558.jpg

然后在連接線處點(diǎn)擊右鍵,選擇Navigation -> Navigable。然后我們就可以看到,原來的直線已經(jīng)帶上了箭頭,箭頭的方向指向被調(diào)用方。

2019-08-08_171957.jpg
2019-08-08_172259.jpg

我們可以給線改成其他顏色,這樣更加清晰:

2019-08-08_172800.jpg

OnClickListener 則會(huì)去調(diào)用 MyActivity 中的 onClick() 方法:

2019-08-08_172721.jpg

我們可以在線上標(biāo)記出方法名:右鍵,選項(xiàng) Set Name,填入 onClick():

Set Name
2019-08-08_173139.jpg

這樣,我們就把實(shí)現(xiàn)關(guān)系,以及方法調(diào)用的順序給描述清楚了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容