您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
   
 
 
     
   
 订阅
  捐助
如何绘制平台框架的设计图:使用UML工具
 
作者:myeit 的BLOG 来源:51CTO 发布于: 2015-8-18
  4688  次浏览      16
 

前言:

在软件开发上,写代码是<实>,画设计图是<虚>。程序员务实,设计员务虚。由于<干实事>被推崇,所以大多开发者都务实了,不画图做设计了。例如,数十本仿间的中文Android书籍里,除了我的书之外,几乎没有UML图,让年轻一代逐渐失去图形思考习惯,这将损害其创造能力。

1. 复习:开始使用UML建模工具(如JUDE)

开启JUDE建模工具:

点选<File/New>,创建新建模项目:

建立新的类图(Class Diagram):

类图绘图区:

拉出一个类的图像,并取名为 ”汽车”:

2、开始设计框架

框架设计练习口诀:目前先”不”做轮胎

老子说:”无” 之以为用(有之以为利)

孔子说:知之为知之,”不”知为不知

最伟大的雕刻师罗丹( Musée Rodin)说:把”不”必要的部分去掉。

~~ 先不做轮胎 ~~

相当于:

3. 应用框架设计范例

这个Calculator类的范例代码:

// 引擎部份

class Calculator {

public int run() {

int n;

n = getN();

int sum = 0;

for(int i=0; i<=n; i++) {

sum += i;

}

return sum;

}

private int getN() { return 10; }

}

//------------------------------------------

public class JMain {

public static void main(String[] args) {

Calculator cal = new Calculator();

System.out.println(cal.run());

}

}

~~ 先不做轮胎(先不加糖) ~~

~~ 先做轮毂(先准备砂糖纸包) ~~

范例代码:

// JMain.java

import Engine.Calculator;

public class JMain {

public static void main(String[] args) {

Calculator cal = new Calculator();

System.out.println(cal.run());

}

}

// 引擎部份

package Engine;

import Framework.ICount;

public class Calculator {

ICount ref;

public int run() {

int n;

n = getN();

int sum = 0;

for(int i=0; i<=n; i++) {

sum += i;

}

return sum;

}

private int getN() {

return ref.getCount();

}

}

// 接口部分

package Framework;

public interface ICount {

int getCount();

}

Java的Interface接口,就相当于纯粹抽象基类(Pure abstract class)。所以,也能将上述ICount接口定义为基类,如下:

abstract class Count {

public abstract int getCount();

}

也可以定义为一般抽象基类,如下:

abstract class Count {

public int getCount() {

int cc = onCount();

return cc;

}

protected int onCount();

}

以上是做『分』的动作,将轮胎从汽车上”分” 离开来,或是将糖从三合一咖啡里分离开来。

客人来了,主人询问客人:需要冰糖或砂糖?

依据客人需求,主人开始做『合』的动作,将轮胎组”合”装配到汽车上,或是将糖加入二合一咖啡,调”合”成可口的咖啡。

4. 开始撰写AP子类别

~~ 配上实作类(Implementation Class):

~~ 配上子类(Sub Class):

~~创建子类的对象~~

范例代码:

// JMain.java

import Engine.Calculator;

import Framework.Count;

public class JMain {

public static void main(String[] args) {

Calculator cal = new Calculator();

Count co = new myCount();

cal.setRef(co);

System.out.println(cal.run());

}

}

// 引擎部份

package Engine;

import Framework.Count;

public class Calculator {

private Count ref;

public int run() {

int n;

n = getN();

int sum = 0;

for(int i=0; i<=n; i++) { sum += i; }

return sum;

}

private int getN() { return ref.getCount(); }

public void setRef(Count co){ ref = co; }

}

//框架部份

package Framework;

public abstract class Count {

public int getCount() {

int cc = onCount();

return cc;

}

protected abstract int onCount();

}

// 子類部份

import Framework.Count;

public class myCount extends Count{

protected int onCount(){ return 10; }

}

這有一個矛盾的地方:

