著-架構(gòu)師的uml圖形思考技術(shù)part_第1頁
著-架構(gòu)師的uml圖形思考技術(shù)part_第2頁
著-架構(gòu)師的uml圖形思考技術(shù)part_第3頁
著-架構(gòu)師的uml圖形思考技術(shù)part_第4頁
著-架構(gòu)師的uml圖形思考技術(shù)part_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

蘋的名言:“創(chuàng)造無非就蘋的名言:“創(chuàng)造無非就是把事物聯(lián)系起來”人們?cè)鯓硬拍芨玫亟⑦@類聯(lián)系呢又說:“你不可能在眺望未來時(shí)把生活中的每個(gè)點(diǎn)連接起來只有回顧時(shí)能才連點(diǎn)成。第330分鐘認(rèn)識(shí)UML 繪制UML順序圖(Sequence啟動(dòng)了Astah,在主畫面上點(diǎn)選<Diagram>接著,點(diǎn)選接著,點(diǎn)選<SequenceDiagram>,就會(huì)出現(xiàn)一張空白的順序圖在空白的順序圖上方,有一排順序圖的元素(Element),簡(jiǎn)如下此列元素中的左邊第2(此列元素中的左邊第2(ifeline)圖素,表達(dá)出一個(gè)對(duì)象(或類別)生命周期里攸關(guān)事件(Event)的發(fā)生順序線,簡(jiǎn)稱生命線。當(dāng)你點(diǎn)選此圖素(如上圖所示),然后移動(dòng)鼠標(biāo)(Cursor)到圖表上,按下鼠標(biāo)鍵,就出現(xiàn)一個(gè)生命線圖素,如下這讓你輸入對(duì)象(或類別)的名稱,例如輸入同樣地,還可以再拉的生同樣地,還可以再拉的生命線,如當(dāng)某個(gè)對(duì)象觸發(fā)了事件(Event),發(fā)出訊息(Message),可能另一個(gè)對(duì)象的事件。UML順序圖能表達(dá)這種事件的發(fā)生和連動(dòng)順序,所以又稱為事你可以在圖形上表達(dá)上述的訊息傳遞關(guān)系。例如,選取<Message>圖素先點(diǎn)選了這個(gè)圖素,接先點(diǎn)選了這個(gè)圖素,接著將鼠標(biāo)移動(dòng)到Activity生命線上,按住到myActivity生命線才放開,就出就可以稱了;例如onCreate()這表示了,一開始由Activity發(fā)出訊這表示了,一開始由Activity發(fā)出訊息給myActivity。這個(gè)訊息觸發(fā)的事件去執(zhí)行onCreate()函數(shù)。此函數(shù)執(zhí)行時(shí)又發(fā)出訊息給Activity的事件去執(zhí)行setContentView()函數(shù)。在順序圖里如果對(duì)照到大家所熟悉的程publicclassmyActivity ivityimplementsOnClickListener//上圖就表達(dá)碼里的Activity調(diào)用上圖就表達(dá)碼里的Activity調(diào)用myActivity的onCreate()myActivity執(zhí)行onCreate函數(shù)時(shí)過來調(diào)用Activity的 <誕生訊息>(Create如果在執(zhí)行onCreate()函數(shù)時(shí),會(huì)發(fā)出訊息給其它對(duì)象或類別序圖可以表達(dá)的更詳細(xì)的訊息傳遞。例如,下述的詳細(xì)程序碼順意味onCreate()一個(gè)訊息給LinearLayout類別Step-1.先拉出一個(gè)LinearLayout生命線publicclassmyActivity ivityimplementsOnClickListener//publicvoidonCreate(Bundleicicle)LinearLayoutlayout=new//……..}publicvoidonCreate(Bundleicicle)////……..}Step-2.選取<Message>圖素Step-2.選取<Message>圖素先點(diǎn)選了這個(gè)圖素,接著將鼠標(biāo)移動(dòng)到myActivity生命線的活動(dòng)即onCreate訊息箭頭所指向的長(zhǎng)方形框框圖示上住并拖拉到LinearLayout生命線才放開,就出現(xiàn):就能輸入「誕生對(duì)象就能輸入「誕生對(duì)象稱,例如:new(),如下如果想表達(dá)出LinearLayout對(duì)象誕生之setContentView()此時(shí)可以使用<ReplyMessage>圖素,如下先點(diǎn)選了這個(gè)此時(shí)可以使用<ReplyMessage>圖素,如下先點(diǎn)選了這個(gè)將鼠標(biāo)移動(dòng)到LinearLayout的new()活動(dòng)(長(zhǎng)方形框框里,出現(xiàn)如下按鍵之后,出現(xiàn)如下這就表明了,在誕生Linea這就表明了,在誕生LinearLayout對(duì)象之后,才發(fā)出setContentiew()訊息。這就是順序圖的特色:明確敘述對(duì)象互動(dòng)過程中,訊息傳遞的先后順序。同樣地,可以在拉出一個(gè)圖素來要求誕生Button對(duì)象上圖就表達(dá)了碼里這就表明了,誕生了LinearLayout上圖就表達(dá)了碼里這就表明了,誕生了LinearLayout對(duì)象之后,接著誕生Button對(duì)象;然后才發(fā)出setContentView()訊息。以上,使用一張順序圖表達(dá)Android程序在創(chuàng)建屏幕畫面的布局階段的對(duì)象互動(dòng)和訊息傳遞 范例:使用以上,使用一張順序圖表達(dá)Android程序在創(chuàng)建屏幕畫面的布局階段的對(duì)象互動(dòng)和訊息傳遞順序。接著,下一階段是,用戶在屏幕畫面上觸摸畫面上的按鈕(Button)等動(dòng)作的事件。為了表達(dá)這新階段的事蹤,可以在開啟一張新的順序圖。例如,可先把上述順序圖存盤,稱為一個(gè)模型文件(一個(gè)模型文件可以含有各種圖表)取主畫面上的<Save選項(xiàng)并取名為:SequenceDiagramA,就存檔publicclassmyActivity ivityimplementsOnClickListenerprivateButton//publicvoidonCreate(Bundleicicle)LinearLayoutlayout=new//PlayBtn=new//……..}點(diǎn)選<SequenceDiagramA,按右點(diǎn)選<SequenceDiagramA,按右鍵,并選取SequenceDiagram>就產(chǎn)生一張新的順序出4條生命線出4條生命線再從WMS拉一條訊息箭頭Button在順序圖里(Guard)名稱在順序圖里(Guard)名稱,如下并在左邊屬性表(AttributeTable)里填入條就得到順序圖這意味著,在Android環(huán)境這意味著,在Android環(huán)境里,當(dāng)WMS(WindowManagerService)用戶觸摸(Click)屏幕上所按下的是<PlayBtn>就傳遞訊息給Button。此時(shí),Button又將此onClick訊息傳myActivity去執(zhí)行onClick()函數(shù)。如myActivity,觸在執(zhí)行onClick()函數(shù)時(shí),就發(fā)出Create()訊息給MediaPlayer,要在執(zhí)行onClick()函數(shù)時(shí),就發(fā)出Create()訊息給MediaPlayer,要求生對(duì)象器器準(zhǔn)備就緒,就發(fā)出start()訊息要或影片。上圖表達(dá)了你所熟悉的Android如果,WMS發(fā)現(xiàn)用戶觸摸(Click)屏幕上按鈕,而且所按下的是按鈕;就傳遞onClick()訊息給Button。此時(shí),Button又將此onClick給myActivity,觸發(fā)myActivity去執(zhí)行onClick()函數(shù)。如publicclassmyActivity ivityimplementsOnClickListenerprivateButtonPlayBtn, privateMediaPlayermPlayer=//publicvoidonCreate(Bundleicicle)LinearLayoutlayout=new//PlayBtn=newButton(this); tn=newButton(this); //……..layout.addView(PlayBtn,…); tn,…);}publicvoidonClick(Viewv)switch(v.getId())casemPlayer=MediaPlayer.create(this,R.raw.test_cbr);case102://}}上圖表達(dá)了你所熟悉的上圖表達(dá)了你所熟悉的Android程序從順序圖更能清晰看出用戶、框架、App和MediaPlayer之間的互動(dòng)及事件的傳遞順序。publicclassmyActivity ivityimplementsOnClickListenerprivateButtonPlayBtn, privateMediaPlayermPlayer=publicvoidonCreate(Bundleicicle)LinearLayoutlayout=newLinearLayout(this);PlayBtn=newButton(this); tn=new //layout.addView(PlayBtn,…); tn,…);}publicvoidonClick(Viewv)switch(v.getId())case101:mPlayer=MediaPlayer.create(this,R.raw.test_cbr);mPlayer.start();break;case102://大策略,卻沒有留下"策略思大策略,卻沒有留下"策略思2013!"#"#%&)*+-./01A3(5$(B(5):$%&'(*+-A3;=>@ADE$%FGHB3I<=JK)*$%MNOP(+,BC"#QRSTUVWX&YZ[有緣千里來相會(huì),感謝支持高老師退休后的人生新頁課<<精通B段架構(gòu)設(shè)計(jì)、熟練A段架構(gòu)師思考詳細(xì)請(qǐng)看:高老師博客 9e-!25$%'詳細(xì)請(qǐng)看:高老師博客 第章30分鐘認(rèn)識(shí)UML第章30分鐘認(rèn)識(shí)UML 繪制UML用例圖(UseCase啟動(dòng)了Astah,在主畫面上點(diǎn)選<Diagram>接著,點(diǎn)選<UseCaseDiagram>,就會(huì)出現(xiàn)一張空白的類別圖在空白的類在空白的類別圖上方,有一排類別圖的元素(Element),簡(jiǎn)如下此列元素中的左邊第3個(gè)就是「用例」(UseCase)圖素。當(dāng)你點(diǎn)選此圖素就在圖表里出現(xiàn)一個(gè)用例圖素,如這讓你輸入用例的名這讓你輸入用例的名稱,例如取名為:PlayMP4用例一個(gè)用例(UseCase)就是用戶(User)來使用系統(tǒng)時(shí),該用戶期望系統(tǒng)提供的一項(xiàng)功能或服務(wù)。所以每一個(gè)用例都會(huì)聯(lián)結(jié)到它的用戶,在UML里稱之為啟動(dòng)者(Actor)。這Actor的圖素如下:先點(diǎn)選了這個(gè)<Actor>圖素,接著將鼠標(biāo)移動(dòng)到用例圖里的任何位置替它取個(gè)名稱(例如“User”)按鍵,就出現(xiàn)每一個(gè)用例都會(huì)連結(jié)到它的用戶。為了每一個(gè)用例都會(huì)連結(jié)到它的用戶。為了表達(dá)這項(xiàng)連結(jié)關(guān)系,可選 tion>圖素如下先點(diǎn)選這個(gè)圖素,然后將鼠標(biāo)移動(dòng)到User圖素,按住并拖拉到Play用例,就出現(xiàn)剛才提到過,用戶(User)對(duì)一個(gè)系統(tǒng)服務(wù)的期待ion)就是一例。一般而言,用戶可能會(huì)對(duì)系統(tǒng)懷有多項(xiàng)的期待,此時(shí)該用戶會(huì)連結(jié)到個(gè)用例。比方說,一個(gè)用戶就能在用例圖上表達(dá)器的兩項(xiàng)服務(wù):PlayMP4和StopMP4在這個(gè)PlayMP4用例里,內(nèi)在這個(gè)PlayMP4用例里,內(nèi)含有一段(Loading)」MP4的小服務(wù)而且User能感覺得到它帶來的感受。此時(shí),可以將之獨(dú)立出來成為一個(gè)那么,如何表達(dá)MP4用例「內(nèi)含」有一段Loading小用例呢?此時(shí)選取<Include>圖素如先點(diǎn)選這個(gè)圖素,然后先點(diǎn)選這個(gè)圖素,然后將鼠標(biāo)移動(dòng)Loading小用例MP4用例,按住并拖拉這意味著,Loading小服務(wù)(即用例)是MP4大服務(wù)里的一個(gè)片段且是必要的片段。換句話說,在執(zhí)行PlayMP4服務(wù)的過程中,必然會(huì)Loading小服同理,也可以再將PlayMP4用例里的其它片段(如Playing)獨(dú)立出為另一個(gè)小用例。如這意味著,用戶MP4」的目的(這意味著,用戶MP4」的目的(或期待)系統(tǒng)系統(tǒng)必須提供服務(wù)來滿足用戶的這所提供的服和Playing兩項(xiàng)小服務(wù)。再看這圖說明了,有些情形下,小用例事先已經(jīng)存在了,后來才出現(xiàn)大用例。此時(shí)就能直接從新的大服務(wù)去包含(Include)已存在的小用例,可以減少對(duì)小用例這圖說明了,有些情形下,小用例事先已經(jīng)存在了,后來才出現(xiàn)大用例。此時(shí)就能直接從新的大服務(wù)去包含(Include)已存在的小用例,可以減少對(duì)小用例的重復(fù)描述(Description)。例如,用戶提出一項(xiàng)新用例:LoadMP3端MP3的過MP4是一樣的,于是就讓新的LoadMP3含(Include)已存在的Loading小用例(如上圖)。這意味著,Loading小用例是LoadMP3大用例里的一個(gè)片段,而且是必要的片段。換句話說,在執(zhí)行LoadMP3服務(wù)的過程中,必然會(huì)去執(zhí)行Loading小服務(wù)。上述的<<include>>圖素表達(dá)了兩個(gè)用例之間「必要性」包含關(guān)UML還提供了「可選擇性」的包含關(guān)系,又稱為擴(kuò)充(Extend關(guān)系,以<<Extend>>圖素表示之,如使用這個(gè)圖素,可表達(dá)兩個(gè)用例之間的擴(kuò)充關(guān)系,如下這意味著,SavetoPlayList小用例是Stop這意味著,SavetoPlayList小用例是StopMP4大用例里的一個(gè)片段;然而它并非必要的片段。換句話說,在執(zhí)行StopMP4服務(wù)的過程中,會(huì)視用戶的選擇或系統(tǒng)的狀態(tài)而決定是否去執(zhí)行SavetoPlayList小服務(wù)。就如同去漢堡店買套餐時(shí),正常情形下,不會(huì)執(zhí)行「贈(zèng)送然而有些小孩會(huì)要求贈(zèng)送玩具。如買漢堡特NormalAlternative贈(zèng)送玩 細(xì)說<<Include>>與<<Extend>>圖通常,大用例表達(dá)出正常的情境(NormalScenario),而新附加的小表達(dá)出特殊或例外的程序(AlternativeScenario)后來才出現(xiàn)小用例來做補(bǔ)充。此時(shí)就很輕松地讓小用例去補(bǔ)充(Extend)已存在的大用例,可以減少對(duì)大用例的重復(fù)描述。為了讓你對(duì)<<Include>>和<<Extend>>兩個(gè)圖素有更精致的體會(huì),茲再舉一個(gè)例子來說明此圖說明了,當(dāng)有一部多此圖說明了,當(dāng)有一部多功能咖啡機(jī)時(shí),用戶有三種目的:煮熱水、主溫開水和煮咖啡;就以UML的用例圖表示如上圖也是因?yàn)檫@些功能,顧客才會(huì)買這咖啡機(jī)。其中,煮熱開水和主溫兩項(xiàng)用例,共同擁有一項(xiàng)服務(wù)片段(BoilingWater),就獨(dú)立出來如下接著又發(fā)現(xiàn),在使用煮咖啡功能時(shí),有些用戶不想加糖、有些則不精;于是,使用<<Extend>>圖素表達(dá)范例:用例圖+類別圖范例:用例圖+類別圖+本范例是常見的Android圖、順序圖和用例圖來表示之。一方面展示這三種圖的關(guān)聯(lián)性,另一方面讓你能聯(lián)合使用三種圖來建立一個(gè)有用的模型。首先啟動(dòng)了Astah先點(diǎn)選no_title,并選取<Create><Add先點(diǎn)選no_title,并選取<Create><AddPackage>來誕生一個(gè)新的套接著,點(diǎn)選package0,并選取<CreateDiagram><AddUseCaseDiagram>一個(gè)新的用例圖,如就建立了一個(gè)新就建立了一個(gè)新的空白用例圖,如茲建立一個(gè)簡(jiǎn)單的用例圖從這個(gè)用例里,從這個(gè)用例里,獨(dú)立出一個(gè)小用例再獨(dú)立出另一個(gè)小用用例就是表達(dá)用戶使用App的互動(dòng)(用例就是表達(dá)用戶使用App的互動(dòng)()過程。在Android要規(guī)劃畫面布局(Layout)來擔(dān)任互動(dòng)的接口(UI)布局的規(guī)劃方法如由ac01_layout負(fù)責(zé)兩個(gè)用例的互動(dòng)接口;而pu_layout則負(fù)責(zé)另一個(gè)的互動(dòng)接口。如下圖(ac01_layout布局(pu_layout布局接著,規(guī)畫Activity(ac01_layout布局(pu_layout布局接著,規(guī)畫Activity得子類別來支持上述的畫面布局。最簡(jiǎn)單規(guī)一個(gè) (對(duì)應(yīng))一個(gè)Activity類別也就是,定義兩個(gè)Activity的子類別,各支持一個(gè)畫面布由ac01類別來支持ac01_layout由pickup類別來支持pu_layout現(xiàn)在,就來將這兩個(gè)類別,表達(dá)于類別圖里。先點(diǎn)選package0,并選取Diagram><AddClassDiagram>來誕生一個(gè)新的空白類別圖,如下在這新的類別圖里,呈現(xiàn)出Android框架里的Activity類別里的ac01和pickup兩個(gè)類別并且以<Generation>圖素并且以<Generation>圖素來表達(dá)出:ac01和pickup兩者都是Activity子類別。接下來,并選取<CreateDiagram><AddSequenceDiagram>建立一個(gè)目前在package0里,含有3章圖表,以及6個(gè)已經(jīng)建立的圖素(如下圖)現(xiàn)在,點(diǎn)選User然后現(xiàn)在,點(diǎn)選User然后,將它拖拉到右邊的順序圖里,得到同樣地,繼續(xù)點(diǎn)選ac01然后,將它拖拉到然后,將它拖拉到右邊的順序圖里,得到由于一個(gè)類別可以誕生多個(gè)對(duì)象,這個(gè)ac01類別也能有多個(gè)對(duì)象,各個(gè)對(duì)象都可以有自己的名稱。此時(shí),可以點(diǎn)選ac01生命線,并在左邊屬性表(AttributeTable)里填入對(duì)象名稱。在Android程序里,一個(gè)類別可以支持多的布局(Layout),而布局也是對(duì)象,所以也能將布局名稱視為對(duì)象名稱而述的屬性表里,如下填入布局名稱之填入布局名稱之后同樣地,再拉出pickup圖素,并填入布局名稱如下最后,從圖素表里點(diǎn)選<Lifeline>圖素,如下最后,從圖素表里點(diǎn)選<Lifeline>圖素,如下就可以建立一個(gè)新的生命線,并取名為:SP,其表示 資料暫存機(jī)制。如下圖Android里的現(xiàn)在,來表達(dá)這些對(duì)象的互動(dòng),及現(xiàn)在,來表達(dá)這些對(duì)象的互動(dòng),及其訊息傳遞順用戶啟動(dòng)App程序時(shí),透過Android框架傳送Create()訊息給ac01它去執(zhí)行onCreate()函數(shù)來建立ac01_layout用戶從ac01_layout菜單選取<PickUpAnItem>此刻,ac01透過Android框架發(fā)送startActivity()訊息給觸發(fā)它顯示出pu_layout畫面布局。如觸發(fā)它顯示出pu_layout畫面布局。如用戶從pu_layout選單里挑選一個(gè)選項(xiàng)。PickupsaveItem()訊息給SP,把選項(xiàng)內(nèi)容存入到結(jié)束了pu_layout,返回到ac01_layout機(jī)制里用戶從ac01_layout選取<ShowResult>選項(xiàng)。ac01用戶從ac01_layout選取<ShowResult>選項(xiàng)。ac01息給它取得剛才寄存的選項(xiàng)內(nèi)并顯示于畫以上完成了范例的建模以上完成了范例的建模過程4.3.2落實(shí)為Android應(yīng)用程序碼上述模型,可以輕易落實(shí)為Android的應(yīng)用程序碼,如下////importimport importandroid.os.Bundle;importandroid.view. importandroid.view. importimport import importandroid.os.Bundle;importandroid.view. importandroid.view. importandroid.widget.TextView;publicclassac01 ivitypublic ic PICKUP_ID public ic SHOW_ID +@OverridepublicvoidonCreate(Bundleicicle){}@Override ) .add(0,PICKUP_ID,0,"PickUpAn.add(0,SHOW_ID,1,"Showreturn} Itemitem)switch(item.getItemId()) entin=new ent(ac01.this,pickup.class); r

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論