引言
這篇文章大部分內容是翻譯的幫助資料里的東西。學習技術,英語是個好工具。一直把英語的地位看得和技術一樣重,也會強迫自己看英語版的技術書籍(都是PDF版的,外國的書買不起)、資料。但一開始,這完全是一件痛苦萬分的事,大量的專業詞匯和概率總是讓我摸不着頭腦。后來,慢慢積累詞匯查找概念對英語這塊不恐懼了,趁現在還處在記憶力黃金期希望能多補一補專業英語。這需要長期積累與堅持。這篇文章不光是翻譯的內容,還有平常積累的東西和思考總結的東西。願有個好的開始……
(單是翻譯過來的話,文章不好理解,有些地方稍微改變了一下表達方式,但內容沒變,看內容的時候請記住和對比符號。)
資料來源
開發幫助:ArcObjects help for .NET(2010)/Learning ArcObjects/Getting started with ArcObjects .NET/Reading OMDS
內容
對象模型圖解采用的是UML(統一建模語言)。對象模型圖是對對象瀏覽器的補充,它列出了開發環境中沒有的類與成員、類與類之間的關系和結構,有了對象模型圖能更好的理解AO的組件。(獲得OMDS的途徑有兩種一種是通過開發幫助,找到相應命名空間,在它的內容節點找到Diagrams,另一種是在安裝路徑下“……ArcGIS/DeverloperKit10.0/ Diagrams”)。
1.“類”的類型
上圖有三種類型的框分別代表是AbstractClass、CoClass、Class三種類型的類。(一定要記住這三種框代表的類)
AbstractClass(抽象類):抽象類,不能用它創建對象(只能通過子類繼承)。比如,一個“Line”是“primary Line”和“secondary Line”的抽象類。抽象類對於想要創造出自己的子類是非常重要的(它顯示了在繼承中哪些是特定的接口,哪些是可選擇的接口(optional Interface))。子類必須繼承哪些特定接口的所有實現,不然會報錯。
CoClass(組件對象類):組件對象類可以直接聲明新對象來創建。
Class(類):不能直接創建對象,但可以作為一個類的屬性或通過另一個類的實例化來創建類對象。(原因是這種類沒有構造函數)
2.類之間的關系
(1)關聯(Associations)
關聯在其兩端都定義了多樣性。多樣性是對能與另一個對象關聯的對象數目的一種限制。下面列出了可能的多樣性記:
1—表示只有一個對象與另一個對象發生關系。這種多樣性的顯示是可選的;如果沒有顯示多樣性,則暗示該多樣性為“1”。
0…1—表示多樣性為 0 或 1。
M…N—表示多樣性為 M 到 N(正整數)。
*或 0…*—表示多樣性為從 0 到任意大的正整數。
1…*—表示多樣性為從 1 到任意大的正整數
在這個模型圖中表示owner 可以擁有一個或多個 land parcels,而一個 landparcel 也可以由一個或多個 owners 占有。
(2)繼承(inheritance)
繼承用來定義共享父類的屬性和方法,同時又具有自己獨特的屬性和方法的特定類。
這個模型圖表示 primary line(可創建類)和 secondary line(可創建類)都是 line(抽象類)的子類。
(3)實例化(Instantiation)
實例化表示某個類的對象具有創建另一個類的對象的方法。
上圖表示一個 pole 對象可能具有創建 transformer 對象的方法。
(4)“組成”或“組合”(Composition)
組成是一種更強的關聯,在這種關聯中,“whole”類對象控制着“part”類對象的生命周期。
上圖表示一個 pole 包含一個或多個 crossarms。在這個設計中,當 pole 被刪除時crossarm 也就不存在了。Pole 對象控制着 crossarm 對象的生命周期。
(5)多個關聯(N-ary association)
n元關聯是超過兩個以上類的關聯。鑽石的地方代表了關聯的分支處。
3.接口
接口是COM對象的接入點。有入接口(inbound interfaces),表示了類的屬性和方法;出接口(outbound interface),它允許類和其他類的互動。
(1)接口繼承
因為接口在ArcObjects中是COM接口,他們都繼承IUnknown,是COM的基礎。如果一個接口被另一個接口繼承,初始的接口也是繼承接口的成員。
比如,IPoint繼承自IGeometry,IGeometry的成員也是IPoint的成員。這種繼承允許你繼承IPoint后,直接使用IGeometry的成員,而不需要查詢接口。
接口繼承使用得很廣泛。雖然COM一旦部署好后,就不能更改。但是一個接口可以繼承自原來的接口進行成員的添加以及補充。比如說IEditor2接口繼承了IEditor接口,添加了新的成員。
(2)入接口
入接口在OMDS上擁有一些特殊的符號,提供了一些列表之外的信息。
在其他類庫定義的接口:如果一個接口的前綴是一個類庫的名字,比如,esriSystem.IName,這個接口繼承自一個類庫而不是實現它。這個類庫的名字反映了接口定義的地方。
選擇接口:有些接口是可以選擇的繼承接口。比如,一個抽象類就有些選擇接口,它的子類可以選擇是否實現選擇接口但必須實現非選擇接口。這種接口前面的前綴是(Optional)。
選擇實例實現的接口(Interface Implemented in select instances):有些類有不同的實現,而不是有多個類去繼承一個基類或者抽象類。這種情況,某一個接口就要實現這種選擇實例實現的接口。
看上圖,the RasterDataset 類可以被不同工作空間實例化,根據獲得的數據類型。當file-based 數據初始化了一個 RasterDataset 類, ITemporaryDataset interface 就被實現了;然而,如果ArcSDE software-based 初始化了一個 RasterDataset 類,這個 IRasterPyramid2 接口就被實現了。
這種類的前綴是(instance)。
(3)出接口
出接口也叫事件接口。
(4)接口成員
接口成員包括屬性(對象的狀態)、方法(執行行為)。
屬性:用類似啞鈴狀的東西表示。包括只讀(get)、只寫(put)、可讀可寫(get/set)。還可以是引用類型的屬性(Reference)用空心表示。
方法:用箭頭表示。
補充:還包括一些枚舉,結構。更多符號標記見下圖。(每個OMDS里面都有的)
注意這些符號的時候,細節也很重要。
比如:接口有空心、實心的,空心表示入接口,實心表示出接口。接口符號還有長短,長的接到方框的代表列出了這個接口的全部成員,而短的沒列出來完。
了解一些基本的類、接口和他們的關系,是很重要的。同時專業英語詞匯也是很有必要記住的,有空總結出來分享給大家。
九層之台,始於壘土。