溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何繪制平臺框架的設(shè)計(jì)圖:使用UML工具

發(fā)布時間:2020-07-09 18:59:24 來源:網(wǎng)絡(luò) 閱讀:913 作者:myeit 欄目:移動開發(fā)

前言:

在軟件開發(fā)上,寫代碼是<實(shí)>,畫設(shè)計(jì)圖是<虛>。程序員務(wù)實(shí),設(shè)計(jì)員務(wù)虛。由于<干實(shí)事>被推崇,所以大多開發(fā)者都務(wù)實(shí)了,不畫圖做設(shè)計(jì)了。例如,數(shù)十本仿間的中文Android書籍里,除了我的書之外,幾乎沒有UML圖,讓年輕一代逐漸失去圖形思考習(xí)慣,這將損害其創(chuàng)造能力。


高老師陪您成長...

  如何繪制平臺框架的設(shè)計(jì)圖:使用UML工具 


EE                                                  EE

相關(guān)文章:

1. 如何設(shè)計(jì)平臺框架的<未來性>

2. 平臺框架(Framework)開發(fā)的雕龍之技6招


如何繪制平臺框架的設(shè)計(jì)圖:使用UML工具


1. 復(fù)習(xí):開始使用UML建模工具(JUDE)

      開啟JUDE建模工具:

如何繪制平臺框架的設(shè)計(jì)圖:使用UML工具

點(diǎn)選<File/New>,創(chuàng)建新建模項(xiàng)目:

如何繪制平臺框架的設(shè)計(jì)圖:使用UML工具

建立新的類圖(Class Diagram):

如何繪制平臺框架的設(shè)計(jì)圖:使用UML工具

類圖繪圖區(qū):

如何繪制平臺框架的設(shè)計(jì)圖:使用UML工具

拉出一個類的圖像,并取名為 ”汽車”:

如何繪制平臺框架的設(shè)計(jì)圖:使用UML工具

2.  開始設(shè)計(jì)框架

框架設(shè)計(jì)練習(xí)口訣:目前先”不”做輪胎

         老子說:”無” 之以為用(有之以為利)

         孔子說:知之為知之,”不”知為不知

最偉大的雕刻師羅丹( Musée Rodin)說:把”不”必要的部分去掉。

如何繪制平臺框架的設(shè)計(jì)圖:使用UML工具

~~ 先不做輪胎 ~~

如何繪制平臺框架的設(shè)計(jì)圖:使用UML工具

相當(dāng)于:

如何繪制平臺框架的設(shè)計(jì)圖:使用UML工具

[歡迎光臨 高煥堂 網(wǎng)頁: http://www.cnblogs.com/myEIT/ ]

3.  應(yīng)用框架設(shè)計(jì)范例

如何繪制平臺框架的設(shè)計(jì)圖:使用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());

}

}

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

~~ 先做輪轂(先準(zhǔn)備砂糖紙包) ~~

如何繪制平臺框架的設(shè)計(jì)圖:使用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接口,就相當(dāng)于純粹抽象基類(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();

}

如何繪制平臺框架的設(shè)計(jì)圖:使用UML工具

  • 以上是做『分』的動作,將輪胎從汽車上”分” 離開來,或是將糖從三合一咖啡里分離開來。

  • 客人來了,主人詢問客人:需要冰糖或砂糖?

  • 依據(jù)客人需求,主人開始做『合』的動作,將輪胎組”合”裝配到汽車上,或是將糖加入二合一咖啡,調(diào)”合”成可口的咖啡。


4. 開始撰寫AP子類別

~~ 配上實(shí)作類(Implementation Class):

如何繪制平臺框架的設(shè)計(jì)圖:使用UML工具

~~ 配上子類(Sub Class):

如何繪制平臺框架的設(shè)計(jì)圖:使用UML工具

~~創(chuàng)建子類的對象~~

如何繪制平臺框架的設(shè)計(jì)圖:使用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又屬於框架層,顯然應(yīng)該先於myCount類。

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

如何繪制平臺框架的設(shè)計(jì)圖:使用UML工具

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

如何繪制平臺框架的設(shè)計(jì)圖:使用UML工具

總共含有4大模塊:

  • Android大框架

  • DSF小框架

  • DSE特殊領(lǐng)域引擎

  • AP

范例代碼:

如何繪制平臺框架的設(shè)計(jì)圖:使用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

如何繪制平臺框架的設(shè)計(jì)圖:使用UML工具


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI