カプセル化(アクセスレベル )の話 ( No.39 ) |
- 日時: 2022/03/27 12:29
- 名前: REDCHEEKS
- 前回の練習問題>>38の解答はこちら↓
http://mediasp.kir.jp/img20220326/imgloglog-box/img20211104181420.png
さて毎回ながら、これをもとにさらにエッチな話を続けよう。
プログラム中にしょっちゅう出てくる、public って何? と思う人もいるだろう。
これはオブジェクト指向における、カプセル化の話につながっていくんだね。
一言で言うと、public は露出、private は隠蔽、protected はその中間的なもの(身内にだけ露出、他人には隠蔽)
そして、プログラムの動作に支障が無い限り、public よりも、protected そして private にした方が良い。
露出していると外部から触られるからね。例えば、
public けつ 尻 = new けつ();
なんてのは本当は良くない、外部から尻触られてしまうからね。
当初はお尻を叩くという目的のために、パブリック(public)に露出していたが、おしおき() という機能を追加した今となっては、露出する必要は無くなったと言って良い。
だから、尻は今後、public をやめて、private か protected にすべきなのだ。
ただ、そうすることで、おしおき() は利用できなくなるかというと、そうではない。
public void おしおき()
と定義されているように、おしおき() 機能自体は、パブリックに露出しているし、今後ともそれは変わらない。
private か protected にするのは、尻の方のみ。
つまりこれからは、おしおき() という機能を通じて、間接的に、尻を触ることになる。
逆に言うと、おしおき() 機能を通してしか、尻は触れなくなる。
このようにすることで、おしおき以外の目的で、尻を触られることはなくなるわけだ。
また行きすぎた体罰をなくすため適切なおしおきかどうがチェックする機能を追加することも出来る。
これらを「カプセル化」って言うんだ。
これは、多人数でプログラムを開発しているときには、特に重要。
他人にいきなり変なところを触られて、プログラムの動きがおかしくなることを防ぐための機能なのだ。
だから、何を公開(public)するかは、常に意識し、最小限にする必要がある。
いまいちピンと来ない人のために(スパマニアが喜ぶ)もっと具体的な例で説明しよう。
何か悪いことをして、学校から保護者呼び出しを食らったとしよう。
そこで親が先生に「おしおきしておきます」と言ったとしよう。
学校の先生は家庭内のおしおきには直接は関われない。
つまりあなたのお尻はカプセル化(private, protected)により保護されているんだ。
でも、おしおき() は、なしかというと、そうではない。
あなたのお尻は家に帰ってから(外部から隠蔽されたそのプライベートな家庭空間のなかで)むき出しにされ、みっちりおしおきされる運命にある。
プライベートとは(ポーの水車小屋より) > 水車小屋の扉は堅く閉ざされています。 > でもその中では、秘められた仕組み、少女たちを正しく導くための仕組み、それが今まさに機能しているのです。 > こればかしは、人には見せられません。
分かったかな? それが「カプセル化」って概念なんだ。
|
カプセル化(実習) ( No.40 ) |
- 日時: 2022/03/27 12:30
- 名前: REDCHEEKS
- http://mediasp.kir.jp/img20220326/imgloglog-box/img20211110003436.png
@ 人クラス内の「public けつ 尻 〜」を、private に変更する。 A エラー一覧にエラーが表示される。 B 場所を調べると、人クラスを継承した、男クラスと女クラスでエラーが出ているようだ。
private では継承クラス、つまり身内にエラーが出るため(厳しすぎるので)少し緩めて、protected で行く事にする。
C 人クラス内の「private けつ 尻 〜」を、protected に変更する。 D エラーは出なくなった、これでOK、実行可能。
ちなみに、>>38 の
> (4) 2人ともオシオキの下の、 > red.尻.ぺんぺん(); > zan.尻.ぺんぺん(); > をコメント化(無効に)してください。
これを、元に戻すと、
E 再びエラーが出るので、カプセル化(アクセス制御)は効いている事が確認できる。
※つまりメインプログラム、static void Main(string[] args) {...} 内からは、直接尻を触れなくなるわけだ!
|