為什麼要使用封裝? - 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:資料隱藏意味著保護類成員免受非法或未經授權的訪問。
因此,我們可以說封裝 透過將變數設為私有,並公開該屬性以訪問將公開的私有資料,來自動實現資料隱藏的概念,從而為資料提供安全性。
資料隱藏和封裝之間的主要區別
- 封裝處理隱藏程式的複雜性。另一方面,資料隱藏處理程式中資料的安全性。
- 封裝著重於包裝(封裝)複雜資料,以便為使用者提供更簡單的檢視。另一方面,資料隱藏著眼於限制資料的使用,旨在確保資料的安全性。
- 在封裝中,資料可以是公共的或私有的,但是在資料隱藏中,資料必須僅是私有的。
- 資料隱藏是一種過程以及一種技術,而封裝是資料隱藏中的子過程。
結論
最後,我要說的是,資料隱藏和封裝都齊頭並進,其中資料隱藏著重於資料的安全性,封裝著重於降低系統的複雜性,以使應用程式更加使用者友好。
相關文章
- 為什麼要虛擬化,為什麼要容器,為什麼要Docker,為什麼要K8S?DockerK8S
- 為何要再封裝 AJAX?封裝
- 我為何要封裝DialogFragment?封裝Fragment
- 為什麼造裝置要抱安卓大腿安卓
- [29期] 為什麼要編譯安裝?編譯
- 為什麼要removeREM
- 為什麼要敏捷?敏捷
- jwt是什麼?php jwt類封裝和使用JWTPHP封裝
- 為什麼要code reviewView
- 為什麼要謹慎使用Linux find命令?Linux
- 為什麼說Java中要慎重使用繼承Java繼承
- 為什麼要學習和使用C語言?C語言
- GC 為什麼要掛起使用者執行緒? 什麼愁什麼怨?GC執行緒
- 什麼是SSL證書?網站為什麼要安裝SSL證書?網站
- 為什麼要學習 RustRust
- 為什麼要學習 Julia
- 為什麼要指令重排序?排序
- 為什麼要學習 Vim?
- 為什麼要選擇SQL?SQL
- MySQL為什麼要set namesMySql
- 設計師為什麼要學程式設計,開發者為什麼要學設計?程式設計
- SSL證書有什麼作用?企業為什麼要安裝SSL證書?
- 為什麼 JavaScript 的 this 要這麼用?JavaScript
- 5個理由告訴你為什麼要學習使用Python裝飾器Python
- Python是什麼?為什麼要掌握python?Python
- 為什麼還要記密碼密碼
- 為什麼要閱讀原始碼原始碼
- 為什麼要學習Netty?Netty
- 為什麼要貢獻開源
- 前端為什麼要工程化?前端
- 為什麼要分庫分表?
- 為什麼要特徵標準化特徵
- 為什麼我要學習“機器學習”?機器學習
- 為什麼要網頁模組化?網頁
- 我為什麼要學技術
- 為什麼有的男人要假裝每週工作80小時
- 為什麼要避免在 Go 中使用 ioutil.ReadAll?Go
- 什麼!你想要封裝好的ajax封裝