為什麼要使用封裝? - Vaibhav Singh

banq發表於2020-06-03

Java是一種物件導向的程式語言(它符合純物件導向的大多數屬性),它包括四個OOP支柱(物件導向的程式設計)概念,即:
  • 抽象化
  • 封裝形式
  • 繼承
  • 多型性

今天,我將深入探討稱為封裝的重要支柱。
作為參考,封裝可以定義為“ 將資料和功能繫結到一個單元中,這樣就可以保護它們免受外界干擾和濫用。”
因此,讓我們首先列出我們想到的問題:
為什麼它是重要的支柱?為什麼要使用它?
Java必須支援/實現封裝的哪些機制?
封裝與資料隱藏?

為什麼重要?
正如定義所言,要確保不受外界干擾和濫用。讓我們以一個複雜的物件為例來理解濫用。
因此,我有一個封裝的Employee 類,其中包含員工詳細資訊(例如id,薪金,部門,專案列表等)和Project類物件,其中包含與專案相關的詳細資訊(例如id,名稱,成本等)作為一個單元。

class Employee 
{
  String name;
  Date age;
  Date dateOfJoining;
  .. 
  .. 
  List<Project> projects;
  Double getProjectCost() { ... some implementation ..}
  List<String>  getGovtProjectNames() { ... some implementation ...}
  ..
  ..
}

現在,由於行為是暴露給外部世界的,因此可以這樣做:

age = 100; //I am gonna live a long life :P
projects = new LinkedList<>();
...
..
etc

因此,這很明顯是濫用,因為允許外部干擾內部。

我們如何實現封裝?
透過將類的成員變數宣告為私有,並提供公共的setter / getter方法來修改和檢視變數值。
私有成員變數只能在類中使用。只有使用getter方法,才能在類外部訪問私有成員。
因此,高於僱員級別的員工應如下所示:

@Data //lomboks way to remove boiler-plate get/set
class Employee 
{
  private String name;
  private Date age;
  private Date dateOfJoining;
  .. 
  .. 
  private List<Project> projects;
  public Double getProjectCost() 
  { ... some implementation ..}
  public List<String>  getGovtProjectNames() 
  { ... some implementation ...}
  ..
  ..
}

為什麼要使用封裝?

  • 靈活性:透過新的要求集更改封裝的程式碼更加靈活和容易。例如,如果新增/刪除員工專案的要求發生變化,我們可以輕鬆地更新setter方法()或提供的方法中的邏輯。
  • 可重用性:封裝的程式碼可以在整個應用程式中或在多個應用程式中重用。
  • 可維護性:將應用程式程式碼封裝在單獨的單元(類,介面,方法,getter / setter等)中時,可以輕鬆更改或更新應用程式的一部分而不會影響其他部分,從而減少了開發人員的工作量和時間。
  • 可測試性:對於封裝類,編寫單元測試更加容易,因為成員變數不會分散在各處,從而也減少了測試人員的時間和精力。
  • 資料隱藏:方法的呼叫者對類的內部邏輯一無所知,因為呼叫者函式看不到成員變數。呼叫方僅知道要傳遞給setter方法(或任何方法)以使用該值進行初始化的引數。例如


public void setAge(int age) 
{
 if (age < 18 || age > 55) 
 {
  throw IllegalArgumentException("Age must be from 18 to 55");
 }
 this.age = age;
}


封裝與資料隱藏?
首先定義資料隱藏DataHiding:資料隱藏意味著保護類成員免受非法或未經授權的訪問。
因此,我們可以說封裝 透過將變數設為私有,並公開該屬性以訪問將公開的私有資料,來自動實現資料隱藏的概念,從而為資料提供安全性。
資料隱藏和封裝之間的主要區別

  1. 封裝處理隱藏程式的複雜性。另一方面,資料隱藏處理程式中資料的安全性。
  2. 封裝著重於包裝(封裝)複雜資料,以便為使用者提供更簡單的檢視。另一方面,資料隱藏著眼於限制資料的使用,旨在確保資料的安全性。
  3. 在封裝中,資料可以是公共的或私有的,但是在資料隱藏中,資料必須僅是私有的。
  4. 資料隱藏是一種過程以及一種技術,而封裝是資料隱藏中的子過程。

結論
最後,我要說的是,資料隱藏和封裝都齊頭並進,其中資料隱藏著重於資料的安全性,封裝著重於降低系統的複雜性,以使應用程式更加使用者友好。

相關文章