• 沒有找到結果。

MOF、或Ecore等模型語言建立應用領域的「平台無關超模型」(Platform Independent Metamodel, PIMM)做為使用者進行系統模型(PIM)開發的標準。接著對相關的執行平台 進行分析與定義建立「平台專屬超模型」(Platform Specific Metamodel, PSMM)作 為特定平台系統模型(PSM)描述的標準,每一個PSMM都會對應到特定的程式語言或執行

Eclipse是由IBM公司提出的Java整合開發環境(Integrated Development Environment, IDE),其主要目的是取代IBM原先的Java商業開發工具VisualAge for Java。在2001年 11月時,IBM把部分的原始碼開放出來,並成立了相關的非營利性Eclipse基金會與 eclipse.org網站,希望提供一個開放並且免費的IDE。由於IBM 對於Eclipse平台的開 放態度與Eclipse本身強大的擴充機制,使得Eclipse成為目前最多程式開發者所使用的 Java程式開發平台。但除了Java語言的開發之外,也有許多程式開發者透過外掛程式

(plug-ins)的使用來進行其他語言的撰寫,如C/C++、PHP或XML…等。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

12

圖 2.4:Eclipse 平台架構圖。

圖2.4為Eclipse平台架構圖,一般當提到Eclipse時,通常指的是Eclipse軟體開發 工具(Software Development Kit, SDK)主要包含Java IDE與其他的相關輔助開發工 具,然而Eclipse SDK則是由多個Project組成,其中包含Eclipse Platform、JDT(Java Development Tools)與PDE(Plug-in Development Environment)。Eclipse Platform 是建構所有開發環境的基礎,由許多的元件(例如Workbench、Workspace、Help和Debug…

等)所組成,其中Eclipse RCP(Rich Client Platform)則是所有元件中的一個子集 合也是Eclipse的基礎平台。Eclipse Platform包含了建構一個IDE所需的基礎功能,因 此所有的相關工具與應用都必須建構在此之上,所以JDT與PDE就是建構在此之上的 plug-in。

Eclipse平台的成功關鍵在於擁有強大的擴充機制,透過擴充點(extension point)

的概念,提供其他plug-in程式一個擴充的框架,Eclipse本身提供了許多的擴充點,讓 程式開發者可以依照自己的需求安裝各種相關的plug-in,並且將其整合到Eclipse平台 上,使得所有的程式開發過程都能在Eclipse平台上就可以完成,每一個plug-in程式也 能提供自己的擴充點,以便讓其他的plug-in程式也能擴充在此之上。相對的由於

2.2.2 Eclipse Modeling Framework, EMF

Eclipse Modeling Framework是屬於Eclipse Modeling Projects[04]裡的核心專案,

主要目標是以一個結構化的模型來描述相關的工具與應用程式,進一步產生整個程式框 架的Java程式碼。對於原本就有物件導向建模概念的程式開發者來說,可以不必拋棄原 本舊有的模型概念,直接透過EMF的使用會讓原本的建立模型方式變的更有效率與正 確。

一般建模的格式通常是利用UML所定義的圖形化標準模型來建立,對於整個建模的 過程,往往需要花費很多的時間在物件導向分析與設計(Object Oriented Analysis and Design, OOA/D)上。對EMF來說UML提供了過多的模型格式,因此EMF以UML作為基礎自 己定義了一套模型的描述語言,嚴格的來說EMF所定義的模型描述語言可以算是UML裡的 一個子集合,簡單的定義了「classes」模型與相關的「attributes」及「relations」,

藉此提供一個較低成本的建模方式供程式開發者使用。

EMF利用XMI(XML Metadata Interchange)作為模型定義的標準格式,程式開發者 可以透過以下幾種方式來建立模型:

• 直接建立XMI文件,透過XML或一般文字編輯器進行編輯

• 透過圖形化的模型編輯器,例如Rational Rose

• 利用「Annotated Java Interfaces」進行模型特性的描述

• 利用XML Schema描述一系列的模型規格

以轉換成Annotated Java Interfaces或XML Schema的描述方式。

EMF包含了三個基礎的架構:核心架構、EMF.Edit架構與EMF.Codegen架構:核心架 構提供了一個基本的模型描述規格,以及在執行時對模型的需求提供支援,包括模型狀 態 變 更 時 的 通 知 機 制 、 支 援 預 設 的 XMI 序 列 式 模 型 儲 存 格 式 與 利 用 EMF 提 供 的

