もう一度身につけたい変態で学ぶオブジェクト指向
コンニチハ!
変態アドベントカレンダーです。
※ アドベントカレンダーとは、クリスマスまでに毎日日替わりで窓を開けていくカレンダーのこと。
それにちなんで、日替わりでblogエントリを書くのがアドベントカレンダーです。
ってよく聞きますし、実際のところ何がすごいの??
って思ったりしてる人も多いでしょう。
抽象クラスって何よ!?
インタフェースとかどうやって使う?
とか
そういう初心者向けアーンドもう一度学びたい人達に変態を例に説明してみましょう。
うだうだですけど、最後まで読んでいただければ幸いです。。。
まず、オブジェクト指向は何が嬉しいのか?ってところですけど、
処理を共通化し、生産性をあげる!!
ということではありません。
もちろんそういう一面もありますが、これぐらいならオブジェクト指向を使わなくても十分できます。
では、オブジェクト指向は何を可能にしてくれるのか?
それは
変化に強いプログラムにしてくれる
ということです。
これを変態を使って説明してみましょう。
そう
変化に強い変態
を作ってみましょう
これが社会に出てきたらもう無敵ですね。
まず簡単なユースケースを考えてみます。
変態が女子高生のスカートをめくる
こんな感じです。
ではこれをもとに実装してみましょう。
____________________________________________________________________________________________________
まず「変態クラス」と「女子高生のスカートをめくる」メソッドがでてきます。
class 変態 {
スカートをめくる(女子高生){
女子高生.スカートがめくられた();
}
}
次に「女子高生クラス」を作り「スカートをめくられた」というメソッドを作ります
class 女子高生{
スカートがめくられた() {
printf("きゃーーーー!!");
}
}
____________________________________________________________________________________________________
ってかんじでしょうか?
これで、「変態が女子高生のスカートをめくる」というユースケースの実装ができます。
でも、変態ですよ?
この変態ぶりが女子高生だけでおさまるとは限りません。
もしかしたら女子大生に手を出すかもしれません。
では次のユースケースを足しましょう。
変態が女子大生のスカートをめくる
____________________________________________________________________________________________________
新たに「女子大生クラス」が追加されます。
class 女子大生{
女子大生#スカートがめくられた() {
printf("いやーーー!!");
}
}
そして、変態クラスに女子大生用のメソッドを追加します。
class 変態 {
スカートをめくる(女子高生){
女子高生.スカートがめくられた();
}
スカートをめくる(女子大生){
女子大生.スカートがめくられた();
}
}
____________________________________________________________________________________________________
って感じでしょう。
でも、中にはロリコンな変態もいます。
女子中学生に手を出すかもしれません。
なので、次のユースケースを足しましょう。
変態が女子中学生のスカートをめくる
____________________________________________________________________________________________________
新たに「女子中学生クラス」が追加されます。
class 女子中学生{
スカートがめくられた() {
printf("おまわりさんこっちです。");
}
}
そして、変態クラスに女子中学生用のメソッドを追加します。
class 変態 {
スカートをめくる(女子高生){
女子高生.スカートがめくられた();
}
スカートをめくる(女子大生){
女子大生.スカートがめくられた();
}
スカートをめくる(女子中学生){
女子中学生.スカートがめくられた();
}
}
____________________________________________________________________________________________________
変態さんの欲望はまだまだかもしれませんが、ここでここまでした実装の内容を振り返ってみましょう。
まず、
「変態クラス」ができ
「変態クラスにスカートをめくる(女子高生)メソッド」つくり
「女子高生クラス」ができ、
「女子高生クラスにスカートがめくられた()メソッド」をつくりました
次に
「女子大生クラス」ができ
「女子大生クラスにスカートがめくられた()メソッド」をつくりました
「変態クラスにスカートをめくる(女子大生)メソッド」つくり
そして、
「女子中学生クラス」ができ
「女子中学生クラスにスカートがめくられた()メソッド」をつくりました
「変態クラスにスカートをめくる(女子中学生)メソッド」つくり
ここで、あることに気づきませんか?
スカートをめくる対象が増えたら変態クラスに手が入ります。
つまり、スカートをめくるという変態なことをするためには、一度、変態さんには改修が入らないといけません。
この変態さんは変化に強いでしょうか?
目の前に新たに「OLさん」がスカートをはいて現れたら、一度家に帰って、スカートをめくる練習をして
いざ本番に挑むといったことをしなければなりません。
これでは欲望丸出しな素晴らしい変態さんはできませんよね?
ではどうすればよいのか?
そもそも、相手を絞る必要なんてあるのか?
スカートをはいていればよいのではないか?
つまり
「変態がスカートをはいている人のスカートをめくる」
にすればよいのです。
対象が「スカートをはいている人」という対象になります。
変態とスカートをめくる相手のインタフェースはスカートをはいているになります。
「スカートをはいている人」インタフェースは「スカートがめくられた()」メソッドを持ちます。
メソッドの内容は実際にスカートをはく人に任せます。
____________________________________________________________________________________________________
interface スカートをはいている人{
スカートがめくられた();
}
____________________________________________________________________________________________________
そして、変態クラスのメソッドは
____________________________________________________________________________________________________
class 変態 {
スカートをめくる(スカートをはいている人){
スカートをはいている人.スカートがめくられた();
}
}
____________________________________________________________________________________________________
ということになります。
ずいぶんすっきりしましたよね?
そして、女子高生はスカートをはき、スカートがめくられた時の動作をそれぞれ実装します。
____________________________________________________________________________________________________
class 女子高生 implements スカートをはいている人 {
スカートがめくられた() {
printf("きゃーーーー!!");
}
}
____________________________________________________________________________________________________
こうすることで何が嬉しくなったのでしょうか?
たとえばOLさんが登場したとします。
そして、OLクラスが作成され、「スカートをはいている人」をimplementsし、スカートがめくられた()を実装します。
こうするだけで、変態さんはOLのスカートをめくることができます。
変態さんに手が入ることはありません。
今後もそうです。
女子小学生が現れようが、熟女が現れようが変態さんにはメンテナンスは起きません。
これで、スカートをはいていれば誰でもスカートをめくってやれるスーパーな変態さんができました。
変化に強い変態さんの完成です。
現実世界でこんな人がいれば、間違いなく逮捕されてますけど。。。
つたない説明でごめんなさい。
最後までお付き合いいただきありがとうございます。