2012年2月25日土曜日

2.1 型をもっと詳しく

前回の「型と値」で、C#での重要な要素である「型」と「値」を大雑把に解説しました。
型って何だっけ?値って何だっけ?という場合は、もう一度読み返しましょう。
今回は、前回の続きで、さらに詳しく型について扱います。



型と値の関係はわかりました。
では、型と型ではどういった関係があるでしょうか。



たとえば、「毒属性の剣」を考えましょう。

「毒属性の剣」をばらすと、「毒属性」と「剣」。
そのままですね。

わかりやすく、「剣」からいきましょうか。
剣は、大きく分けて短剣と長剣があります。
この2つはどちらも型であることがわかるでしょうか。
たとえば、短剣型の値としては、ダガーやトレンチナイフなどがあります。
長剣型の値としては、クレイモアやバスターソードなどがありますね。

別の視点からいきましょう。
剣は武器の一部です。
武器といえば他に、銃や弓やスタンガンなど、たくさんの種類があります。
銃も弓も、型であることがわかるでしょうか。剣の例と同じ要領です。
そして、武器も型です。もうなんとなくわかるようになってきたでしょうか。

さて、これをまとめると・・・

「【武器型】の一部に【剣型】や【銃型】がある」
「【剣型】の一部に【長剣型】や【短剣型】がある」

となります。

図にしてみると・・・




こんな感じでしょうか。



さて、図から読み取れることはすごく単純です。
つまり、型は階層構造を持っている、ということです。

上の図は、すごーーーく単純に、いろいろ要素を削ったものになっています。
たとえば、武器型の上には、さらにアイテム型とかがあるでしょう。
逆に、ハンドガン型には、リボルバー型とかオートマチック型などがあるでしょう。
そして、リボルバー型の値として、コルトパイソンやニューナンブといったものがあるイメージですね。


この階層構造はとても重要です。
なんせ、プログラムのコードにそのまま現れるからです。
現時点で、具体的なプログラムは書きませんが、後できっと、この概念が頭に浮かぶでしょう。




さて、では「毒属性の剣」の話から始まったので、もう片方の「毒属性」を見てみましょう。

もうお分かりでしょうが、毒属性は属性型の一部です。
他には回復属性や炎耐久属性や高速移動属性など、いろんな属性がたくさんあるでしょう。
さらにいうと、属性型は、強化系属性型、回復系属性型、状態異常属性型のような直系の属性があるはずです。
毒属性はおそらく、状態異常属性型の下にある型だと予想されます。

ここで「状態異常属性型のにある型」と書きました。
図の階層構造は、上が大雑把な分類、下に行くほど具体的な分類になっているのがわかります。
別の言い方をすると、親の型から子供の型に行くほど具体的になり、機能が限定的になっていま
す。


このことから、型には親子関係があると言うことが出来ます。



たとえば、毒属性型の親は状態異常属性型であり、さらにその親は属性型である、と言えるでしょう。
剣の例でも同じです。
エクスカリバーという値の型は長剣型であり、長剣型の親は剣型、その親は武器型、さらにその親はアイテム型でしょうか。





さて、結構長くなってきました。
考えながら書いてるので、見返すと結構量があって自分でもビックリ。
ちゃんと読んで理解できているでしょうか?

書き方があやふやで、よくわからん、という人は、「よくわからん状態」が「なんとなくわかった」状態になれば
今はそれでも十分です。


ここまで説明したもので、

「型と値」

「型と型の関係」

「型の階層構造・親子関係」

これが頭に入っていれば、とりあえずクリアです。
図も頭に浮かんでいれば、全然問題ないです。
好きなゲームを例に、「アレとアレが型で、親子関係になってる・・・かな?」
など、適当に想像できるようになっていれば、もう100点満点です。




今日はここまでです。
長かった。お疲れ様でした。

次回も、型を引き続き勉強していきます。
「毒属性の剣」には、また登場してもらいましょう。
毒属性と剣は両方型ですが、どうやら親子関係ではなさそうです。
では、別の関係性があるのでしょうか?
その辺りを詳しく見てみましょう。

では。

0 件のコメント:

コメントを投稿