代碼Count co = new myCount(); 意味著myCount類必須先於JMain類。

但是JMain又屬於框架層,顯然應該先於myCount類。

如果使用Android的myActivity子類來替代JMain類,就解決上述的困境了。

於是共含有兩層框架:Android大框架和DSF小框架,如下圖:

總共含有4大模塊:

Android大框架

DSF小框架

DSE特殊領域引擎

AP

范例代码:

// 引擎部份

package DS_Engine;

import DS_Framework.Count;

public class Calculator {

private Count ref;

public int run() {

int n;

n = getN();

int sum = 0;

for(int i=0; i<=n; i++) { sum += i; }

return sum;

}

private int getN() {

return ref.getCount();

}

public void setRef(Count co){

ref = co;

}

}

// DSF小框架部份

package DS_Framework;

public abstract class Count {

public int getCount() {

int cc = onCount();

return cc;

}

protected abstract int onCount();

}

// AP部分

// myCount.java

package com.misoo.ppxx;

import DS_Framework.Count;

public class myCount extends Count{

protected int onCount(){ return 10; }

}

// myActivity.java

package com.misoo.ppxx;

import DS_Engine.Calculator;

import DS_Framework.Count;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.LinearLayout;

public class myActivity extends Activity implements OnClickListener {

private Button btn, btn2;

@Override public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

LinearLayout layout = new LinearLayout(this);

layout.setOrientation(LinearLayout.VERTICAL);

LinearLayout.LayoutParams param =

new LinearLayout.LayoutParams(100, 55);

param.leftMargin = 1; param.topMargin = 3;

btn = new Button(this);

btn.setId(101); btn.setText("Run");

btn.setOnClickListener(this); btn.setBackgroundResource(R.drawable.x_jude);

layout.addView(btn, param);

btn2 = new Button(this); btn2.setId(102);

btn2.setText("Exit"); btn2.setOnClickListener(this);

btn2.setBackgroundResource(R.drawable.x_sky);

layout.addView(btn2, param);

setContentView(layout);

}

public void onClick(View v) {

switch(v.getId()) {

case 101:

Calculator cal = new Calculator();

Count co = new myCount();

cal.setRef(co);

int result = cal.run();

setTitle(String.valueOf(result));

break;

case 102: finish(); break;

}}

}

   
4688 次浏览       16
 
相关文章

UML概览
UML图解:用例图(Use case diagram )
UML图解:活动图(activity diagram )
UML图解:类图(class diagram )
UML图解:对象图(object diagram)
UML图解:顺序图( sequence diagram )
 
相关文档

模型跟踪:跟踪图、矩阵、关系(建模工具EA)
自定义表格(Custom Table)在EA中的使用
元素的详情浏览控制
UAF 1.2规范解读(DMM 和 UAFML )
EA中支持的各种图表
EA中的界面原型建模
 
相关课程

UML与面向对象分析设计
UML + 嵌入式系统分析设计
业务建模与业务分析
基于SysML和EA进行系统设计与建模
基于模型的需求管理
业务建模 & 领域驱动设计
最新课程计划
信息架构建模(基于UML+EA)3-21[北京]
软件架构设计师 3-21[北京]
图数据库与知识图谱 3-25[北京]
业务架构设计 4-11[北京]
SysML和EA系统设计与建模 4-22[北京]
DoDAF规范、模型与实例 5-23[北京]

如何向妻子解释OOD
OOAD与UML笔记
UML类图与类的关系详解
UML统一建模语言初学
总结一下领域模型的验证
基于 UML 的业务建模

面向对象的分析设计
基于UML的面向对象分析设计
UML + 嵌入式系统分析设计
关系数据库面向OOAD设计
业务建模与业务架构
使用用例进行需求管理

某航空IT部门 业务分析与业务建模
联想 业务需求分析与建模
北京航管科技 EA工具与架构设计
使用EA和UML进行嵌入式系统分析
全球最大的茶业集团 UML系统分析
华为 基于EA的嵌入式系统建模
水资源服务商 基于EA进行UML建模
更多...