「reflective API」對一般通用的EMF物件進行操作;EMF.Edit架構,利用一些通用且 可以重複使用的Eclipse classes作為建立EMF的模型編輯器的基礎,例如編輯器允許EMF 的模型利用「JFace viewer」與「property sheet」將物件的內容、名稱或是各種屬性 資料加以呈現,還包含一些模型圖型化編輯所需的API;EMF.Codegen架構的主要功能是,

在建構一個完整的模型編輯器時,EMF.Codegen必須滿足編輯器的所有需求,例如進行 Java語言編輯時就必須將編輯器與Eclipse JDT作連結。

對於 OMG 組織所提出的 MOF 架構來說,MOF 與 EMF 是一個極為類似的東西。但事實 上,EMF 則是對 MOF 架構進行了實作後的產物,整個 EMF 的發展過程是透過對許多模型 開發工具的實作與使用累積而成。也可以把 EMF 想像成是對 MOF 的核心 API 進行一個有 效率的 Java 語言實作,但為了避免混淆,在 EMF 裡與 MOF 相似的超模型核心就稱做

「Ecore」。在目前 MOF 2.0 的提案中,比較像是原本 MOF 模型架構裡的一個子集合,

所以稱作「EMOF」(Essential MOF)。EMOF 與 Ecore 之間的差異在於,EMOF 比 Ecore 來的更為精簡並且對於命名的方式也有些不同,但 EMF 還是可以對 EMOF 進行明確的序 列化讀寫。

在 Eclipse 平台上對於 EMF 的使用相當廣泛,並且發展出越來越多的模型工具都是 以 EMF 為基礎進行開發,因此我們也以 EMF 裡的 Ecore 模型來做為本系統的主要建模格 式,建立「平台無關」與「平台專屬」的導引精靈超模型。

Xtext[05]是在 2006 年,發表於 openArichitectureWare 專案裡。接著在 2008 年正式 屬於 Eclipse Modeling Framework 專案裡的其中一個部份,並且由 itemis 組織進行開 發與維護。在 2010 年 6 月正式推出 Xtext 1.0 版本,Xtext 主要是對於已經擁有一套自 定的語言,卻缺乏相關工具支援的程式開發者,可以在短時間內透過 Xtext 建構一個以 Eclipse 平台為基礎,類似 Java JDT 的程式編輯環境,並且也是用於一般通用程式語言 與特定領域語言(Domain-Specific Language, DSL)的開發。所以簡單來說,Xtext 是一 套提供程式開發者快速建構自定語言編輯環境的開發工具。

Xtext 提供程式開發者利用一組特定領域語言與 APIs,對一般通用程式語言進行多 方面的描述,藉此讓利用 Xtext 設計的語言能夠在 JVM 上執行。在程式碼編譯的部分,

可以在獨立的 Eclipse 或 OSGi 上進行編譯,也可以在任何 Java 環境下進行,其中包含 解析器、程式碼產生器和解譯器…等,最後 Xtext 所有的執行單元都必須以 EMF 為基礎 進行整合,這樣使得 Xtext 能有效率的利用在其他 EMF 相關工具上,例如 GMF(Graphical Modeling Project)。透過上述的執行架構,程式開發者可以在 Eclipse 上建構一個專 為某種語言客製化的語言開發環境,並且在試圖改變一些編輯環境的配置時都會變得相 當容易。Xtext 的核心語法是利用文字式的模型編輯方式進行 EMF 模型定義,並且利用 ANTLR-generated parser 對編輯好的模型語言進行語法的分析,ANTLR(ANother Tool for Language Recognition)是利用 LL(*)方式進行語法分析,目前透過 ANTLR 支援的程 式碼產生器,產生的語言包含 Java、C、C#,Objective-c、Python 與 Ruby。

Xtext 使用較輕量的依賴注入(Dependency injection, DI) 架構 Google Guice,

藉此連結了整個程式語言以及開發環境的基礎功能。所謂的依賴注入是透過抽象介面的

Xtend 是一種靜態型別(statically-typed)的程式語言,能夠緊密的與 Java Virtual Machine 進行整合並且在上面執行,所謂的靜態型別是指,對於變數的型別檢查是在程 式編譯時期的語意分析中所進行。Xtend 並非想取代 Java 語言,而是與 Java 保持一種 高度互動的關係,Java 可以直接對 Xtend 的方法與函數進行呼叫,並且對於 Xtend 的編 輯環境也與 Eclipse 上的 JDT 進行整合,所以 Xtend 與 Java 兩者是可以同時存在的,

Xtend 相對於 Java 語言增加了以下幾個概念: