目錄

一、建模與圖形思考
在項(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;

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

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

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


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

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

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

-
step3:建立 Activity 和 MyActivity 之間的繼承關(guān)系。在元素列表中,選中
Generalization,然后將鼠標(biāo)移動(dòng)到 MyActivity 上,點(diǎn)擊左鍵,再將鼠標(biāo)移動(dòng)到 Activity上,點(diǎ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;


-
step2:為 OnClickListener 接口創(chuàng)建一個(gè)
注釋 <Note>;

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

-
step3:選中
<NoteAnchor>圖素將注釋和接口連接起來;


-
step4:表達(dá) Class 與接口之間的關(guān)系。選中
<Association>圖素,將 MyActivity 和 OnClickListener 連接起來;


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


當(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 方法:

那么 onClick 方法調(diào)用的順序是怎樣的呢?下面,我們來畫一畫。
首先,選中<Association>圖素,將 Button 和 OnClickListener 接口連接起來,注意連線的時(shí)候,是從 Button 到 OnClickListener :

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


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

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

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


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