ここでは、カプセル化に関するJavaプログラムを作成してみましょう。
1.カプセル化
以下のクラスにカプセル化(含むデータ隠蔽)を施しなさい。
1度目はIDEの便利機能を使用せず、2度めは使用して作成してみること。
2.アクセサメソッドの効果
1で作成したクラスのアクセサメソッドに追記することにより以下の制約を課しなさい。
- IDは整数4桁の数値 1000~9999
- 名前は最低5文字以上
- なお、制約を外れた値の設定に対しては何もしない
- コンストラクタはなし(デフォルトコンストラクタ)
作成後に別途、テストクラスを用意して動作を確かめること。
3.PINコードのクラッキング
銀行のATM等で利用されるPINコードのプロトタイプとして次のようなクラスがある。
- このPINコードがSystem.out.println(pc.PIN)ではアクセスできないことを確かめなさい
- このPINコードをブルートフォースアタックで解読するコードを以下に書きなさい
<結果>
1234 |
また、この仕様の場合、平均して何回の試行でPINが推測できるか答えなさい。
4.PINコードのクラッキング防止
3.のインスタンスのPINコードを以下の対策で守りなさい。
・試行回数(tryTimes)というフィールドを追加する
・試行回数が5回を超えたらシステムを強制終了する
・メインメソッドの構造には手を加えない
ヒント:System.exit(0);でシステムを強制終了させることができる。0は正常終了のコード。
<結果の例>
試行回数が5回を超えました。 |
5.PINコードジェネレータ
ワンタイムパスワードを生成するPINコードジェネレータを作成したい。
以下の条件を満たすように作成しなさい。
- pinナンバーは他のクラスから直接アクセスできない
- コンストラクタは同じパッケージからしかアクセスできない
- セッターは用意しない
- インスタンス生成時に桁数(digits)を指定する
- 桁数は4~9までの整数とし、このルールに従わない場合にはインスタンス化されない

<結果の例:実引数に4を与えた場合>
9757 |
6.クラスの責務
あなたがシステムエンジニをしている某国では、お店で商品を買った時に消費税がかかります。
消費税は2種類に分かれていてパン(bread)のような食品(Groceryクラス)は8%、鉛筆(pencil)のような食品以外の商品(NonGroceryクラス)は10%と決まっています。
そして現在の首相は消費税の見直しは今後5年間はしないことを公約に掲げて当選しました。
そこである新入社員が次のような税込金額を計算できるプログラムを作成しました。
ところが、現在の仕様では税率は、getPriceメソッドの引数で指定することになっています。
本来なら各々の商品の税率はどのクラスが知っているべき情報でしょうか?
本来あるべきプログラムに修正しなさい。
7.オリジナル問題作成
以上。