理解對象模型圖(Reading OMDS)


引言

這篇文章大部分內容是翻譯的幫助資料里的東西。學習技術,英語是個好工具。一直把英語的地位看得和技術一樣重,也會強迫自己看英語版的技術書籍(都是PDF版的,外國的書買不起)、資料。但一開始,這完全是一件痛苦萬分的事,大量的專業詞匯和概率總是讓我摸不着頭腦。后來,慢慢積累詞匯查找概念對英語這塊不恐懼了,趁現在還處在記憶力黃金期希望能多補一補專業英語。這需要長期積累與堅持。這篇文章不光是翻譯的內容,還有平常積累的東西和思考總結的東西。願有個好的開始……

(單是翻譯過來的話,文章不好理解,有些地方稍微改變了一下表達方式,但內容沒變,看內容的時候請記住和對比符號。)

資料來源

開發幫助:ArcObjects help for .NET(2010)/Learning  ArcObjects/Getting started with ArcObjects .NET/Reading OMDS

內容

對象模型圖解采用的是UML(統一建模語言)。對象模型圖是對對象瀏覽器的補充,它列出了開發環境中沒有的類與成員、類與類之間的關系和結構,有了對象模型圖能更好的理解AO的組件。(獲得OMDS的途徑有兩種一種是通過開發幫助,找到相應命名空間,在它的內容節點找到Diagrams,另一種是在安裝路徑下“……ArcGIS/DeverloperKit10.0/ Diagrams”)。

1.“類”的類型

1

上圖有三種類型的框分別代表是AbstractClass、CoClass、Class三種類型的類。(一定要記住這三種框代表的類)

AbstractClass(抽象類):抽象類,不能用它創建對象(只能通過子類繼承)。比如,一個“Line”是“primary Line”和“secondary Line”的抽象類。抽象類對於想要創造出自己的子類是非常重要的(它顯示了在繼承中哪些是特定的接口,哪些是可選擇的接口(optional Interface))。子類必須繼承哪些特定接口的所有實現,不然會報錯。

CoClass(組件對象類):組件對象類可以直接聲明新對象來創建。

Class(類):不能直接創建對象,但可以作為一個類的屬性或通過另一個類的實例化來創建類對象。(原因是這種類沒有構造函數)

2.類之間的關系

(1)關聯(Associations

3

關聯在其兩端都定義了多樣性。多樣性是對能與另一個對象關聯的對象數目的一種限制。下面列出了可能的多樣性記:
1—表示只有一個對象與另一個對象發生關系。這種多樣性的顯示是可選的;如果沒有顯示多樣性,則暗示該多樣性為“1”。
0…1—表示多樣性為 0 或 1。
M…N—表示多樣性為 M 到 N(正整數)。
*或 0…*—表示多樣性為從 0 到任意大的正整數。
1…*—表示多樣性為從 1 到任意大的正整數

在這個模型圖中表示owner 可以擁有一個或多個 land parcels,而一個 landparcel 也可以由一個或多個 owners 占有

(2)繼承(inheritance)

4

繼承用來定義共享父類的屬性和方法,同時又具有自己獨特的屬性和方法的特定類。

這個模型圖表示 primary line(可創建類)和 secondary line(可創建類)都是 line(抽象類)的子類。

(3)實例化(Instantiation)

5

實例化表示某個類的對象具有創建另一個類的對象的方法。

上圖表示一個 pole 對象可能具有創建 transformer 對象的方法。

(4)“組成”或“組合”(Composition

6

組成是一種更強的關聯,在這種關聯中,“whole”類對象控制着“part”類對象的生命周期。

上圖表示一個 pole 包含一個或多個 crossarms。在這個設計中,當 pole 被刪除時crossarm 也就不存在了。Pole 對象控制着 crossarm 對象的生命周期。

(5)多個關聯(N-ary association)

7

n元關聯是超過兩個以上類的關聯。鑽石的地方代表了關聯的分支處。

3.接口

接口是COM對象的接入點。有入接口(inbound  interfaces),表示了類的屬性和方法;出接口(outbound interface),它允許類和其他類的互動。

捕獲a

(1)接口繼承

因為接口在ArcObjects中是COM接口,他們都繼承IUnknown,是COM的基礎。如果一個接口被另一個接口繼承,初始的接口也是繼承接口的成員。

捕獲b

比如,IPoint繼承自IGeometry,IGeometry的成員也是IPoint的成員。這種繼承允許你繼承IPoint后,直接使用IGeometry的成員,而不需要查詢接口。

接口繼承使用得很廣泛。雖然COM一旦部署好后,就不能更改。但是一個接口可以繼承自原來的接口進行成員的添加以及補充。比如說IEditor2接口繼承了IEditor接口,添加了新的成員。

(2)入接口

入接口在OMDS上擁有一些特殊的符號,提供了一些列表之外的信息。

    星星在其他類庫定義的接口:如果一個接口的前綴是一個類庫的名字,比如,esriSystem.IName,這個接口繼承自一個類庫而不是實現它。這個類庫的名字反映了接口定義的地方。

    星星選擇接口:有些接口是可以選擇的繼承接口。比如,一個抽象類就有些選擇接口,它的子類可以選擇是否實現選擇接口但必須實現非選擇接口。這種接口前面的前綴是(Optional)。

    星星選擇實例實現的接口(Interface Implemented in select instances):有些類有不同的實現,而不是有多個類去繼承一個基類或者抽象類。這種情況,某一個接口就要實現這種選擇實例實現的接口。

    捕獲e

看上圖,the RasterDataset 類可以被不同工作空間實例化,根據獲得的數據類型。當file-based 數據初始化了一個  RasterDataset 類,  ITemporaryDataset interface 就被實現了;然而,如果ArcSDE software-based 初始化了一個 RasterDataset 類,這個 IRasterPyramid2 接口就被實現了。

這種類的前綴是(instance)。

(3)出接口

  出接口也叫事件接口。

(4)接口成員

接口成員包括屬性(對象的狀態)、方法(執行行為)。

屬性:用類似啞鈴狀的東西表示。包括只讀(get)、只寫(put)、可讀可寫(get/set)。還可以是引用類型的屬性(Reference)用空心表示。

方法:用箭頭表示。

捕獲f

補充:還包括一些枚舉,結構。更多符號標記見下圖。(每個OMDS里面都有的)

捕獲

注意這些符號的時候,細節也很重要。

比如:接口有空心、實心的,空心表示入接口,實心表示出接口。接口符號還有長短,長的接到方框的代表列出了這個接口的全部成員,而短的沒列出來完。

了解一些基本的類、接口和他們的關系,是很重要的。同時專業英語詞匯也是很有必要記住的,有空總結出來分享給大家。

九層之台,始於壘土。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM