UML建模与Android应用程式开发_第1页
UML建模与Android应用程式开发_第2页
UML建模与Android应用程式开发_第3页
UML建模与Android应用程式开发_第4页
UML建模与Android应用程式开发_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、【转】UML建模与Android应用程式开发(上)前言就一个完整的软体系统而言,程式码只是系统(本体)的一个观点(View)而已,而模型 (Model)也是系统(本体)的一个观点。当Android应用开发者来说,若既能从程式码看应用 系统,又能从模型看它,就相当于人们都有两只眼睛来看前方的一切事物。一旦发现两者有 不一致的情形,就表示两者可能有所失真(即远离本体)了。这样的讯息,可让开发者提前知 道未来开发路子上,可能发生的错误,以便防患未然。同样地,在模型大观点里,也含有许 多小观点,例如:l架构观点:一般采用UML类别图(ClassDiagram)l使用观点:一般采用UML用例图(UseC

2、aseDiagram)l顺序观点:一般采用UML顺序图(SequenceDiagram)l状态观点:一般采用UML状态图(StatechartDiagram)在本文里,将说明如何就上述的4个小观点,来构成模型大观点,然后再与程式码观点 汇合,成为一个稳定可靠、简洁高雅的Android应用系统。然而,特别留意的是:模型观 点与程式码观点两者不一定要有明确的先后顺序关系。两者之间,到底何者先,而何者后, 并非重点。因为最好的状态是:在脑海里先两者并存,先领悟构思,然后才画出UML模型 图,也写出程式码,但都不一定是完美的。随着两个观点的对比,发现不一致现象,就像两 只眼睛发现前方物体的呈像不一致时

3、,两者自然而然会逐渐修正(Iterative& Incremental),止于至善。本文范例本文举一个简单范例:一个Activity的子类别,以及一个远程的(Remote)的Service子 类别。两者透过Android的IPC机制相互沟通。多种UML类别图呈现各种架构观点所有的模型图都是人们对某项事物本体认知的心智观点,随着观点和抽象的角度之不同 而改变其所呈现之面貌。例如,当我们觉得Android框架里的基类(即抽象类)是最重要的, 只要呈现它即可,此时类别图就呈现如下:图1独尊Android框架的类别图如果觉得应用子类别也是架构里的重要元素,需要与框架里的基类别一起呈现出来,则此时类别图

4、就呈现如下:图2兼具框架与应用的类别图当然也有许多人习惯于独尊应用子类别,而认为不需要呈现幕后的框架基类别,则此时类别图就呈现如下:lAJStuto任1目|可回-卜1百|个Ifq|q|:,|上| t|o|t jBindertnySenriceniyAdivilyA图3独尊应用子类别的类别图此外,还有人习惯于独尊介面(即接口),而对幕后实作类别视而不见,则此时类别图就呈现如下:图4强调介面(即接口)的类别图以上都只强调架构里的元素(如类别和介面),还有人认为这些元素之间的互动(Interaction)与合作(Collaboration)是非常重要的,需要表现出来此时类别图就呈现如下:HI目司间

5、3inder.trari;satOIA.f10 IPCAIBindermyServicemyActiwiy图5强调互动的类别图UML用例图呈现使用观点类别图是基于架构师的观点,偏向系统的内观(InternalView)。至于用例图(UseCase Diagram)则是基于使用者(即用户)的观点,偏向系统的夕卜观(ExternalView)。许多人坚持 需求至上(Requirement-based)的开发者,非常重视这项UML图,终究用户是买家,就行 销的角度来看,用户观点当然非常重要啰。例如,针对上述范例的UML用例图呈现如下: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册地底与0垢帐、塞旺S瑁廿曷株H我鼠景屈S瑁廿曷株W回反ttHH夹招坦ISW届OW函虻S昌usecasemx#myServite:myAtlwiiystopSeiviceOOT旦A图8Exit用例幕后的活动顺序图UML状态图呈现UI画面的干变万化由于Android是属于事件驱动(Event-Driven)的平台系统,有许多人主张善用UML状 态图可对众多事件分而治之,于是在清晰的状态之下

7、,会执行明确的活动。例如,下述的画 面可接受来自Android和用户所引发的事件。、回W米曲UML克捞圈际的UI沼古N涓壮、目,幽-111圈A.ffione言knlwZJ八 一= 答苍EM氧* W告Androidl.na幽9际的UI画回克捞对古昏UM L克捞圈IU Java sssss至今天,还是有许多人维持传统的观点:l画UML模型图在先,撰写程式码在后。l程式码是UML模型的实践。1UML模型较为抽象,程式码较为具体。这项传统观点并没有对与错。但是,近年来,愈来愈多的人们持着新的观点:1UML模型图与Java程式码是两个同位阶的观点。1两个观点的一致性是确保系统稳定可靠、简洁高雅的重要途径

8、。1杰出的Android开发者应该兼具两个观点。经过两个观点的互相核对与逐步修正后,的确呈现出极为完美的程式码,如下:Android 应用程式 Project这包含了 1个IA.java介面定义档,及两个应用子类定义档:应用程式码一致化的程式码如下所示:/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;结语在传统观点里,大多先绘制UML模型图,然后才开始构思程式码的撰写,使得UML建模 成为撰写程式码的前置工作,因此许多程式员将UML建模视为多余的负担。为了节省开发 成本,就将省略掉UML建模的工作了。在新潮的观点里,UML模型与程式码是软体系统本体的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论