版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、【轉(zhuǎn)】UML建模與Android應(yīng)用程式開發(fā)(上)前言就一個(gè)完整的軟體系統(tǒng)而言,程式碼只是系統(tǒng)(本體)的一個(gè)觀點(diǎn)(View)而已,而模型 (Model)也是系統(tǒng)(本體)的一個(gè)觀點(diǎn)。當(dāng)Android應(yīng)用開發(fā)者來說,若既能從程式碼看應(yīng)用 系統(tǒng),又能從模型看它,就相當(dāng)于人們都有兩只眼睛來看前方的一切事物。一旦發(fā)現(xiàn)兩者有 不一致的情形,就表示兩者可能有所失真(即遠(yuǎn)離本體)了。這樣的訊息,可讓開發(fā)者提前知 道未來開發(fā)路子上,可能發(fā)生的錯(cuò)誤,以便防患未然。同樣地,在模型大觀點(diǎn)里,也含有許 多小觀點(diǎn),例如:l架構(gòu)觀點(diǎn):一般采用UML類別圖(ClassDiagram)l使用觀點(diǎn):一般采用UML用例圖(UseC
2、aseDiagram)l順序觀點(diǎn):一般采用UML順序圖(SequenceDiagram)l狀態(tài)觀點(diǎn):一般采用UML狀態(tài)圖(StatechartDiagram)在本文里,將說明如何就上述的4個(gè)小觀點(diǎn),來構(gòu)成模型大觀點(diǎn),然后再與程式碼觀點(diǎn) 匯合,成為一個(gè)穩(wěn)定可靠、簡(jiǎn)潔高雅的Android應(yīng)用系統(tǒng)。然而,特別留意的是:模型觀 點(diǎn)與程式碼觀點(diǎn)兩者不一定要有明確的先后順序關(guān)系。兩者之間,到底何者先,而何者后, 并非重點(diǎn)。因?yàn)樽詈玫臓顟B(tài)是:在腦海里先兩者并存,先領(lǐng)悟構(gòu)思,然后才畫出UML模型 圖,也寫出程式碼,但都不一定是完美的。隨著兩個(gè)觀點(diǎn)的對(duì)比,發(fā)現(xiàn)不一致現(xiàn)象,就像兩 只眼睛發(fā)現(xiàn)前方物體的呈像不一致時(shí)
3、,兩者自然而然會(huì)逐漸修正(Iterative& Incremental),止于至善。本文范例本文舉一個(gè)簡(jiǎn)單范例:一個(gè)Activity的子類別,以及一個(gè)遠(yuǎn)程的(Remote)的Service子 類別。兩者透過Android的IPC機(jī)制相互溝通。多種UML類別圖呈現(xiàn)各種架構(gòu)觀點(diǎn)所有的模型圖都是人們對(duì)某項(xiàng)事物本體認(rèn)知的心智觀點(diǎn),隨著觀點(diǎn)和抽象的角度之不同 而改變其所呈現(xiàn)之面貌。例如,當(dāng)我們覺得Android框架里的基類(即抽象類)是最重要的, 只要呈現(xiàn)它即可,此時(shí)類別圖就呈現(xiàn)如下:圖1獨(dú)尊Android框架的類別圖如果覺得應(yīng)用子類別也是架構(gòu)里的重要元素,需要與框架里的基類別一起呈現(xiàn)出來,則此時(shí)類別圖
4、就呈現(xiàn)如下:圖2兼具框架與應(yīng)用的類別圖當(dāng)然也有許多人習(xí)慣于獨(dú)尊應(yīng)用子類別,而認(rèn)為不需要呈現(xiàn)幕后的框架基類別,則此時(shí)類別圖就呈現(xiàn)如下:lAJStuto任1目|可回-卜1百|(zhì)個(gè)Ifq|q|:,|上| t|o|t jBindertnySenriceniyAdivilyA圖3獨(dú)尊應(yīng)用子類別的類別圖此外,還有人習(xí)慣于獨(dú)尊介面(即接口),而對(duì)幕后實(shí)作類別視而不見,則此時(shí)類別圖就呈現(xiàn)如下:圖4強(qiáng)調(diào)介面(即接口)的類別圖以上都只強(qiáng)調(diào)架構(gòu)里的元素(如類別和介面),還有人認(rèn)為這些元素之間的互動(dòng)(Interaction)與合作(Collaboration)是非常重要的,需要表現(xiàn)出來此時(shí)類別圖就呈現(xiàn)如下:HI目司間
5、3inder.trari;satOIA.f10 IPCAIBindermyServicemyActiwiy圖5強(qiáng)調(diào)互動(dòng)的類別圖UML用例圖呈現(xiàn)使用觀點(diǎn)類別圖是基于架構(gòu)師的觀點(diǎn),偏向系統(tǒng)的內(nèi)觀(InternalView)。至于用例圖(UseCase Diagram)則是基于使用者(即用戶)的觀點(diǎn),偏向系統(tǒng)的夕卜觀(ExternalView)。許多人堅(jiān)持 需求至上(Requirement-based)的開發(fā)者,非常重視這項(xiàng)UML圖,終究用戶是買家,就行 銷的角度來看,用戶觀點(diǎn)當(dāng)然非常重要啰。例如,針對(duì)上述范例的UML用例圖呈現(xiàn)如下:IBM 回/!旦l!H-!l011 TI-lll-tl-lMtl4
6、-一口一l.olraIplun%s05%sn-lg*M_lIAIng瑁K反、unE-l 塞旺夏本 、反塞、NMIK搖畫*M_lIAIn 旺地篇、wmMemiMlhwi房Kganf*塞旺圳兇獲5Y 他 oeong冊(cè)地底與0垢帳、塞旺S瑁廿曷株H我鼠景屈S瑁廿曷株W回反ttHH夾招坦ISW屆OW函虻S昌usecasemx#myServite:myAtlwiiystopSeiviceOOT旦A圖8Exit用例幕后的活動(dòng)順序圖UML狀態(tài)圖呈現(xiàn)UI畫面的干變?nèi)f化由于Android是屬于事件驅(qū)動(dòng)(Event-Driven)的平臺(tái)系統(tǒng),有許多人主張善用UML狀 態(tài)圖可對(duì)眾多事件分而治之,于是在清晰的狀態(tài)之下
7、,會(huì)執(zhí)行明確的活動(dòng)。例如,下述的畫 面可接受來自Android和用戶所引發(fā)的事件。、回W米曲UML克撈圈際的UI沼古N涓壯、目,幽-111圈A.ffione言knlwZJ八 一= 答蒼EM氧* W告Androidl.na幽9際的UI畫回克撈對(duì)古昏UM L克撈圈IU Java sssss至今天,還是有許多人維持傳統(tǒng)的觀點(diǎn):l畫UML模型圖在先,撰寫程式碼在后。l程式碼是UML模型的實(shí)踐。1UML模型較為抽象,程式碼較為具體。這項(xiàng)傳統(tǒng)觀點(diǎn)并沒有對(duì)與錯(cuò)。但是,近年來,愈來愈多的人們持著新的觀點(diǎn):1UML模型圖與Java程式碼是兩個(gè)同位階的觀點(diǎn)。1兩個(gè)觀點(diǎn)的一致性是確保系統(tǒng)穩(wěn)定可靠、簡(jiǎn)潔高雅的重要途徑
8、。1杰出的Android開發(fā)者應(yīng)該兼具兩個(gè)觀點(diǎn)。經(jīng)過兩個(gè)觀點(diǎn)的互相核對(duì)與逐步修正后,的確呈現(xiàn)出極為完美的程式碼,如下:Android 應(yīng)用程式 Project這包含了 1個(gè)IA.java介面定義檔,及兩個(gè)應(yīng)用子類定義檔:應(yīng)用程式碼一致化的程式碼如下所示:/IA.java 接口packagecom.misoo.pk01;importandroid.os.Binder;importandroid.os.IBinder;importandroid.os.Parcel;importandroid.os.RemoteException;publicinterfaceIA(intf1(intx)throw
9、sRemoteException;publicstaticabstractclassStubextendsBinderimplementsIA(OverridepublicbooleanonTransact(intcode,Parceldata,Parcelreply,intflags)throwsandroid.os.RemoteException(intx二data.readInt();inty二this.f1(x);reply.writeInt(y);returntrue;publicabstractintf1(intx)throwsRemoteException;publicstati
10、cIAasInterface(IBinderobj)(returnnewProxy(obj);/privatestaticclassProxyimplementsIA(privatelBindermRemote;publicProxy(IBinderibinder)(mRemote二ibinder;publicintf1(intx)throwsRemoteException/TODOAuto-generatedmethodstubParceldata = Parcel.obtain();data.writeInt(x);Parcelreply=Parcel.obtain();mRemote.t
11、ransact(0,data,reply,0);returnreply.readInt();packagecom.misoo.pk01;importandroid.app.Service;importandroid.content.Intent;importandroid.os.IBinder;importandroid.os.RemoteException;publicclassmyServiceextendsService(OverridepublicIBinderonBind(Intentintent),publicintmySf1(intx)/privatefinallA.StubmB
12、inder二newIA.Stub()Overridepublicintf1(intx)throwsRemoteException returnmySf1(x);/myActivity.javapackagecom.misoo.pk01;importandroid.app.Activity;importandroid.content.ComponentName;importandroid.content.Context;importandroid.content.Intent;importandroid.content.ServiceConnection;importandroid.graphi
13、cs.Color;importandroid.os.Bundle;importandroid.os.IBinder;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.LinearLayout;importandroid.widget.TextView;publicclassmyActivityextendsActivityimplementsOnClickListener(privatefinalintWC二Linear
14、Layout.LayoutParams.WRAP_CONTENT;privatefinalintFP二LinearLayout.LayoutParams.FILL_PARENT;privateButtonbtn,btn2;privateTextViewtv;privateIAia;privateintstate_var_A=0;publicvoidonCreate(Bundleicicle)(super.onCreate(icicle);if(state_var_A=0)show_layout_01();goto_state_01();privatevoidshow_layout_01()Li
15、nearLayoutlayout二newLinearLayout(this);layout.setOrientation(LinearLayout.VERTICAL);btn二newButton(this);btn.setBackgroundResource(R.drawable.heart);btn.setId(101);btn.setText(Run);btn.setOnClickListener(this);LinearLayout.LayoutParamsparam二newLinearLayout.LayoutParams(120,55);param.topMargin=10;layo
16、ut.addView(btn,param);btn2二newButton(this);btn2.setBackgroundResource(R.drawable.heart);btn2.setId(102);btn2.setText(Exit);btn2.setOnClickListener(this);layout.addView(btn2,param);tv二newTextView(this);tv.setTextColor(Color.WHITE);tv.setText();LinearLayout.LayoutParamsparam2二newLinearLayout.LayoutPar
17、ams(FP,WC);param2.topMargin = 10;layout.addView(tv,param2);setContentView(layout);privatevoidgoto_state_01()(state_var_A=1;bindService(newIntent(com.misoo.pk01.REMOTE_SERVICE),mConnection,Context.BIND_AUTO_CREATE);privateServiceConnectionmConnection=newServiceConnection()(publicvoidonServiceConnecte
18、d(ComponentNameclassName,IBinder ibinder)(ia=IA.Stub.asInterface(ibinder);publicvoidonServiceDisconnected(ComponentNameclassName)(;publicvoidonClick(Viewv)(intret=0;switch(v.getId()(case101:if(state_var_A= = 1)(tryret二ia.f1(188);catch(Exceptione)e.printStackTrace();tv.setText(String.valueOf(ret);break;case102:if(state_var_A= = 1)stopService(newIntent(com.misoo.pk01.REMOTE_SERVICE);finish();break;結(jié)語在傳統(tǒng)觀點(diǎn)里,大多先繪制UML模型圖,然后才開始構(gòu)思程式碼的撰寫,使得UML建模 成為撰寫程式碼的前置工作,因此許多程式員將UML建模視為多余的負(fù)擔(dān)。為了節(jié)省開發(fā) 成本,就將省略掉UML建模的工作了。在新潮的觀點(diǎn)里,UML模型與程式碼是軟體系統(tǒng)本體的
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版企業(yè)信息工程系統(tǒng)性能評(píng)估委托合同3篇
- 2025版學(xué)校學(xué)生食堂餐具清洗消毒服務(wù)合同2篇
- 2025版工業(yè)產(chǎn)品設(shè)計(jì)勞務(wù)分包合同示范文本3篇
- 3簡(jiǎn)歷篩選技巧
- 2025版新型木工機(jī)械設(shè)備租賃服務(wù)合同范本4篇
- 全新神州2025年度車輛租賃合同6篇
- 互聯(lián)網(wǎng)平臺(tái)未來發(fā)展趨勢(shì)與挑戰(zhàn)考核試卷
- 2025版建筑施工安全環(huán)保綜合服務(wù)合同2篇
- 2025版嬰幼兒輔食委托加工生產(chǎn)及質(zhì)量控制合同3篇
- 2025版企業(yè)商標(biāo)注冊(cè)委托代理服務(wù)合同2篇
- 數(shù)學(xué)-山東省2025年1月濟(jì)南市高三期末學(xué)習(xí)質(zhì)量檢測(cè)濟(jì)南期末試題和答案
- 中儲(chǔ)糧黑龍江分公司社招2025年學(xué)習(xí)資料
- 湖南省長(zhǎng)沙市2024-2025學(xué)年高一數(shù)學(xué)上學(xué)期期末考試試卷
- 船舶行業(yè)維修保養(yǎng)合同
- 2024年林地使用權(quán)轉(zhuǎn)讓協(xié)議書
- 春節(jié)期間化工企業(yè)安全生產(chǎn)注意安全生產(chǎn)
- 數(shù)字的秘密生活:最有趣的50個(gè)數(shù)學(xué)故事
- 移動(dòng)商務(wù)內(nèi)容運(yùn)營(吳洪貴)任務(wù)一 移動(dòng)商務(wù)內(nèi)容運(yùn)營關(guān)鍵要素分解
- 基于ADAMS的汽車懸架系統(tǒng)建模與優(yōu)化
- 當(dāng)前中國個(gè)人極端暴力犯罪個(gè)案研究
- 中國象棋比賽規(guī)則
評(píng)論
0/150
提交評(píng)論