2014年5月3日 星期六

AutoCAD 與資料庫的思考 (一)-資料庫的基本概念

寫在之前:
這系列的文章並非什麼AutoCAD的教學文,而是阿賢個人在工作上遇到的各種狀況之思考與嘗試,最初阿賢還在作現場工作時,就常困擾於公司圖面上的小錯亂與混雜。因而在接觸繪圖工作後,很直覺的要求自已以圖塊來建立繪圖的基準。
然因老闆幾乎不使用電腦,因此對各種的圖面的表現方式機乎要求以手繪的標準方式為主,許多電腦繪圖上的使用的方式幾乎因此被限制著了,比如一個圖塊,如果在組立中是被半遮蔽的,該如何表現及保證在未來修改時不會被遺漏。這之中讓阿賢走了很多彎路,也花了很多的工作時間在作摸索,直到最後以資料庫的概念來思考,才似乎有了比較完整的布置,而這邊則是阿賢一點思索的分享



A、思考來源:

資料庫管理在資料庫管理中,將資料的處理分為幾個層次,即資料→資訊→表格→資料庫

在資料時,我們指的是未經整理的訊息,訊息具有特定的意義,但只有在特定的組合下才能被正確的理解,對這個能被理解的訊息,我們則稱之為資訊。
例如當我們說「雞蛋一斤35元」時,雞蛋、一斤、35元即是資料,而這整句話即是一個資訊。表格則是一次呈現多筆資訊的方式
那什麼是資料庫呢?
資料庫的功能即是累積並管理不同的資料來提供給我們資訊,
 累積所代表的是
  其有一個特定範圍內的完整資料,且不會混雜其它範圍外的資料。
例如一個班級的成績表,則不應有非這個班級的成績混入,也不應有任何一個人的缺失。
  相較於累積,管理是更大的一個重點
管理的意思是說當我們有一張班級的成績表,那麼這是一個表格,而如果我們能對其作出排序、篩選、尋找等的功能,那麼即可稱作是一個簡單的資料庫

回到AutoCAD上
我們可以將基本的圖元如直線、圓、弧…等視為資料。
圖面上的零件與機構如齒輪、機架…則是資訊。
任何一張我們所出的圖面雖與表格不同,但同樣代表我們所欲展現出資料的特定結果。
而我們希望能用特定的作圖方式與AutoCAD所提供的功能,讓其能展現出資料庫所提供的功能。

 B、資料庫的基本概念:資料結構、觀點 與 資料獨立性

所謂的資料結構,最根本的義意是資料擺放的方式,以windows的檔案系統來說,windows的目錄系統就是一種樹枝狀的資料結構。
比如說我們今天有了一個XX客戶的OO機種專案,我們可能就會在根目錄下開一個XX公司的子目錄,然後在其下再開一個OO機種的子目錄來存放我們這個專案的資料,如此一層一層為每個檔案作出區分即是windows的資料結構。但我們的思考並不總是這樣的。

今天我們將不同的客戶作為主要的資料區隔,是因為對於同一個客戶而言
不同購買專案可能有許多相同的要求,因些我們將其放置一起以增加我們找尋或比較時的方便性;
但改天我們可能希望了解同款的機台在不同客戶間的使用或維修情況,
那時我們可能就必需翻找不同目錄下的子目錄以尋得資料?
又或者,在某些時候,我們可能需要有作出以產線或年份為主的比較。
在這些不同的情況中,我們同樣的會希望資料就放在隔壁而不用上上下下翻找好幾層(當然阿賢知道windows有搜尋功能)

這些因應不同需求下而產生的側重點即為觀點,不同的觀點個自會有其最適合的資料結構,
而資料庫的功能即是對於每個不同的觀點,皆提供其相應結構下所需的資料。

同樣的以windows而言,如果我們為了解決上面的問題而複制了兩份資料建立了兩個獨立資料結構,那如何保證資料間的一致性呢?就像用隨身碟把檔案拷來拷去一樣,最後要不花大力氣去管理比較資料,就是一團亂。
因此資料庫中相同的資料只能擁有一個。以windows檔案系統來說,真正的檔案只有一個,但我們可以對每個檔案和資料夾建立「捷徑」,再以捷徑來建立我們所要的資料結構,至此資料結構義意則由最初的「資料實際擺放方式」轉變成了「依觀點而提供連結至資料的方式」,資料也就獨立於資料結構的系統之外,此即「資料的獨立性」

