1. 程式人生 > >面向對象三大特性之一-------封裝的意義

面向對象三大特性之一-------封裝的意義

現實 block 電腦 升級 以及 申請 沒有 功能性 地理

思考

封裝的意義:

封裝從形式上來說,它將數據和操作界定在了某個圈子內,如果外界想要訪問數據,或者使用某個操作,必須通過特殊的手段向這個圈子申請。 這個圈子便是類,特殊的手段就是接口。
即假如外界想要訪問類中的數據或者使用類中某個方法的具體操作,必須通過這個類事先提供的接口來訪問,這個接口一般就是方法名。
一開始學封裝時產生的疑惑是 為什麽要將數據和操作封裝起來,然後想要使用的時候再通過接口訪問,這不是很麻煩嗎?
是的,確實很麻煩。但麻煩歸麻煩,它帶來的好處是這小小的麻煩無法所抵抗的。


首先把封裝所帶來的的優點闡述一遍:

  • 封裝提高了了代碼的復用性和可維護性。

    封裝為編程的模塊化提供了基礎,封裝好的每一個類相當於就是一個小的模塊。而模塊化的好處就是分工明確外加可以重復利用(比如一個類實現一個小功能,當某些地方需要用到這個功能的時候,就可以很方便地調用它,不同自己花大代價去實現,另外分工明確的好處就是當某一個功能出了問題時,僅需要修改它自身就好,對其他的功能並不造成影響)。

  • 封裝提高了編程的安全性和靈活性。

    封裝的核心在於面向接口(這裏的接口指的是方法名),什麽叫做面向接口呢?即對於類的編寫者和類的使用者來說,唯一不變的東西便是接口,接口是兩方的中介。接口讓類的實現者可以根據需求動態地修改封裝內的東西卻不影響外部的調用者,同時接口也讓外部調用者清楚地認識到這個類哪些部分是對自己開放的,哪些地方不可以碰。

  • 封裝簡化了編程。

    因為封裝的緣故,將會有大量事先被編好的具備各種功能的類,這些類組成了一個十分豐富的類庫。當我們在編程的時候,需要實現某個功能的時候,可以選擇從類庫中找找,有沒有符合自己需求的類,而不是絞盡腦汁去想辦法從零去實現一個具體功能。


舉個例子來更好地理解封裝帶來的好處,比如假如你需要一臺電腦,如果沒有封裝的話,你需要從零開始造一臺電腦(嗯,好像玩大了)。但有了封裝的話,相當於你只要把一臺電腦所需要的部件都買回來(每個部件相當於一個類),零件廠家就是類的編寫者,它們將各種元器件封裝制造成有相對獨立功能的電腦部件(比如 cpu 電源 顯卡 內存條 等等),每個電腦部件都有它的插口或者連接線可以順利地插到或者連接到主板上。
在這裏需要註意一下,這些插口和連接線以及在主板上的與它們對應卡槽、插槽、或者線槽就相當於是類提供的接口。所以從這個角度我們可以看出接口有著規範和契約的作用,回到實際例子上,電腦部件廠家們都遵循著這些規範有什麽好處呢?好處就是這些廠家可以專心只生產某幾個他們自家工廠有優勢的零部件,而不需要生產一整臺電腦。而作為我們消費者(也就是類的調用者),當我們想要升級電腦上某個部件(比如內存從4G升到8G)或者某個部件壞了,只需要到市面上買一根升級或者替換用的相應內存條,裝到我們電腦上就可以,而不是重新買一臺電腦。
這就是封裝以及面向接口帶來的好處,封裝讓模塊化成為現實,面向接口降低模塊間的耦合性,提高了整個系統的靈活性和可維護性。(囧 明明是講封裝的 談著談著就談到了接口.....畢竟類中提供的接口並不是真正的接口...只是在功能性質上有些接近)
---
參考鏈接

面向對象三大特性之一-------封裝的意義