櫻木 原文 對象模型圖(OMD)閱讀指南(轉載)
補充幾個名詞概念:
UML:Unified Modeling Language 統一建模語言,是用來對軟件密集系統進行可視化建模的一種語言。UML為面向對象開發系統的產品進行說明、可視化、和編制文檔的一種標准語言。
OMD:Object model diagrams 對象模型圖表。
首先來看看OMD能幫我們做什么?
1. 該類支持哪些接口;
2. 完成任務需要哪些對象;
3. 如何使用該類的對象;
4. 是否可以直接實例化類;
5. 接口有哪些方法和屬性;
6. 是否有其它類也支持該接口;
7. 對象間的關系
下面圖示中,便是貫穿本書的對象模型圖的鑰匙。
這些符號是基於UML 畫圖工具創建的,UML 符號是面向對象分析和設計的工業圖樣標准。
對象模型圖中提供的信息非常多,是對象瀏覽器中信息的重要補充。Visual Basic,或者其它的開發環境,都會列出所有的類和成員,但不會指明這些類之間的關系。所以,對象模型圖是非常有利於讀者對ArcInfo 組件的理解的!
本書使用UML 來描述ArcInfo 組件,即ArcObjects,並描述你能夠創建的數據模型。
以下詳細說明。
1. 類和對象
在UML 圖中有三種類型的類:抽象類(abstract class)、可創建類(createable class)與可實例化類(instantiable class)。
抽象類不能用以創建新對象,但可以用來指定子類。舉個例子,“line”(線)是“primaryline”(干線)和“secondary line”(副干線)的抽象類。
可創建類指的是那些你能夠直接使用開發環境中的對象定義語法來創建對象。比如在Visual Basic 中是這樣書寫:Dim As New <object> 或者CreateObject <object>。
可實例化類不能夠直接創建新對象,但是這種類的對象能夠作為其它對象的屬性被創建或是從其它類的方法中創建。------比較難理解。
2. 關聯
在抽象類、可創建類和可實例化類之間,有幾種存在的關聯(或稱關系)。
聯系(association)便描述了類之間的關聯。在兩端的類中可以定義多重性( Multiplicity)關聯。
在這張圖上,一個業主能有擁有一塊或多塊宗地;同樣地,一塊宗地可以被一個或多個業主所共有。
多重性關聯就是限制對象類與其它對象關聯的數目關系。以下是用於多重性關聯的符號:
1 ---- 一個並且只有一個,這種多樣性是可選的;如果不標明,則默認為“1”
0..1 ---- 零個或一個
M..N ---- 從M 到N(正整數)
*或者0… * ---- 從零到任意正整數
1… * ---- 從一到任意正整數
類繼承(type inheritance)定義了專門的類,它們擁有超類的屬性和方法,並且同時也有自身的屬性和方法。
上圖說明primary line 和secondary line 是line 的一種類型。
實例化(Instantiation)指定一個類的對象有這樣的方法,它能夠創建另外一個類的對象。
pole 對象有一個方法能夠創建transformer 對象。
聚合(Aggregation)是一種不對稱的關聯方式,在這種方式下一個類的對象被認為是一個“整體”,而另一個類的對象被認為是“部件”。
一個transformer bank 正好有3 個transformer 。在這個圖中transformer 能和一個transformer bank 相關聯,但當transformer bank 移除以后,transformer 依然能夠存在。
組成(Composition)是一種更為強壯的聚合方式,此種方式下,“整體”對象控制着“部分”對象的生存時間。
一個pole 包含一個或多個crossarm。在這個圖中當pole 被移除后,crossarm 就不能再使用了。因為pole 控制着crossarm 的生存時間。
在安裝完AE后,我們就可以在相關目錄中找到AE的OMD圖,
一般在 安裝目錄\DeveloperKit\Diagrams下
下為ArcEngine中OMD的截圖:
其中
OMD中的符號:
一個三角形符號 表示繼承
菱形的黑色小塊 表示組成
虛線前頭帶個箭頭 表示用來創建
* 表示對應關系1:N
一條直線表示 聯合
類的類別:
抽象類:不能創建或實例化,從來沒有一個抽象類的實例
用於定義子類的公共接口,子類繼承其定義的接口。
OMD符號為:二維的內部有陰影的矩形。
實例化類:不能創建,從別的對象獲得實例。
OMD符號為:3D矩形內部沒有陰影。
可創建的類:用New關鍵字創建對象或者從別的對象獲得運行實例。
OMD符號為:帶陰影的3D矩形符號。
屬性和方法:
屬性:啞鈴狀的圖標,Read(左側的啞鈴)和write(右側的啞鈴)
方法:指向左側的箭頭
接口:棒棒糖類型的圖標
圖表之間的連接:蟲洞
===========================
個人感覺在OMD圖中比較難理解的就是可實例化類CLASS。我做了以下例子去理解它:
ArcEngine中 workSpace 就是一個可實例化類,
WorkSpace不能用new創建,但可以通過WorkSpaceFarctory.Openfromfile()方法來創建.如下:
IWorkspaceFactory pWorkspaceFactory = new AccessWorkspaceFactoryClass();
IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(ConnectionString, 0);
但當我們嘗試用New去創建一個Workspace類時,如下:
IWorkspace pWorkspace = new WorkspaceClass();
就會出現以下錯誤:
“類型”ESRI.ArcGIS.Geodatabase.WorkspaceClass未定義構造函數;
所以,Class和CoClass的主要區別就是CoClass是帶構造函數的Class.以此它可以用New直接創建對象
