• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
 






高煥堂.EIT

 
 

Powered by 博客园
博客园 | 首页 | 新随笔 | 联系 | 订阅 订阅 | 管理

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

By 高焕堂

 

                                                                                                               

 

如何绘制框架设计图:使用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;

         }

     } 

   }

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

[Go Back]

 

发表于 2013-11-10 04:44  高煥堂.EIT  阅读(576)  评论(0)    收藏  举报
 
刷新页面返回顶部