為什麼要使用封裝? - Vaibhav Singh
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:資料隱藏意味著保護類成員免受非法或未經授權的訪問。
因此,我們可以說封裝 透過將變數設為私有,並公開該屬性以訪問將公開的私有資料,來自動實現資料隱藏的概念,從而為資料提供安全性。
資料隱藏和封裝之間的主要區別
- 封裝處理隱藏程式的複雜性。另一方面,資料隱藏處理程式中資料的安全性。
- 封裝著重於包裝(封裝)複雜資料,以便為使用者提供更簡單的檢視。另一方面,資料隱藏著眼於限制資料的使用,旨在確保資料的安全性。
- 在封裝中,資料可以是公共的或私有的,但是在資料隱藏中,資料必須僅是私有的。
- 資料隱藏是一種過程以及一種技術,而封裝是資料隱藏中的子過程。
結論
最後,我要說的是,資料隱藏和封裝都齊頭並進,其中資料隱藏著重於資料的安全性,封裝著重於降低系統的複雜性,以使應用程式更加使用者友好。
相關文章
- 為何要再封裝 AJAX?封裝
- 為什麼要虛擬化,為什麼要容器,為什麼要Docker,為什麼要K8S?DockerK8S
- jwt是什麼?php jwt類封裝和使用JWTPHP封裝
- 為什麼要謹慎使用Linux find命令?Linux
- 服裝企業為什麼要談資訊化?
- 為什麼要code reviewView
- 為什麼要寫作
- 為什麼說Java中要慎重使用繼承Java繼承
- 什麼是SSL證書?網站為什麼要安裝SSL證書?網站
- Python是什麼?為什麼要掌握python?Python
- GC 為什麼要掛起使用者執行緒? 什麼愁什麼怨?GC執行緒
- 為什麼要避免在 Go 中使用 ioutil.ReadAll?Go
- SSL證書有什麼作用?企業為什麼要安裝SSL證書?
- 為什麼要學習 Julia
- 為什麼要指令重排序?排序
- 為什麼要財務自由
- 為什麼要學習 RustRust
- 為什麼要學習 Vim?
- 為什麼要學習Netty?Netty
- 為什麼 JavaScript 的 this 要這麼用?JavaScript
- 什麼!你想要封裝好的ajax封裝
- 為什麼要謹慎使用Arrays.asList、ArrayList的subList?
- Python優勢是什麼?為什麼要學習?Python
- Python到底是什麼?為什麼要學Python?Python
- 何為封裝封裝
- 為什麼要閱讀原始碼原始碼
- 序 為什麼要建立部落格
- 為什麼要分庫分表?
- 為什麼還要記密碼密碼
- [譯]為什麼要寫 super(props)
- 為什麼要貢獻開源
- 為什麼要加EventQueue.invokeLater
- 為什麼要特徵標準化特徵
- 我為什麼要學技術
- 為什麼要“東數西算”?
- redis為什麼要提供pipeline功能Redis
- 前端為什麼要工程化?前端
- 為什麼要學習Python?Python可以做什麼事情?Python