お首が長いのよお首が長いのよ

チラシの裏よりお届けするソフトウェアエンジニアとして成長したい人のためのブログ

2012-07-14

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

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

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

図で表すとこんな感じ。

f:id:killinsun:20120901232330p:image

このスーパーカーやらトラックにも、
例えばトラックの中だったら軽トラだったりバン型だったりダンプだったり
いろいろあるわけだ。


って言われた事があります。
プログラミングって非常に面倒くさいものでして、多くの開発者は使い回ししたがります。

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

  • 名前
  • 最高速度
  • 燃費
  • 乗車可能な人数

大雑把にあげるとこんな感じ。

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

そのために

  • 積載量

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

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

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

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

  
車クラスの宣言  
Public Class Car{  //車クラスの定義  
    int name; //車種名  
    int maxSpeed; //最大速度  
    int nenpi; //燃費  
    int ninzu; //乗車可能人数  

}  
  
車クラスのサブクラスである、**トラッククラス**の宣言  
Public Class SuperCar extends Car{ //車クラスからサブクラスを作る際、extendsを使ってサブクラス作りますよという宣言をする  
    int sekisai; //積載量  
}  
  
車クラスのサブクラスである、**スーパーカークラス**の宣言  
Public Class SuperCar extends Car{   

}  

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

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

よかったらシェアしてください!