| ArcInfo 的使用方式由兩種:其一便是直接使用ArcGIS 桌面應(yīng)用程序,ArcMap 和ArcCatalog,進(jìn)行GIS 操作;其二,可以使用其中提供的框架構(gòu)建開發(fā)自己的GIS 應(yīng)用程序。 數(shù)據(jù)建模人員需要站在以上比這兩種方式更高的位置來完成自己的工作。用戶大多數(shù)情況下都會直接使用預(yù)先提供的ArcGIS 桌面應(yīng)用程序創(chuàng)建Geodatabase。當(dāng)然有時候也會需要你進(jìn)行一些代碼定制,特別是在專業(yè)化程度很高的復(fù)雜數(shù)據(jù)模型的模擬上,代碼的工作更是不可或缺。 本書的目標(biāo)之一便是介紹數(shù)據(jù)建模的概念,這樣的數(shù)據(jù)建模不僅在ArcInfo 的應(yīng)用程序中適用,還在ArcInfo 的軟件組件中使用,這個軟件組建便是我們熟悉的所謂的ArcObjects。 本書中,從使用ArcInfo 軟件時遇到的概念說起,然后再使用對象模型圖來表現(xiàn)ArcInfo中的這些概念,以利于讀者理解。 比如,首先從一個ArcCatalog 用戶的角度來討論geodatabase、要素數(shù)據(jù)集和要素類的結(jié)構(gòu)。接著從程序員的角度用模型圖的相關(guān)部分介紹geodatabase 數(shù)據(jù)的訪問對象。 這兩種視圖模式有相似之處,但是也有很大差別。應(yīng)用程序的用戶界面有時隱藏了對于程序員來說非常重要的一些軟件組件細(xì)節(jié)。本書的目標(biāo)是讓你能夠站到比用戶和開發(fā)者這兩個角度更高的位置處理數(shù)據(jù)建模的工作。 1.8.1 解讀類模型圖 下面圖示中,便是貫穿本書的對象模型圖的鑰匙。 這些符號是基于UML 畫圖工具創(chuàng)建的,UML 符號是面向?qū)ο蠓治龊驮O(shè)計的工業(yè)圖樣標(biāo)準(zhǔn)。 對象模型圖中提供的信息非常多,是對象瀏覽器中信息的重要補(bǔ)充。Visual Basic,或者其它的開發(fā)環(huán)境,都會列出所有的類和成員,但不會指明這些類之間的關(guān)系。所以,對象模型圖是非常有利于讀者對ArcInfo 組件的理解的! 本書使用UML 來描述ArcInfo 組件,即ArcObjects,并描述你能夠創(chuàng)建的數(shù)據(jù)模型。 以下詳細(xì)說明。 1.8.2 類和對象 在UML 圖中有三種類型的類:抽象類(abstract class)、可創(chuàng)建類(createable class)與可實(shí)例化類(instantiable class)。 抽象類不能用以創(chuàng)建新對象,但可以用來指定子類。舉個例子,“l(fā)ine”(線)是“primaryline”(干線)和“secondary line”(副干線)的抽象類。 可創(chuàng)建類指的是那些你能夠直接使用開發(fā)環(huán)境中的對象定義語法來創(chuàng)建對象。比如在Visual Basic 中是這樣書寫:Dim As New <object> 或者CreateObject <object>。 可實(shí)例化類不能夠直接創(chuàng)建新對象,但是這種類的對象能夠作為其它對象的屬性被創(chuàng)建或是從其它類的方法中創(chuàng)建。 在Visual Basic 對象瀏覽器中,你能夠查看ArcInfo 所有的可創(chuàng)建類和可實(shí)例化類,但看不到抽象類。 1.8.3 關(guān)聯(lián) 在抽象類、可創(chuàng)建類和可實(shí)例化類之間,有幾種存在的關(guān)聯(lián)(或稱關(guān)系)。 聯(lián)系(association)便描述了類之間的關(guān)聯(lián)。在兩端的類中可以定義多重性( Multiplicity)關(guān)聯(lián)。 在這張圖上,一個業(yè)主能有擁有一塊或多塊宗地;同樣地,一塊宗地可以被一個或多個業(yè)主所共有。 多重性關(guān)聯(lián)就是限制對象類與其它對象關(guān)聯(lián)的數(shù)目關(guān)系。以下是用于多重性關(guān)聯(lián)的符號: 1 —— 一個并且只有一個,這種多樣性是可選的;如果不標(biāo)明,則默認(rèn)為“1” 0..1 —— 零個或一個 M..N —— 從M 到N(正整數(shù)) *或者0… * —— 從零到任意正整數(shù) 1… * —— 從一到任意正整數(shù) 類繼承(type inheritance)定義了專門的類,它們擁有超類的屬性和方法,并且同時也有自身的屬性和方法。 上圖說明primary line 和secondary line 是line 的一種類型。 實(shí)例化(Instantiation)指定一個類的對象有這樣的方法,它能夠創(chuàng)建另外一個類的對象。 pole 對象有一個方法能夠創(chuàng)建transformer 對象。 聚合(Aggregation)是一種不對稱的關(guān)聯(lián)方式,在這種方式下一個類的對象被認(rèn)為是一個“整體”,而另一個類的對象被認(rèn)為是“部件”。 一個transformer bank 正好有3 個transformer 。在這個圖中transformer 能和一個transformer bank 相關(guān)聯(lián),但當(dāng)transformer bank 移除以后,transformer 依然能夠存在。 組成(Composition)是一種更為強(qiáng)壯的聚合方式,此種方式下,“整體”對象控制著“部分”對象的生存時間。 一個pole 包含一個或多個crossarm。在這個圖中當(dāng)pole 被移除后,crossarm 就不能再使用了。因?yàn)閜ole 控制著crossarm 的生存時間。 1.8.4 用圖形符號描述模型 起初你也許不大習(xí)慣使用這種圖形符號,可以先試著讀解上面的例子,并結(jié)合自己的實(shí)際情況考慮。嘗試使用這樣的工作方法,而后你將會發(fā)現(xiàn)這樣的圖的讀解釋很容易的,而且你也覺得其實(shí)花點(diǎn)力氣去理解這些符號真的幫助很大——它用簡單而富有表現(xiàn)力的方法將對象模型很好的展示給我們,這樣理解ArcInfo 組件的概念便輕松簡單多了。 如果你需要定制要素,擴(kuò)展geodatabase 數(shù)據(jù)訪問對象,那么這些UML 符號也是很重要并可以使用的。 |