クラス(スーパークラス・サブクラス)

基本だけどイメージがよくできないって人いるんじゃないだろうか?

よく、車がスーパークラス、スポーツカーやトラックがサブクラスって
言うじゃん? あれ会話や言葉で聞くと頭の悪い俺は
「…は?」となるわけで。

図で表すとこんな感じ。
f:id:killinsun:20120901232330p:image
このスーパーカーやらトラックにも、
例えばトラックの中だったら軽トラだったりバン型だったりダンプだったり
いろいろあるわけだ。

そもそもなんでクラス分けなんかするんだよ
って言われた事があります。
プログラミングって非常に面倒くさいものでして、多くの開発者は使い回ししたがります。

車は、いろんなステータスがあります。
ステータスっていうのは、この車で言えば

  • 名前
  • 最高速度
  • 燃費
  • 乗車可能な人数
  • 大雑把にあげるとこんな感じ。

    でも
    トラックは車だけど、やっぱ物積むじゃん? どれくらい積めるか設定したいじゃん?
    とかいう要望が出てくるわけで。

    そのために

  • 積載量
  • とかいうステータスを追加するわけです。
    まぁこれぐらいだったら、元々車クラスに突っ込んでおけば問題ないわけだけど、
    車に対してのサブクラスはいっぱいあるわけで、それぞれのサブクラスの要望を満たした親クラスなんて
    到底作ってられないわけですよ。

    そういうわけで、クラスという枠組みを作り、

    「じゃあどんな物にも共通する部分だけ作っておいて、その物にしかない特殊なステータスだけサブクラスにぶっ込めばいいんじゃね?」 
    っていうのがオブジェクト指向の考え方。

    親クラスに設定したステータスは、子クラスでも使える。
    なのでいちいちトラックやスーパーカーに最大速度なんてステータスを設定しなくても、使えるわけです。

    スーパーカークラスなんもねぇwwwwww
    と思った方、ごめんなさい、スーパーカーに必要なステータスあんま思いつきませんでした。
    おそらく、メソッド(処理)の話をするときに活きてくると思います。きっと。

    Javaで宣言するとこんな感じですね。
    Objective-Cの勉強がてら、Objective-Cだとどう宣言するのだろう?

    コメントを残す

    このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください