“瑜珈山夜話” —- 閑談“封裝與抽象”

來源:互聯網
上載者:User
   摘要:封裝和抽象是C++裡面的重要概念,本文試著對此作一下簡單的討論。
     
    封裝是OO的重要特徵,這一點是毫無疑問的,至於算不算的上是OO的三大特徵之一(另外兩個是繼承、多態),目前仍有爭論,我也不想在這個問題上作過多的糾纏。
    什麼是封裝呢?封裝是人們對現實世界中解決問題時,為了進行簡化問題,對研究的對象所採用的一種方法,一種資訊屏蔽技術。例如:打電話的時候,我們只需簡單的按幾個按鈕就可以了,我們沒有必要去瞭解電話內部的線路、網路的串連,這樣一來通過對實現細節的封裝,就使得本身很複雜的問題變得非常簡單,容易操作,並且出錯的幾率大大減小。
    封裝的主要目的就是達到介面和實現的分離。通過封裝,對內我們將實現細節隱藏起來,對外我們則通過介面向客戶提供相應的服務。將介面和實現分離是避免所謂的“漣漪現象”的關鍵(漣漪現象,即“一石激起千層浪”。在軟體開發過程中,經常會出現為了某個目的,修改一個檔案A,結果必須修改與之相關的其他檔案B、C,修改檔案B、C就要修改相關的檔案D、E、F、G,如此迴圈往複,就會造成大規模的修改,最終會以瀑布式擴散到系統的各個地方。就象在湖中央投下了一顆石子,造成整個湖面的波動,“漣漪現象”由此而得名)。
    將介面和實現分離是軟體重複使用的一個手段,其作用主要體現在以下4個方面:
      1、降低了系統內部各個模組之間的耦合,使系統更有彈性。
      2、將軟體中的BUG精確定位到較小的模組,有助於軟體的調試工作。
      3、降低系統的複雜性,使客戶更易理解和使用。
      4、分離造成的簡單性,更有助於軟體的重複使用。
   
    抽象是對象的最簡化的介面,他向客戶提供了所期望的服務。理解抽象的關鍵,在於介面,抽象是對象介面的抽象,對於特定的對象,抽象就是一個明確的介面,對於電話,按鈕就是他的介面(抽象)。
    用好抽象的關鍵在於對所研究問題的深刻理解。設計的比較好的抽象可以把說明從實現中分離出來,通過提供必備的資訊,隱藏起實現的細節,讓客戶以較為安全和客預測的方式使用對象,同時通過降低複雜性,以簡單介面的方式降低學習難度,提高學習效率。
    好的抽象,應該使客戶打消“偷窺”的念頭(不過總是有些人想方設法去窺視具體的實現),按照抽象編程,使得最終的客戶代碼更加的簡單、安全和穩定,在這方面,標準程式庫和各種准標準程式庫做得最為出色。
    一個好的抽象必須提供明確的、完整的、易於理解的說明,依賴抽象編程,實際上就是依賴這些說明進行編程,他比依賴實現編程有很大的優勢:
    1、閱讀說明比閱讀原始碼容易得多,時間節省了很多,也更容易理解。
    2、通過說明的完整性(例如先置條件、後置條件、適用範圍等),我們可以很清楚的瞭解一個類的完整性。
    3、通過說明,我們的介面具有更大的彈性和可擴充性(例如我們可以採用更加有效方法實現sort介面)。
    4、規定介面必須有說明,把那些沒有相應說明的介面定義為錯誤,使得類的維護更加容易。
    一個好的說明應該是規定介面必須提供的服務,必須完成的任務,而不是已經做過的事情。
   
       封裝與抽象是密不可分的。
    封裝通過提供抽象,隱藏了實現的細節,通知客戶那些是可以隨便使用的穩定的服務,那些是隨著版本的更新有可能發生變動的細節,例如有一個介面:void sort();通過介面的說明,客戶可以知道這個介面用來進行排序,具體的排序方法是什麼,客戶無需關心,可能在版本1中,採用的是冒泡排序,在升級的版本2中,採用的則是快速排序。客戶既然不用關心細節,那麼使用什麼方法對客戶的代碼不會帶來任何影響。對於一個已經公布的介面/抽象,我們不能夠隨意更改,例如在版本1中提供了sort介面,那麼在升級的版本2中必然也要有這個介面,因為版本公布之後,我們就無法知道,這個介面是不是有人在使用,如果我們在版本2中禁止了sort介面,那麼所以使用版本1的客戶代碼無法升級,若強行升級,勢必帶來客戶代碼的中斷,這個特點在COM中尤為明顯。
   

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.