在機械繪圖中,3D的零件檔與2D中的圖塊使用都是資料獨立性的展現,而欲使AutoCAD 2D的繪圖模式向資料庫靠近,則大部份的圖元都必需以圖塊的方式來展現。

 C、資料獨立性的基礎:物件導向
物件與觀點物件的概念來自於程式設計,最初是希望以模擬現實世界組成的方式來架構程式以增進程式攥寫的效率,現實世界是以「物」組成的,因此程式的架構也應該以「物」來展現,如此眾人的思考才能有一個簡單的連結,能增進攥寫、維護以及共同建構大型程式上的效率。
以繪圖來說,3d繪圖中的零件檔或實體即是最初的物件概念,最終組合的組立檔則可視為一個完整的程式。因此對繪圖的人來說,初步的掌握物件的概念是比較容易的。
而3d繪圖在控制複雜機械與協同作業上,也的確比2d的繪圖有更好的表現。然而物件的概念卻也不只於此。

在程式設計中,物件有三個主要的特性,封裝、繼承、與同形異功
 封裝:
  封裝是指對物件的保護,一個物件為了維持其特殊性和完整性,不應該容易的就被外界隨意的修改或影響,因此與物件的互動應該要透過預定的方式來進行。
以現實來說,比如一顆蘋果,你可以對其進行「吃」的動作,但你不能隨意的將裡面的「核」替換成西瓜的種子。
以繪圖來說,3D的零件檔就是一個完整的物件,因此傳統的繪圖工作者常會覺得3D繪圖的修改困難,但這其實就是一種對物件的保護,會有如此感覺的原因,一部份是繪圖者對物件的概念不熟悉,如同傳統的程式語言使用者轉到物件語言一般。另一部份則是目前的軟體對物件的操控支援不足所致。
在AutoCAD 2D環境中,圖塊、group、以及建構線都能體現封裝的概念,也都有一定的用途,比較可惜的點則是group與圖塊無法並用。
 繼承:
  在程式設計中,繼承指的是一個已經定義的物件類別,能夠被其它的類別使用與擴展,例如我們定義了一個
「鳥 - 有翅、有羽、有雙足的動物 」  的類別,
而之後可以繼續加入不同的特徵來定義出不同的鳥類,如「鴿子」「老鷹」「白頭翁」之類的。
在機械設計中,繼承體現為兩種不同的方向,一個是半成品的後續加工;一個是則是組立的概念。任何一個組立檔,可以視為其所包含所有零件與次組立的子類別。
零件的後續加工,是一種單線式的繼承,而組立的架構,則是多重繼承的概念,而不管在程式或繪圖中,多重繼承如果沒有良好的規劃,都是一種容易出包的環境。
AutoCAD 2D中,圖塊能體現出繼承的性質,圖塊可以被組合,可以作後續的添補(或遮蓋),可以重覆的使用。
 同形異功:
  同形異功比較特別,這並不是一個源自實體的概念,而是源自於程式設計上的限制條件。
