如何绘制平台框架的设计图:使用UML工具
前言:
在软件开发上,写代码是<实>,画设计图是<虚>。程序员务实,设计员务虚。由于<干实事>被推崇,所以大多开发者都务实了,不画图做设计了。例如,数十本仿间的中文Android书籍里,除了我的书之外,几乎没有UML图,让年轻一代逐渐失去图形思考习惯,这将损害其创造能力。
高老师陪您成长...
EE EE
相關文章:
1. 如何设计平台框架的<未来性>
2. 平台框架(Framework)开发的雕龙之技6招
如何绘制平台框架的设计图:使用UML工具
1. 复习:开始使用UML建模工具(如JUDE)
开启JUDE建模工具:
点选<File/New>,创建新建模项目:
建立新的类图(Class Diagram):
类图绘图区:
拉出一个类的图像,并取名为 ”汽车”:
2. 开始设计框架
框架设计练习口诀:目前先”不”做轮胎
老子说:”无” 之以为用(有之以为利)
孔子说:知之为知之,”不”知为不知
最伟大的雕刻师罗丹( Musée Rodin)说:把”不”必要的部分去掉。
~~ 先不做轮胎 ~~
相当于:
[歡迎光臨 高煥堂 網頁: http://www.cnblogs.com/myEIT/ ]
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;
}}
}
EE EE
转载于:https://blog.51cto.com/8204129/1354282
如何绘制平台框架的设计图:使用UML工具相关推荐
- 如何设计平台框架的未来性
前言: 过去19年来,我(高煥堂)个人在海峡两岸.日本.美国和西班牙等国担任大型框架系统设计的实务经验中,发现到许多框架开发者摆脱不了「AP开发者」的观点:把买主和用户视为「大员外」,而开发者变成员外 ...
- 火影推荐程序连载23-Robot Framework自动化测试框架核心指南-如何做好自动化测试平台框架的设计
自动化测试如果需要能高效快速的支撑软件项目的测试,项目的快速迭代以及上线,除了以上我们介绍的需要许多的Lib来支持以及需要高效的去编写自动化测试案例外,还需要一个好的自动化测试框架平台来支撑我们的自动 ...
- .NET平台框架解读
概述 微软在.NET跨平台之路上付出了巨大的艰辛,同时做了海量的工作. 首先推出了统一的API标准规范库 .NET Standard,并不断补充完善标准库,截止目前(2023-6-30)最新版本为 . ...
- 平台框架_从框架到平台
平台框架 当我在十年前以Java开发人员的身份开始职业生涯时,该行业正经历着革命性的变化. 2003年发布的Spring框架Swift流行,并成为庞大的J2EE平台的严重挑战者. 经过过渡时间后,我很 ...
- TDEngine游戏平台框架逻辑
TDEngine游戏平台框架逻辑 服务器组成 服务器由网关服(可多个),大厅服(可多个),和游戏逻辑服组成,其中游戏逻辑服可布置在大厅服上,详情请参考下图 如果没有外部负载均衡或者偏小型的服务器,网关 ...
- JAVA SpringBlade 微服务开发平台框架,企业级的SaaS多租户微服务平台,基于Spring Boot 2.7
SpringBlade微服务开发平台 完整代码下载地址:JAVA SpringBlade 微服务开发平台框架,企业级的SaaS多租户微服务平台 采用前后端分离的模式,前端开源两个框架:Sword (基 ...
- MSCode微服务平台框架基于SpringCloud、SpringCloud Alibaba、SpringBoot和Activiti7工作流,快速开发办公OA、CRM、ERP、电商、信息管理等业务系统
MSCode微服务平台框架 mscodecloud.com 基于Spring Cloud.Spring Boot和Activiti7工作流,提供所有源码和详尽文档,帮助企业快速开发分布式业务系统. 企 ...
- 【原创】面向企业应用的平台框架的思考
面向企业应用的平台框架应该是什么样子的?或者说都应该具有哪些特性(现在流行说features,而不说functions)?我也看了一些书籍,比如<企业应用架构模式>,不过它太老了,翻译成中 ...
- 2.1.太极平台框架—表单介绍与使用
1.表单介绍 一个表单对应数据库中的一个表,但一个表可以对应多个表单. 点击表单管理,可以看到所有的表单.可以按照菜单进行分类.如下图所示. 1.1.表单基本功能 1.1.1.调用路径 就是访问该表单 ...
最新文章
- 做为前端开发者,你应该要懂的 http协议
- Java中this的简单应用
- MySQL ADDTIME(t,n)	时间 t 加上 n 秒的时间
- string拼接_String拼接操作-的优化
- 数字图像处理--灰度图转伪彩色图
- flex 表格勾选后 鼠标滚动会自动勾选_外设Show 篇四十五:办公鼠里的BBA做工如何,罗技MX Anywhere 3鼠标体验_鼠标...
- 微课|中学生可以这样学Python(6.3节):变量作用域
- SQL中,like的SQL注入防止,使用预编译SQL(?)的写法
- matlab NORM函数
- 台式计算机无线网卡怎么找,怎么找出台式电脑中的无线网卡驱动
- 麻辣香锅(Spicy Hot Pot)浏览器劫持病毒应急方法
- day02 python基础
- 交换机的基本原理与配置
- 中学生怎样才能合理使用计算机,浅析中学生计算机的使用
- UVA 11584 Partitioning by Palindromes
- 《Hud 2589》Phalanx详解
- 云服务器文件打包,如何把云服务器的文件打包出来
- 手机html input打开数字,html5 input的type属性启动数字输入法
- HTML5+CSS3小实例:手风琴式加载动画
- Python全局变量和局部变量(超详细,纯干货,保姆级教学)
热门文章
- 软件测试开发实战| Java版本,Gson解析json比较常用的2种方式
- 2021高考成绩查询镇远一中,【护航高考 消防同行】——镇远消防圆满完成高考期间消防安保任务...
- php根据类名字符串,PHP 5.5 新特性 ::class 获取类名字符串
- 蓝桥杯泊松分酒java_【蓝桥杯】泊松分酒
- 保研论坛app服务器网站,保研论坛官网版app
- 服务器放在机柜_机架式服务器和塔式服务器有区别吗
- ordfilt2非线性滤波器
- 【java】swing构件的操作
- 判断某个磁盘中是否有某个文件
- java xml 字符串转对象_java读取xml文件并转换成对象,并进行修改