Maison >Java >javaDidacticiel >Programmation orientée objet || Encapsulation
Comme nous le savons tous, l'encapsulation est l'un des 4 piliers de OOPS et nous pouvons l'utiliser pour masquer les données et ajouter quelques restrictions pour effectuer l'opération sur la variable d'instance des classes pour lequel nous voulons nous assurer que l'encapsulation a été parfaitement réalisée.
Généralement, on nous a dit que nous devions masquer la variable pour que personne ne puisse la modifier, sauf la classe elle-même dans laquelle cette variable a été définie. Donc, pour accéder à cette variable en dehors de la classe (si nécessaire), nous définissons la méthode getter et setter afin de pouvoir effectuer les opérations nécessaires liées à cette instance de vairbale.
Référez-vous à l'exemple de code Java ci-dessous ::
// 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."); } } }
Dans l'exemple ci-dessus, nous avons 3 variables comme accountNumber, accountHolderName, balance comme méthode privée et nous avons défini les getters et setters pour chacun de ces 3 afin que si utilisé, une autre classe souhaite utiliser le variables d'instance, ils peuvent facilement utiliser.
Mais ce n’est pas tout, supposons que nous souhaitions ici également 2 méthodes supplémentaires pour pouvoir déposer et retirer de ce compte.
Veuillez noter qu'ici nous ne discutons pas de la sécurité au niveau de l'application et nous supposons que notre équipe a fait le travail parfait pour autoriser l'utilisateur.
Ainsi, avec les deux nouvelles méthodes, tout en effectuant le travail de retrait et de dépôt du montant, nous essaierons d'éviter l'appel direct à la variable d'instance « solde ». Au lieu de cela, nous mettons à jour cela avec la méthode setter car la méthode setter s'assure que si l'une des règles n'est pas respectée pour la variable d'instance, elle annulera l'exception.
Vous trouverez ci-dessous le code des méthodes de dépôt et de retrait que nous ajouterons dans la classe 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."); } }
Résumé : Nous essaierons également d'éviter d'appeler la variable d'instance directement dans la classe pour répondre aux normes de sécurité à l'intérieur de notre code.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!