19日目①(2025.02.18) カプセル化


おはようございます!!

今日もやっていきます!!

今日の最初のテーマは、「カプセル化」です。
Javaの勉強を開始する際に、自分なりに調べてゴールまでのロードマップを作ったのですが、勉強項目に「カプセル化」を書いておきながら、これまでスルーしちゃってました、、、

「カプセル」って聞いたら、ウルトラセブンのカプセル怪獣しか浮かんでこないので、しっかり学んでいきたいと思います!!

菅原先生、今日もお願いします!!



【カプセル化とは】

カプセル化を理解するためには、「アクセス修飾子」を理解する必要があるとのこと。

アクセス修飾子は、”public” “protected” “なし” “private” の4種類で、
アクセスできる範囲がそれぞれ違うということですね!!

ここらへんは、Tim先生とやっている時になんとなくで使っていました。

しかし!!

正直、
「なんで”private”にするの??全部”public”でいいやん」
と思ってました、、、

そこらへんも色々と調べたり勉強しましたので、後ほど書きます!!

話を戻して、「カプセル化って何??」の件ですが、菅原先生の解説を聞いて理解できました。


カプセル化:
メンバ変数を隠ぺい(private)して、クラスとメソッドは公開(public)すること


確かに、Tim先生もそうやってました。

じゃあ、「何のために??」なんて思っていると菅原先生がカプセル化のメリットを説明してくださいました。

メリット①
代入前処理
→ 実際に値に代入する前に、正しい値かどうかをチェックすることができる。

  メソッドで値の条件(0以下になったら「範囲外です」といった文を出す等)を入れることで、
  実行側に間違った値を入れさせることを防止できる。

メリット②
修正範囲が狭まる
→ 現場では、実行側プログラムを作る人と設計側プログラムを作る人で、分担しているケースが多い。
  そのため、修正や変更があった際に極力、修正・変更箇所を限定(少なくする)する必要がある。
  (わけわからんことになる。バグの原因になるから)
  変数の宣言をprivateにしてカプセル化をすることで、値の修正や変更があった際に、設計側のみを変えれば良いということになる。



うんうん、なるほど!!
ただ、この時点でメリット①で1つの疑問が、、、

「 変数の宣言を”public”にしてもメソッドで値の条件入れれるやん、、、」
「なんで”private”にする必要があるんや、、、」

実際に自分でも全て”public”にしても問題なく処理がされることを確認したうえで、調べてみました。

【”private”を使う理由】

“private”を使う理由として、外部からの不正な値の代入を防ぐことができる。
たとえ、メソッドで値の条件を定義していても、変数の宣言を公開状態にしていたら、
変数名に不正な値を代入できてしまう。
そうすると、メソッドで定義した条件をすり抜けて、不正な値が出力されてしまう。

そもそも、オブジェクト指向は
「内部構造を外部から隠ぺいして、公開されたインターフェース(メソッド)を通してのみ、操作できるようにする。
というプログラムの複雑さを軽減するために「情報隠ぺい」という原則があるので、その原則に則るためにも、”private”は必要。


なるほど!!
実際に自分でも試してみたら、確かに条件をすり抜けて間違った値が出力されました!!

ちなみに、菅原先生の説明を途中で止めて、この疑問を解決しましたが、ここらへんの説明は直後に菅原先生がしてくださっていました、、、

少し時間を無駄遣いしちゃったかもですね。。。
でも自分で調べてから解説を聞いた方が理解が深まると思って気にしないことにします!!

ということで、カプセル化について理解度が深まりました!!


その後は、菅原先生の演習問題に取り組みました。

演習問題では、
・オーバーロード
・アクセス修飾子
・コンストラクタ
・static
についての問題がありました。

問題なく解けたので今めっちゃ気分いいです!!

ということで、良い気分のまま進んでいきます!!

ではでは!!

コメントを残す