温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何绘制平台框架的设计图:使用UML工具

发布时间:2020-07-09 18:59:24 来源:网络 阅读:922 作者:myeit 栏目:移动开发

前言:

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


高老师陪您成长...

  如何绘制平台框架的设计图:使用UML工具 


EE                                                  EE

相關文章:

1. 如何设计平台框架的<未来性>

2. 平台框架(Framework)开发的雕龙之技6招


如何绘制平台框架的设计图:使用UML工具


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

      开启JUDE建模工具:

如何绘制平台框架的设计图:使用UML工具

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

如何绘制平台框架的设计图:使用UML工具

建立新的类图(Class Diagram):

如何绘制平台框架的设计图:使用UML工具

类图绘图区:

如何绘制平台框架的设计图:使用UML工具

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

如何绘制平台框架的设计图:使用UML工具

2.  开始设计框架

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

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

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

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

如何绘制平台框架的设计图:使用UML工具

~~ 先不做轮胎 ~~

如何绘制平台框架的设计图:使用UML工具

相当于:

如何绘制平台框架的设计图:使用UML工具

[歡迎光臨 高煥堂 網頁: http://www.cnblogs.com/myEIT/ ]

3.  应用框架设计范例

如何绘制平台框架的设计图:使用UML工具

   这个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());

}

}

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

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

如何绘制平台框架的设计图:使用UML工具

范例代码:

// 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();

}

如何绘制平台框架的设计图:使用UML工具

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

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

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


4. 开始撰写AP子类别

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

如何绘制平台框架的设计图:使用UML工具

~~ 配上子类(Sub Class):

如何绘制平台框架的设计图:使用UML工具

~~创建子类的对象~~

如何绘制平台框架的设计图:使用UML工具

范例代码:

// 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類,就解決上述的困境了。

如何绘制平台框架的设计图:使用UML工具

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

如何绘制平台框架的设计图:使用UML工具

總共含有4大模塊:

  • Android大框架

  • DSF小框架

  • DSE特殊領域引擎

  • AP

范例代码:

如何绘制平台框架的设计图:使用UML工具

// 引擎部份

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

如何绘制平台框架的设计图:使用UML工具


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI