跳轉到內容

程式設計基礎/封裝

來自華夏公益教科書,開放的書籍,開放的世界

封裝是面向物件程式設計 (OOP) 的基本原理之一。 它指的是將資料與其操作這些資料的函式捆綁在一起。 封裝用於隱藏類內部結構化資料物件的屬性或狀態,防止未經授權的訪問。 通常,類中會提供公開可訪問的方法 (稱為 getter 和 setter) 來訪問這些屬性,其他客戶端類呼叫這些方法來檢索和修改物件內部的屬性。[1]

面向物件最重要的原則是 封裝:物件內部的資料只能透過公共 介面 訪問,也就是物件的函式。

如果我們想使用物件中儲存的資料來執行操作或計算派生值,我們定義與物件關聯的函式來執行此操作。 然後,當我們想要執行此操作時,我們呼叫物件上的函式。 我們認為從物件內部檢索資訊並在物件外部編寫單獨的程式碼來執行操作是一種不好的做法。

封裝有很多好處

  • 功能在 一個地方 定義,而不是多個地方。
  • 它在邏輯位置定義 - 資料儲存的位置。
  • 物件內部的資料不會被我們程式中完全不同的外部程式碼意外修改。
  • 當我們使用函式時,我們只需要知道函式會產生什麼結果 - 我們不需要了解物件的內部細節就能使用它。 我們可以切換到使用內部完全不同的另一個物件,而無需更改任何程式碼,因為這兩個物件具有相同的介面。

我們可以說物件“知道如何”處理自己的資料,而我們自己訪問其內部並處理資料則不是一個好主意。 如果一個物件沒有一個介面函式來做我們想做的事情,我們應該新增一個新的函式或更新一個現有的函式。

有些語言具有允許我們嚴格執行封裝的功能。 在 Java 或 C++ 中,我們可以定義物件屬性的訪問許可權,並使其非法從物件函式外部訪問它們。 在 Java 中,對於所有屬性編寫 setter 和 getter 也是最佳實踐,即使 getter 只檢索屬性,而 setter 只是將屬性分配為傳入引數的值。

在 Python 中,封裝不是由語言強制執行的,但有一個約定我們可以用來指示一個屬性應該私有且不是物件公共介面的一部分:我們以下劃線開頭它的名稱。 Python 還支援使用屬性裝飾器來替換簡單屬性,而不會改變物件的介面。

關鍵詞

[編輯 | 編輯原始碼]
抽象
一種組織計算機系統複雜性的技術,使功能可以與具體的實現細節分離。[2][3]
訪問器
用於返回私有成員變數的值的方法,也稱為 getter 方法。[4]
封裝
一種語言機制,用於限制對物件某些元件的直接訪問。[5]
資訊隱藏
在計算機程式中將設計決策與程式其他部分分離的原則。 請參閱封裝。[6]
修改器
用於控制對私有成員變數更改的方法,也稱為 setter 方法。[7]
私有
一種訪問修飾符,將屬性或方法的可見性限制為定義它的類。[8]
公共
一種訪問修飾符,將屬性或方法的可見性對所有其他類開放。[9]

參考資料

[編輯 | 編輯原始碼]
華夏公益教科書