- keisuke_izumi
- 3588
- 0
- 0
- 0
.@sakomoko せんせー、abstractでいちいち抽象化する意味がわからないんですけれど、これって大事なんですか?
2011-01-29 14:55:32@keisuke_izumi ううーん、抽象クラスの使い道がわからんってことかね? とりあえず利点としては、抽象化クラスはインスタンス化できないから、継承しないでそのクラスを使ってしまう事故がなくなるってことかなー。
2011-01-29 15:02:38@keisuke_izumi マジシャンクラスがあるとする。マジシャンクラスは基底クラスで、それ単体ではインスタンス化できない。マジシャンクラスを継承して「クロースアップマジシャンクラス」「パーラーマジシャンクラス」「イケメンマジシャンクラス」「メンタリストクラス」などが作れる。
2011-01-29 15:07:01@sakomoko これはわかりやすいww しかし継承先で「~マジシャン」といちいち宣言するのってわずらわしくないです?そんなもん?w
2011-01-29 15:08:42@keisuke_izumi それらはみんな、「得意なマジックをする」というメソッドを持っているとする。これは絶対に必要なメソッドとされているとしよう。だから基底クラスである「マジシャンクラス」にはそのクラスが抽象的に宣言されている。
2011-01-29 15:09:35@keisuke_izumi 継承先のクラスでは、必ずこの「得意なマジックをする」メソッドをオーバーライドして、それぞれ実装しなくてはならなくなる。中身のロジックはそれぞれ「アンビシャスする」「読心術する」「四つ玉する」とか異なるけど「得意なマジック」という抽象的な要件を満たせる
2011-01-29 15:10:59ああ、「必ず」しなくてはいけないのですね。RT: @sakomoko: @keisuke_izumi 継承先のクラスでは、必ずこの「得意なマジックをする」メソッドをオーバーライドして、それぞれ実装しなくてはならなくなる。
2011-01-29 15:11:54@keisuke_izumi そう、必ず実装しないといけない。マジックしらない取引先が「マジシャンを雇おう」と思って、とりあえず基底クラスがマジシャンである継承クラスの「○○マジシャン」を呼んだとする。「得意なマジックしてみなさい」とメソッドを呼び出す。
2011-01-29 15:13:54@keisuke_izumi このとき、もし抽象化されていなければ「え、おれそんなメソッドないですww」って言われちゃうけど、抽象化されると「得意なマジック」というメソッドは必ず実装されているから、中身はなんだかよくわからんがとりあえずマジックをしてくれるのは確か。保証される。
2011-01-29 15:14:59@keisuke_izumi まぁそんな感じ。マジシャンの種類だけクラス定義するのめんどくせーとか思うかもしれないけれど、まぁ、規模にもよるよね。でも、そこそこのプログラムなら、ちゃんと定義してクラスつくっといた方が便利になってくるんだよな。これは実際にやらんと実感しにくい。
2011-01-29 15:20:24@keisuke_izumi まぁ一般的なたとえだと、たとえばゲーム作るとき、キャラを「戦闘ユニット」クラスに定義して「攻撃する」メソッドを作って、継承クラスに「戦士」「魔法使い」「遊び人」とか作っていくようなものかなぁ。
2011-01-29 15:22:04