其指的是,如果我們有某一個概念,在程式設計中我們受於限制無法以單一的物件類別來表達,那麼我們則將幾個不同的類別取相同的名稱(或採用相同的呼叫方式),而程式設計軟體必需要能辨別並呼叫到正確的程式並執行。
例如加法的「加」,在我們的生活中機乎是同一個概念,但在程式中,受限於變數有整數、實數、陣列(矩陣)的分別,因此我們對其分別作出定義,而採用相同的命名為「+」,在使用的時候,讓電腦自行去分辨該呼叫的程式。
在電腦繪圖中,同形異功體現的地方在於3D軟體的出圖中,對於相同的零件能根據設定及組立狀態(剖切、遮蓋、隱藏線或圓弧轉折線的顯示等等,自動生成不同的圖面。
AutoCAD中,雖然圖塊中提供了「動態圖塊」的功能能以不同方式展現的圖塊,但所謂的軟體自動辨別則無從談起,而手工方式的同形異工功能無疑弱上許多。另外就是動態圖塊大部份人的使用方式其實是違反物件的獨立性原則的。

 D、幾個繪圖的觀點與觀點的展現:
觀點源自於需求,事實上,最基本的所謂「零件圖」「組立圖」「剖面圖」…就是一種觀點的區分,然而依造的卻是展現方式而非使用需求。傳統手繪中,繪圖是一件費時費力的事,因此會希望同樣的圖面能盡量的使用在不同的場合而形成這樣的區分方式。而這樣的結果就是,每家公司會依自已的使用狀況來作出觀點的微調,最後同樣的零件圖但每家的要求都有點不一樣。
3D軟體中虛線與圓弧轉折線的表示方式也一種觀點的展現。但畢竟受限於圖形的邏輯判斷而無法有太多的調整。
在此阿賢以自已的觀察來提出幾個源自於需求的觀點
業務(保養手冊)用、設計用、零件加工用、單純組立用、安裝檢核修改用、產線布置用
而其各自應該表現出的重點則為
業務(保養手冊用)
  快速繪制
  能展現出所有模組數量
  外型尺寸正確
設計用
  快速繪制與修改
  能簡單的辨識出每一個獨立的零件或模組
  能夠檢核零件尺寸正確及與干涉與否
  能快速的轉換為其它觀點所需的圖面
  基本上存於檔案中而不進行列印
零件加工
  圖形的正確性
  如果可能,僅量剖面
  孔或螺孔的細部處理
  尺寸及公差及各種細部加工的標註
單純組裝用
  零件種類、外形的辨識
  組立結構的辨識
  重要設定尺寸的展現
  零件圖的查詢引導
安裝檢核修改用
  現場限制及尺寸的展現
  機台結構尺寸的展現
  重要設定尺寸的展現
  所有模組位置的展現
  部份模組尺寸的展現
  零件圖的查詢引導
產線布置用
  現場限制的展現
  工程種類的區別
  機台的辨識
  工作範圍的辨識

  E、電腦繪圖工作上的觀點展現
前面有提到,觀點其實就是需求的表現,而在3D繪圖中的觀點展現則以工程圖上線型的顯示與否來表現。延伸這個邏輯,我們將觀點在電腦繪圖上的展現定義為兩個方面,一個是圖面的展現方式,一個是作圖的環境。

在圖面展現上,讓人最直接聯想到的就是AutoCAD所提供的「視埠」功能,除了提供3D投影為2D的功能外,還能夠利用視埠比例和圖層顯示的設定來對同一個模型空間的圖面作出不同的出圖形式。
然而這樣的作法有三個較大的缺失。

一 是視埠的對圖層的運用仍然不足,僅能控制圖元的顯示與否,而不能直接作線型樣式的改變,且與圖塊配合的話,設定將較為複雜。
二 是如果我們在同一個位置中採用不同的線條的顯示與否來表示不同的圖面狀態的話,這其實違反了資料庫的標準化原則,資料庫的標準化原則要求資料單體應該盡量的單純與精簡化,而多重線條的顯示與否顯然違背了這個要求。
三 則是視埠的使用會限制著圖元在模型空間中的位置,而模型空間本身,是可以呈現出一個二元的資料結構系統的,但採用圖紙空間命名管理的方式,則會將這個系統縮限至一元,且在辨識和管理上較不直覺。
畢竟對於繪圖及看圖者來說,第一個認的是圖而非文字,就如我們的工程圖標準一般,這違反了我們希望讓觀點儘量自由的原則。

因此在圖面的展現方式上,阿賢最後選擇了純粹以圖層管理來表現的方式,利用圖層中顏色、線型與出圖與否的快速切換來作為圖面觀點的表現。

至於作圖環境的展現,則是參考資料庫的作法,來思考資料庫化的繪圖軟體應該有哪些基礎的功能,例如圖元的搜尋、取代、如何快速的將設計用的圖型資料轉換為出圖所需的圖面、如何算是一個標準化的圖型資料。這其中有些是AutoCAD原有但少有人用的功能,有些是AutoCAD沒有但可能以自訂指令或Lisp達成的功能(還分阿賢會和不會的),而有些則是AutoCAD先天的架構上未曾考慮的就容後再述了。

沒有留言:

張貼留言