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

1元 10元 50元





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



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

前言:

在软件开发上,写代码是<实>,画设计图是<虚>。程序员务实,设计员务虚。由于<干实事>被推崇,所以大多开发者都务实了,不画图做设计了。例如,数十本仿间的中文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;

}}

}

   
5757 次浏览       28
 
相关文章

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进行系统设计与建模
基于模型的需求管理
业务建模 & 领域驱动设计
最新活动计划
图数据库与知识图谱 8-28[北京]
OCSMP认证:OCSMP-MBF 8-29[北京]
基于 UML 和EA进行分析设计 9-9[北京]
软件架构设计方法、案例实践 9-24[北京]
需求分析师能力培养 10-30[北京]
MBSE体系与实践 8-26[北京]

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

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

广汽研究院 SysML+EA+软件分析设计
高合汽车研发部门 建模工具EA、WebEA、
国汽智联 建模工具EA、模型库、WebEA
亿咖通 MBSE工程体系与工具链咨询
中航无人机 MBSE工具链
吉利汽车 购买EA工具
华科汽车零部件 购买EA工具
东风岚图汽车 购买EA工具 以及EA定制开发
更多...