国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Eclipse的本體圖形編輯器的設(shè)計(jì)與實(shí)現(xiàn)

2008-11-13 01:49韓菲帆
總裁 2008年7期
關(guān)鍵詞:本體論視圖控制器

韓菲帆

摘 要:通過(guò)對(duì)Eclipse平臺(tái)和GEF框架的介紹,分析了Eclipse平臺(tái)在圖形編輯方面的優(yōu)越性。結(jié)合本體編輯,設(shè)計(jì)并實(shí)現(xiàn)了基于Eclipse 平臺(tái)下的本體編輯器,對(duì)編輯器的系統(tǒng)結(jié)構(gòu)做了詳細(xì)地分析。編輯器由模型、視圖、控制器三部分組成,由于采用基于MVC 模式的GEF 框架,使得軟件結(jié)構(gòu)清晰,明顯縮短了軟件的開(kāi)發(fā)周期,提高了軟件的可維護(hù)性和代碼的重用性。

關(guān)鍵詞:Eclipse;本體論;圖形編輯框架;模型——視圖——控制器

1 MVC設(shè)計(jì)模式

MVC 是一種設(shè)計(jì)模式,它強(qiáng)制性地把應(yīng)用程序的輸入、處理和輸出分開(kāi)。 MVC 把應(yīng)用程序分成3 個(gè)核心模塊:模型、視圖和控制器。

模型:軟件所處理問(wèn)題邏輯在獨(dú)立于外在顯示內(nèi)容和形式情況下的內(nèi)在抽象,封裝了問(wèn)題的核心數(shù)據(jù)、邏輯和功能的計(jì)算關(guān)系,它獨(dú)立于具體的界面表達(dá)和I/ O操作。

視圖:把表示模型數(shù)據(jù)及邏輯關(guān)系和狀態(tài)的信息及特定形式展示給用戶。 它從模型獲得顯示信息,對(duì)于相同的信息可以有多個(gè)不同的顯示形式或視圖。

控制器:處理用戶與軟件的交互操作的,其職責(zé)是控制提供模型中任何變化的傳播,確保用戶界面于模型間的對(duì)應(yīng)聯(lián)系;它接受用戶的輸入,將輸入反饋給模型,進(jìn)而實(shí)現(xiàn)對(duì)模型的計(jì)算控制,是使模型和視圖協(xié)調(diào)工作的部件。通常一個(gè)視圖具有一個(gè)控制器。

2 GEF 圖形編輯框架

GEF ( Graphical Editing Framework) 是Eclipse平臺(tái)下的圖形編輯插件,可用于為已有的應(yīng)用創(chuàng)建一個(gè)圖形編輯器界面。GEF運(yùn)用基于SWT 繪圖插件Draw2d 在Eclipse 中創(chuàng)建圖形環(huán)境。利用GEF提供的公共方法或者在特殊的領(lǐng)域下可以擴(kuò)展它們GEF 使用能簡(jiǎn)潔地改變應(yīng)用于視圖1 GEF結(jié)構(gòu)圖圖模型的MVC 架構(gòu)。 GEF 是一個(gè)能為大多數(shù)程序提供鏈接和構(gòu)造基礎(chǔ)的完整應(yīng)用。包括:流程構(gòu)造器、圖形界面構(gòu)造器、UML 圖表編輯器(例如流程圖和類圖) ,及類似于HTML 的所見(jiàn)即所得的文本編輯器。

圖1給出了GEF結(jié)構(gòu)圖。

3 本體圖形編輯器的設(shè)計(jì)與實(shí)現(xiàn)

3.1 數(shù)據(jù)模型的設(shè)計(jì)

數(shù)據(jù)模型對(duì)象負(fù)責(zé)存儲(chǔ)顯示內(nèi)容的抽象,所有的核心數(shù)據(jù)都存儲(chǔ)在model 對(duì)象中。數(shù)據(jù)模型主要包括兩大部份:代表節(jié)點(diǎn)的node 模型和代表連接的connection 模型,每一個(gè)節(jié)點(diǎn)模型和每一個(gè)連接模型都代表一個(gè)本體語(yǔ)言中的一個(gè)語(yǔ)法元素。 數(shù)據(jù)模型代表了本體語(yǔ)言中的元素,各種模型之間的關(guān)系必須符合本體語(yǔ)言的語(yǔ)法關(guān)系,節(jié)點(diǎn)模型主要是表示本體語(yǔ)言中的各種基本元素,如類、屬性、實(shí)例等。連接模型:連接模型主要是表示本體語(yǔ)言中的各種關(guān)系,如子類父類的繼承關(guān)系、子屬性父屬性的繼承關(guān)系、類與實(shí)例的關(guān)系等。node模型示意代碼如下:

public class Node extends Element {

…………………..

//模型位置和尺寸的確定

protected Point location = new Point(0,0);

protected Dimension size = new Dimension(100,150);

//連接起點(diǎn)和終點(diǎn)集合的定義

private List souceConnection=new ArrayList();

private List targetConnection=new ArrayList();

public void addtargetConnection(Object connection){

this.targetConnection.add(connection);

firePropertyChange(PROP_INPUTS,null,null);

}

public void addsourceConnection(Object connection){

this.soouceConnection.add(connection);

firePropertyChange(PROP_OUTPUTS,null,null);

}

public void setLocation(Point p) {

if (this.location.equals(p)) {

return;

}

this.location = p;

firePropertyChange(PROP_LOCATION,null,p);

}

public void setSize(Dimension d) {

if (this.size.equals(d)) {

return;

}

this.size = d;

firePropertyChange(PROP_SIZE,null,d);

}

…………………

}

