広告
  サイト内検索:
<Let's create a game!> Introduction of programming for absolute beginners English
 

SESSION 14 その38
クラスの詳細 つづき

フィールドへの書き込みの
問題を解決しよう。


これは
アクセス権がパブリックだと
外部から「直接」フィールドに
アクセスできるこ
とから起こる
問題だ。

直接書き換えられるのを
防げないからね。
うーん。

どうやれば
直接書き込めない
ようにできるかな?
現在は
こんな感じね。
これ前に
見た図だね。

フィールドと
メソッドの関係
だっけ。
 
オブジェクトのデータの流れ:フィールドに直接アクセスした場合



メソッドは
クラスメンバだから
プライベートの
フィールドに
アクセス可能。
直接がだめだったら、
「間接」的にアクセスさせる
ようにすればいい。

フィールドを「プライベート」に
変更して隠して。

外部からは、
メソッドを通してフィールドに
アクセスさせる
んだ。
 
 
オブジェクトのデータの流れ:フィールドに間接的にアクセスした場合(メソッドの利用)
 
フィールドを隠して
メソッドに代わりに
アクセスして
もらうんだ!

これなら外部は
直接操作できないね。
  メソッドは
こんな使い方も
できるんだね!

ちょっと
分かったかも。
 


これで解決!
この間接的にフィールドに
アクセスする仕組みを使って、
自動車クラスを作り変えてみたよ。

新しく追加した
「スピードメーター」メソッドに
注目してね。
 
 
アクセス権の使い方2(改良後):フィールドにはメソッドを通じてアクセスさせることで安全に操作できる
 
スピードメーター機能で
代わりに速度を表示する
ようにしたんだね。


これには
読み込みする機能しか無い
から、運転手は絶対に書き込み
できないんだ。
  よかった。
 

  getter(ゲッター)、setter(セッター)

メソッドを通して
フィールドを
管理するの。

「プロパティ」って
言うのも同じような
仕組み。
こんな風に・・・

フィールドはプライベートにして
直接アクセスは禁止する。

外部からは、メソッドを通して
間接的にフィールドに
アクセスさせる。

こうする事で、
メソッドの作り方次第で
フィールドへのアクセスを
「読み込みのみ」、
「書き込みのみ」に
することができる
よ。

この仕組みをプログラムでは
getter(ゲッター)、
setter(セッター)って言うよ。

名前だけ覚えといて。
 
 

フィールドを間接アクセスに変更した手順(getter、setter化)
 
1 フィールドをプライベートにして隠す
2 隠したフィールドの「読み込み」「書き込み」はメソッドが行う。
3 メソッドをパブリックにして外部から利用できるようにする。

 
ゲッターとセッターね。

了解です。
  いろいろな
やり方が
あるんだねー。
 


そしてさらに、
このやり方を発展させて
スピードメーター機能を
改良することもできる。


この例の場合、
スピードメーターメソッドは、
運転手に速度を表示する前に、
正確な速度に補正してから表示
してるんだ。
もっと
良くしたの。
アクセス権の使い方2(改良後):内部のプロセスに関わらないようにすることで、オブジェクトの役割を明確にする。
 
なるほど。
運転手は
「結果」の速度を
受取るだけなんだ。

難しい速度の補正は
スピードメーターに
お任せなんだね。

これなら運転に集中
できるね。


こんな風に
アクセス権とメソッドを使って
オブジェクト内部のデータ
(フィールド)を管理する
んだよ。

このフィールドとメソッドの
関係を覚えておこう。
「フィールドとメソッドの
関係」ね!


覚えておきます。
 
関係ね。

     

ここまでをまとめると・・・

アクセス権は、上手く使うことで
クラス間の役割を明確にできる
んだよ。

つまり、オブジェクトの独立性や
分離性を高めることができる
んだ。
えーと、つまり・・・

運転手は、「結果」を貰うだけ。
運転手は、運転に集中する。

速度表示の管理は全部
スピードメーター機能に任せる


これが役割分担・・・ってこと
なんだよね。

難しい・・・。
なんとなくで
いいよ。
うーん。
 
アクセス権の利点1

 
 

広告
home もくじ 前のページを読む 次のページを読む
  サイト内検索:
広告
お勧めの姉妹サイト
leafdays - リーフデイズ 超初心者のための園芸入門 - 楽しい趣味のガーデニング -
広告