一. 面向對象技術與UML語言
與傳統的結構化軟件開發技術不同,面向對象技術提出了對象的封裝、繼承、多態性、對象的覆蓋等方法,而傳統的程序表示方法(如:框圖、NS圖等),無法對面向對象這些新的特性加以描述表達。因此,面向對象技術的表達、面向對象技術的方法論也是面形對象技術必不可少的研究內容之一。
面向對象方法論從1986年Booch率先提出後,至今已有50種以上的方法論出現,常見的有Rumbaugh的對象模型技術OMT、Booch以及Yourdon的面向對象分析與設計(OOA/OOD)、Jacobson的面向對象軟件工程(OOSE)、(Martin/Odell)的面向對象分析與設計(OOAD)、(Shlaer Mellor)的面向對象系統分析(OOSA)、Brock的責任導向設計RDD等等,各有其特色,但是不同分析設計方法缺乏統一的標准。
為了整合面向對象方法論,1995年由Rumbaugh、Booch、Jacobson三位面向對象大師提出與最重要的、具有劃時代統一建模語言(Unify Modeling Language,簡稱 UML)。1997年後,UML成為現今國際軟件工業的標准。事實上,近年來UML在世界范圍,已經逐漸成為是面向對象技術領域內占主導地位的標准建模語言。
二. Rational Rose UML柔性開發模型
Rational Rose UML柔性軟件開發模型,是指在軟件開發過程中,根據需求工程的牽引,首先建立軟件系統的頂層模型,並對其進行模擬、分析和調整。然後,將頂層模型自頂向下地進行分解,建立該系統各個子系統的模型,對這些子模型進行模擬、分析和調整。將子模型的模擬結果,逐次代入上層,再對該上層模型進一步進行模擬、分析和調整,如有不適,則進行修改。因此整個建模過程是一個"自頂向下建模,由底向上修改"的反復迭代的過程。簡言之,柔性軟件開發過程是一個在需求牽引下,自頂向下分層細化地建模,然後按照"T型技術",通過對模型的虛擬執行,由底向上地逐層上移修改,直至各層的模擬結果都滿足需求為止。
圖 1柔性軟件開發模型
代碼的生成建立在模型正確性的基礎上,同時考慮到對需求修改的靈活性和快速響應能力,實施能夠反饋修改的"閉環開發"。即不僅能支持從模型到代碼的自動生成,將新的模型轉換為代碼,還能支持從代碼到模型的逆向變換,將原有的代碼轉化成模型,進行再次分析、修改和調整以及新一輪的開發,從而為增量式開發提供支持。這樣不僅能做到分階段提交產品,也提高了對用戶需求變化的響應速度和應變能力,以滿足用戶不斷變化的新的需求。Rational Rose是一個能支持系統建模、系統模擬和系統生成的"閉環式開發"的集成化支持環境。
圖 2基於Rational Rose UML開發模型用例圖
三. Jbuilder對UML的支持
Java作為純面向對象的計算機語言,自然與UML關系密不可分。目前比較流行的Java集成化的開發系統(IDE),如:Jbuilder7、Visual Café、IBM Visual age,都或多或少地提供了對UML的支持。在此,只討論Jbuilder集成化開發環境。
圖 3 Jbuilder集成開發環境
圖 4 Jbuilder自動生成的應用程序UML類圖
Jbuilder對雖然提供了對UML的 支持,不過鄰人遺憾的是Jbuilder對UML的支持是有限的。截止到Jbuilder8版本,只提供了由程序源代碼到UML類圖自動生成功能。在某種意義上,該功能確實為開發人員提供了迅速分析現有程序代碼的功能。但是,Jbuilder自身並不支持由UML類圖到程序代碼這一源碼產生正向過程(Jbuilder中EJB的開發過程中,只提供了簡單的類似UML圖到程序源代碼的過程)。
我們知道,一個產品的開發與研制,通常是由產品設計工程師繪制出產品圖紙,然後,再由產品加工人員,根據圖紙加工出產品。在這其中"圖紙"是設計的第一步驟,而Jbuilder(至少在Jbuilder8以下版本)並沒有提供這一功能。因此,單純地應用Jbuilder並不能實現UML柔性開發模型。
四. Rational Rose UML柔性開發模型Java開發環境的建立
Rational Rose 是IBM公司出品(最近,Rational 公司已經被IBM公司收購)的面向對象統一建模語言與軟件開發集成環境,它提供了Java,C++,Visual Basic,ADA等等諸多軟件的軟件代碼雙向生成環境,另外,他還提供了與Jbuilder集成開發環境。該開發環境建立步驟如下:
(1) 首先安裝Jbuilder。
讀者可以從http://www.borland.com/jbuilder上免費下載Jbuilder8的試用版本。Jbuilder8的安裝過程比較簡單,一般選擇默認安裝選項即可,詳細過程在這裡就不介紹了。
(2) 安裝Rational Rose。
Rational Rose可以從http://www.rational.com上下載,並免費試用。Rational Rose在安裝過程中,有兩個特別重要的選項是:安裝對Java的支持和安裝對Jbuilder 鏈接(Link)支持。Rational Rose在安裝過程中會自動搜尋Jbuiler的安裝目錄並在Jbuilder的安裝目錄,安裝一些必要的鏈接文件文件。
圖 5 Rational Rose中配置Jbuilder
圖 6 Jbuilder、Rose開發模型交互選項
(3) Rational Rose與Jbuilder開發環境的配置。
在Rational Rose中配置Jbuilder。在Rational Rose的Tool工具欄上,選擇Java/J2EE-Project specification-Code Generation,選擇IDE為Jbuilder,另外,還可以復選Automatic Synchronization (見圖5),可以實現jbuilder代碼與Rose UML模型圖的同步。至於Jbuilder,無需任何配置,在Tool菜單中,自動增添了Rational Rose Update Model和Rational Rose Show In Model菜單選項,以實現模型與代碼的雙向同步(見圖6)。
五. 使用Rational Rose 與Jbuilder UML柔性開發模型案例
為了拋磚引玉,演示Rational Rose 與Jbuilder UML柔性開發模型案例,筆者舉一個最為簡單的入門例子。該程序運行時候,根據用戶的輸入,顯示"你好!***!"(其中***,為用戶輸入的字符串)。
在這個例子中,我們使用一個接口(interface),Hello.java,該接口提供了一個靜態最終變量public final static String hi="你好",並提供了一個抽象的方法say(),HelloWrold,繼承interface Hello.java,完成接受用戶輸入,顯示"你好!***!"。
首先,我們使用Rational Rose對上述設計思想進行描述,勾畫UML類圖(見圖7)如下:
圖7 Rational Rose UML類圖設計以及Java代碼生成
選擇選擇Java/J2EEàProject specificationà在Code Generation,默認在在c:\RoseJbuilderLink目錄下產生的Java代碼框架,並自動打開Jbuilder見圖8。
圖8 Jbuilder環境下查看Rational Rose生成的Java代碼
將上述生成的Hello.java和HelloWorld框架代碼(指:代碼結構),在Jbuilder環境下填寫必要的代碼:可以得到Hello.java //Source file: C:\\Hello\\src\\Hello.java
public interface Hello
{
public final static String hi="你好";
/**
* @roseuid 3E9932680328
*/
public void say();
}
HelloWorld的代碼為:
//Source file: C:\\Hello\\src\\HelloWorld.java
import java.io.*;
public class HelloWorld implements Hello
{
private String name=null;
/**
* @roseuid 3E9937D302C8
*/
public HelloWorld()
{
System.out.println("請輸入您想問候的名字(按回車結束):");
try {
DataInputStream da = new DataInputStream(System.in);
name = new String(da.readLine().getBytes("ISO8859-1"));
}
catch (IOException ex) { }
}
/**
* @roseuid 3E9937BC0008
*/
public static void main(String [] args) {
HelloWorld hh=new HelloWorld();
hh.say();
}
/**
* @roseuid 3E9937D30318
*/
public void say()
{
System.out.println(this.hi+name);
}
}
在Jbuilder環境下修改代碼以後,選擇ToolsàRational Rose Update Model,可以反向更新在Rational Rose環境下的UML類圖。在上述這個非常小的例子中,我們可以看到軟件的開發過程為:設計――代碼――設計,設計與代碼是雙向自動更新的,這種設計方法符合開發人員的思維,對軟件的源碼維護也十分直觀,是一種高效的軟件開發方法。
6 結束語
軟件開發的技術(或者稱藝術)是沒有止境的,使用Java與UML結合可.