菜鳥編三維地質建模系統-設計模式(1)

來源:互聯網
上載者:User
 

三維地質建模系統現在做的公司比較多,成熟的國外產品有GOCAD, EarthVision, GemCom和Surpac等,效能要求高、價格昂貴、地質應用的目的也不同,國內也有超圖等很多公司在做,但是同樣在海量資料下只能進行簡單的應用分析。由此看出編這個系統可真是難啊!我這個菜鳥既然準備編這個系統,就準備先加強基本功,第一步:深入理解設計模式!

設計模式是什嗎?首先要明白一點,懂了設計模式就真正的懂得了物件導向分析和設計的精髓,這就告訴我們,設計模式就是一些已經成型的、最常用的、在實戰中總結出來的進行物件導向分析和設計的固定模式,就相當於學習寫古詩和學習唐詩三百首的關係,但是話又說回來了,GoF的23種模式是最常用的、最基本的,但是並不代表所有的,學習設計模式最重要的是學習一種思想,而思想是指導行為的一切,當你具備這種思想的時候,你就會形成更多的自己的模式,到後來達到最高的境界,你的心中已經沒有了設計模式的概念,但是你的分析和設計都已經完全符合設計模式的思想。正所謂“手中無劍,心中也無劍”

設計模式所追求的就是物件導向系統的分析和設計所追求的,無外乎兩點:一是高內聚,二是低耦合。為什麼追求這兩點呢?這個可以用我國的四大發明之一:活字印刷術來說明,為何火藥、指南針、造紙術都是從無到有,從未知到發現的偉大發明,而活字印刷僅僅是從刻版印刷到活字印刷的一次技術上的進步,為何不是評印刷術為四大發明之一呢?在發明活字印刷術之前,用的是刻板印刷術,要修改某個字,必須重刻,要加字,必須重刻,要重新排列,必須重刻,印完這本書後,此版已無任何可再利用價值。用了活字印刷術後就好了,第一,要修改,只需更改要改之字,此為可維護;第二,這些字並非用完這次就無用,完全可以在後來的印刷中重複使用,此乃可複用;第三,若要加字,只需另刻字加入即可,這是可擴充;第四,字的排列其實有可能是豎有可能是橫排,此時只需將活字移動就可做到滿足排列需求,此是靈活性好。活字印刷術正是實現了高內聚、低耦合才達到了“活”的目的,軟體開發亦然。

在完全不瞭解設計模式的情況下,我們從哪個方面開始思考呢?首先就是從對象的特點入手,對象由成員和方法(亦即特徵和行為)組成,對象可以建立、刪除,對象可以繼承、組合、多態。這樣看來,設計模式肯定和上面這些相關嘍!

在結構化語言編程時代,沒有對象的概念,函數和變數各自獨立存在,程式中全域變數處處可見,整個程式的耦合性很高,動了一小段代碼有可能就要修改很多地方,當大型軟體越來越複雜的時候,軟體工程行業出現了危機,軟體總是不能按期交工,於是一些大師提出了物件導向編程的理念,這是通過觀察大自然的結果,在整個宇宙中,各個事物都是以獨立性和聯絡性的辯證方式存在著,都具有著特徵和行為這兩種狀態,特徵和行為之間也是可以互相影響的:

獨立性:每種事物都有自己的一些可描述的特徵,這些特徵可能是靜態不變的(比如一個人的原籍、血型、生日等等),也可能是動態可變的狀態(比如一個人的身高、體重等等),當然變與不變也要利用相對性原理視具體情境而定。另外每種事物都有自己的一些行為,這些行為可能是自身特徵的動態變化(比如一個人的長個、增肥、減肥等等),也可能是對外界的作用過程(比如一個人的慈善捐贈、做義工等等)。

聯絡性:萬事萬物之間都是有聯絡的,這是從哲學的角度來說的話,在我們人類從解決問題的實際角度出發,就要把這個聯絡進行一個劃分和抽象了,比如說木星品質很大,但是它離我們很遙遠,所以我們主要受腳下地球的引力影響,在宇宙中主要有四種力(萬有引力、電磁力、強力、弱力),其中萬有引力算得上一個全域變數,電磁力的作用範圍就要小很多,而強力和弱力就只能算做一個局部變數了。說到這裡問題就出來了,不是說要降低對象之間的耦合性嗎?現在整個萬事萬物都有聯絡還解耦個P啊!是這樣的,站在從不同的層面來看,起主導作用的力都不一樣,在宇宙宏觀的角度來說,起主導作用的就是萬有引力,什麼電磁力強力弱力這些都可以忽略不計了;站在地球上自然界的大視角來說,電磁力起著主導作用,萬物的生長凋敗、人類行走站立全都是靠的電磁力;站在原子內部的微觀層面來看,強力和弱力起著主導作用,在這個層面,牛頓的力學定律已經失效了,由此誕生了量子力學。所以在不同的軟體需求情境下,廣泛的聯絡性是可以避免和最佳化的。

由上我們可以總結出:一個對象具有靜態和動態特徵,也具有針對自身和針對外界的行為,我們馬上就會發現一個對象如果擁有針對外界的行為會提高對象之間的耦合性,確實是這樣,在基於對象的編程中(VB、BCB等),針對事件(滑鼠按下、拖動、鍵盤按鍵、彈起等事件)的響應就是如此,不過這並不是純粹的物件導向的編程,而是基於對象的。

如果要降低對象之間的耦合性,我們應該盡量將對象與對象之間的互動不要放在對象內部,而是另外增加一個神經中樞的控制機構,打個比方說眼睛看見美女後不是直接控制頭做扭轉動作去回頭再看一眼,而是將美女的視覺資訊傳送給大腦,由大腦來分析並決定做什麼。

下一篇談繼承、組合和多態。

(文中部分內容參考了書籍《大話設計模式》)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.