カプセル化に関する理解を深めるために、次の問題に取り組んでみてください。
問題
次のコードを実行した場合に正しく出力されるのはどれでしょうか?データの隠蔽に関する動作を考察してください。
class BankAccount {
private double balance;
public BankAccount(double initialBalance) {
this.balance = initialBalance;
}
public void deposit(double amount) {
if (amount > 0) {
balance += amount;
}
}
public void withdraw(double amount) {
if (amount > 0 && amount <= balance) {
balance -= amount;
}
}
public double getBalance() {
return balance;
}
}
public class Main {
public static void main(String[] args) {
BankAccount account = new BankAccount(100);
account.deposit(50);
account.withdraw(20);
System.out.println(account.getBalance());
}
}
選択肢
- A. 130.0
- B. 150.0
- C. 80.0
- D. コンパイルエラー
答えと解説
回答を見る
答え
A. 130.0
解説
基本説明: カプセル化はオブジェクト指向プログラミングの重要なコンセプトの一つで、クラスのフィールドを外部から直接アクセスできないようにし、その代わりにメソッドを通してデータを操作する仕組みです。
この例では、BankAccount
クラスはbalance
をprivate
に設定し、メソッドでのみ値の更新を許可しています。これにより、不適切な値の更新を防ぎ、安全性を確保します。
誤答理由:もし間違って他の選択肢を選んでしまった場合、withdrawメソッドやdepositメソッドの条件を誤解しているかもしれません。
例えば、Bを選んだ場合、depositの結果が正しく理解できていない可能性があります。また、Cならwithdrawの減算処理を誤解したかもしれません。
つまずきポイント:
つまずきそうな点としては、メソッド内の条件分岐があります。withdraw
は条件によって何も行わないことがあります。
またbalance
がprivate
で直接アクセスできないことに気づかないと、コンパイルエラーだと誤解を招きます。
発展知識:
カプセル化はセキュリティやメンテナンス性向上に繋がるため、オブジェクト指向プログラミングにおいて重要な概念です。
柔軟性のあるコードを書くためには、適切なアクセシビリティ設定を意識し、フィールドへのアクセスを制限することが推奨されます。