圖2 View的實(shí)現(xiàn)圖

圖3 Draw2D結(jié)構(gòu)圖

3.2 視圖的設(shè)計(jì)

如圖2所示:視圖是應(yīng)用軟件的表示部分,用于展現(xiàn)數(shù)據(jù)模型的內(nèi)容,是用戶與編輯器交互的窗口。 它向用戶提供一個(gè)友好界面,使得用戶能夠使用圖形化的方式方便地查看、編寫指定的文件。編輯器的視圖部分主要包括主菜單區(qū)、工具區(qū)、編輯區(qū)。主菜單區(qū)主要是顯示整個(gè)編輯器的所有文件;工具區(qū)則是顯示各種基本圖形模型,主要圖形的編輯就是將工具區(qū)的圖形模型拖放到編輯區(qū),以實(shí)現(xiàn)基本本體圖形的編輯;編輯區(qū)是整個(gè)編輯器的核心部分,它是一個(gè)大視圖,整個(gè)本體的圖形展示都在編輯區(qū),各種基本圖形的屬性及它們之間的關(guān)系都在編輯區(qū)中實(shí)現(xiàn)。雖然GEF可以使用任何圖形包作為View層,但實(shí)際上GEF對(duì)Draw2D的依賴是很強(qiáng)的。圖3是Draw2D結(jié)構(gòu)圖,Draw2D是基于SWT的圖形處理包。如果一個(gè)應(yīng)用僅需要顯示圖形,只用Draw2D就足夠了;若該應(yīng)用的模型要求以圖形化的方式被編輯,那么最好使用GEF。

舉例來(lái)說(shuō):EditPart(org.eclipse.gef.EditPart)接口并不要求引入任何Draw2D的類,但最常使用的AbstractGraphicalEditPart類的CreateFigure()方法就需要返回IFigure類型。由于這個(gè)原因,在GEF的SDK中索性包含Draw2D包就不奇怪了。

3.3 控制器的設(shè)計(jì)

GEF框架的控制器稱為EditPart 。每一個(gè)模型都對(duì)應(yīng)著一個(gè)EditPart ,主要作用是將模型和視圖聯(lián)接起來(lái),實(shí)現(xiàn)模型與視圖之間的同步操作。 為了實(shí)現(xiàn)代碼的重用,EditPart被分為Command 和EditPolicy 兩部分。同一個(gè)EditPolicy 可以被安裝到多個(gè)EditPart中,同一個(gè)Command 也可以被多個(gè)EditPolicy 所使用。當(dāng)圖形模型發(fā)生改變的時(shí)候,圖形模型對(duì)應(yīng)的EditPart 中的EditPolicy 通過(guò)傳遞過(guò)來(lái)的參數(shù),產(chǎn)生相應(yīng)的命令對(duì)象,從而通過(guò)命令對(duì)象來(lái)實(shí)現(xiàn)對(duì)模型的更新修改。

當(dāng)用戶有請(qǐng)求時(shí),Editpart 獲得該請(qǐng)求,通過(guò)已有的各種策略來(lái)判斷應(yīng)發(fā)出的命令,并向數(shù)據(jù)模型發(fā)出與該請(qǐng)求對(duì)應(yīng)的命令,使得數(shù)據(jù)模型發(fā)生改變,而對(duì)模型的改變會(huì)即時(shí)獲得語(yǔ)法檢查,以決定該請(qǐng)求是否合法。若合法,則向Editpart 發(fā)出屬性改變的消息,最后由Editpart 將對(duì)模型的修改結(jié)果返回給視圖,成為用戶可見(jiàn)的結(jié)果??刂破魇疽獯a如下:

public abstract class NodePart extends AbstractGraphicalEditPart implements PropertyChangeListener,NodeEditPart {

…………………

//對(duì)不同的請(qǐng)求刷新視圖

public void propertyChange(PropertyChangeEvent evt) {

if (evt.getPropertyName().equals(Node.PROP_LOCATION))

refreshVisuals();

else if (evt.getPropertyName().equals(Node.PROP_SIZE))

refreshVisuals();

else if (evt.getPropertyName().equals(Node.PROP_INPUTS))

refreshTargetConnections();

else if (evt.getPropertyName().equals(Node.PROP_OUTPUTS))

refreshSourceConnections();

}

//安裝Policy

protected void createEditPolicies() {

installEditPolicy(EditPolicy.COMPONENT_ROLE,new NodeEditPolicy());

installEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE,new

NodeGraphicalNodeEditPolicy());

installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE,new

NodeDirectEditPolicy());

猜你喜歡
本體論視圖控制器
南京溧水電子3款控制器產(chǎn)品
水泥生料立磨壓差變參數(shù)二型模糊控制器設(shè)計(jì)
基于NFV的分布式SDN控制器節(jié)能機(jī)制
Y—20重型運(yùn)輸機(jī)多視圖
SA2型76毫米車載高炮多視圖
《投影與視圖》單元測(cè)試題
本體論視域下大學(xué)本體要素及資源分類探析
“法律解釋”與“法律詮釋”之術(shù)語(yǔ)辨析
淺議古代哲學(xué)的本體論思維方式
Django 框架中通用類視圖的用法