ホームページ  >  記事  >  Java  >  オブジェクト指向プログラミング ||カプセル化

オブジェクト指向プログラミング ||カプセル化

PHPz
PHPzオリジナル
2024-07-18 12:11:021112ブラウズ

Object Oriented Programming || Encapsulation

ご存知のとおり、カプセル化は OOPS の 4 つの柱の 1 つであり、これを使用してデータを非表示にし、クラスのインスタンス変数に対して操作を実行するための制限を追加できます。カプセル化が完全に行われたことを確認したいと考えています。
一般に、この変数が定義されているクラス自体以外の誰も変更できないように、作成する変数を非表示にする必要があると言われてきました。したがって、(必要に応じて)クラスの外でこの変数にアクセスするには、ゲッター メソッドとセッター メソッドを定義して、そのインスタンス 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.");
        }
    }
}

上記の例では、プライベート メソッドとして accountNumber、accountHolderName、balance という 3 つの変数があり、これら 3 つのそれぞれに対してゲッターとセッターを定義しているため、使用された場合に他のクラスでインスタンス変数を簡単に使用できます。
しかし、それだけではありません。このアカウントへの入出金を行うために、ここでさらに 2 つのメソッドも必要だとします。
ここではアプリケーション レベルのセキュリティについては説明しておらず、チームがユーザーを認証する完璧な作業を行っていると仮定していることに注意してください。
したがって、新しい 2 つのメソッドでは、金額の引き出しと入金のジョブを実行する際に、インスタンス変数「balance」への直接呼び出しを回避しようとします。その代わりに、セッター メソッドでこれを更新します。これは、セッター メソッドがインスタンス変数のルールに違反している場合に例外をスローすることを確認しているためです。
以下は、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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。