眾所周知,封裝是OOPS 的4 大支柱之一,我們可以使用它來隱藏資料並添加一些限制來對類別的實例變數執行操作為此,我們希望確保封裝已完美完成。
一般來說,我們被告知必須隱藏變量,以便除了定義該變量的類別之外沒有人可以更改它。因此,為了在類別外部存取此變數(如果需要),我們定義 getter 和 setter 方法,以便我們可以執行與該實例 vairbale 相關的必要操作。
請參考下面的Java範例程式碼::
// Class for a bank account Holder public class BankAccountHolder { // Private fields to store account information private String accountNumber; private String accountHolderName; private double balance; // Public constructor to initialize a new BankAccount public BankAccount(String accountNumber, String accountHolderName, double initialBalance) throws Exception { setAccountNumber(accountNumber); setAccountHolderName(accountHolderName); setBalance(initialBalance); } // Public getter for accountNumber public String getAccountNumber() { return accountNumber; } // Private setter for accountNumber private void setAccountNumber(String accountNumber) throws Exception { if (accountNumber != null && !accountNumber.isEmpty()) { this.accountNumber = accountNumber; } else { throw new Exception("Invalid account number."); } } // Public getter for accountHolderName public String getAccountHolderName() { return accountHolderName; } // Public setter for accountHolderName public void setAccountHolderName(String accountHolderName) throws Exception { if (accountHolderName != null && !accountHolderName.isEmpty()) { this.accountHolderName = accountHolderName; } else { throw new Exception("Invalid account holder name."); } } // Public getter for balance public double getBalance() { return balance; } // Private setter for balance private void setBalance(double balance) throws Exception { if (balance >= 0) { this.balance = balance; } else { throw new Exception("Invalid initial balance."); } } }
在上面的範例中,我們有3 個變數accountNumber、accountHolderName、balance 作為私有方法,並且我們為這3 個變數中的每一個定義了getter 和setter,以便如果使用其他類別想要使用實例變量,他們可以輕鬆使用。
但這還不是全部,假設我們還需要另外 2 種方法,以便我們可以從該帳戶存款和提款。
請注意,這裡我們不討論應用程式層級的安全性,我們假設我們的團隊已經完成了完美的工作來授權使用者。
因此,使用新的兩種方法,在執行提取和存入金額的工作時,我們將盡量避免直接呼叫實例變數「balance」。為此,我們使用 setter 方法更新它,因為 setter 方法確保如果實例變數違反任何規則,它將引發異常。
以下是我們將在 BankAccountHolder 類別中新增的存款和提款方法代碼。
public void deposit(double amount) throws Exception { if (amount > 0) int finalBalance = this.getBalance() + amount; setBalance(finalBalance); } else { throw new Exception("Deposit amount must be positive."); } } // Public method to withdraw an amount from the account public void withdraw(double amount) throws Exception { if (amount > 0 && amount <= this.getBalance()) { int finalBalance = this.getBalance() - amount; setBalance(finalBalance); } else { throw new Exception("Invalid withdrawal amount."); } }
總結:我們會盡量避免直接在類別中呼叫實例變量,以滿足程式碼內部的安全標準。
以上是物件導向程式設計 ||封裝的詳細內容。更多資訊請關注PHP中文網其他相關文章!