phpメモ:abstractで抽象化するってどーゆーことよ?

図々しく相沢沙呼先生に聞いてみた!!
0
和泉圭佑 Kei Izumi🍞 @keisuke_izumi

.@sakomoko せんせー、abstractでいちいち抽象化する意味がわからないんですけれど、これって大事なんですか?

2011-01-29 14:55:32
相沢沙呼 @sakomoko

@keisuke_izumi ううーん、抽象クラスの使い道がわからんってことかね? とりあえず利点としては、抽象化クラスはインスタンス化できないから、継承しないでそのクラスを使ってしまう事故がなくなるってことかなー。

2011-01-29 15:02:38
相沢沙呼 @sakomoko

@keisuke_izumi 継承を前提とする基底クラスは、抽象クラスにしとくといいよね。ううーん、説明し辛いが……。

2011-01-29 15:04:48
相沢沙呼 @sakomoko

@keisuke_izumi マジシャンクラスがあるとする。マジシャンクラスは基底クラスで、それ単体ではインスタンス化できない。マジシャンクラスを継承して「クロースアップマジシャンクラス」「パーラーマジシャンクラス」「イケメンマジシャンクラス」「メンタリストクラス」などが作れる。

2011-01-29 15:07:01
和泉圭佑 Kei Izumi🍞 @keisuke_izumi

@sakomoko これはわかりやすいww しかし継承先で「~マジシャン」といちいち宣言するのってわずらわしくないです?そんなもん?w

2011-01-29 15:08:42
相沢沙呼 @sakomoko

@keisuke_izumi それらはみんな、「得意なマジックをする」というメソッドを持っているとする。これは絶対に必要なメソッドとされているとしよう。だから基底クラスである「マジシャンクラス」にはそのクラスが抽象的に宣言されている。

2011-01-29 15:09:35
相沢沙呼 @sakomoko

@keisuke_izumi 継承先のクラスでは、必ずこの「得意なマジックをする」メソッドをオーバーライドして、それぞれ実装しなくてはならなくなる。中身のロジックはそれぞれ「アンビシャスする」「読心術する」「四つ玉する」とか異なるけど「得意なマジック」という抽象的な要件を満たせる

2011-01-29 15:10:59
和泉圭佑 Kei Izumi🍞 @keisuke_izumi

ああ、「必ず」しなくてはいけないのですね。RT: @sakomoko: @keisuke_izumi 継承先のクラスでは、必ずこの「得意なマジックをする」メソッドをオーバーライドして、それぞれ実装しなくてはならなくなる。

2011-01-29 15:11:54
相沢沙呼 @sakomoko

@keisuke_izumi そう、必ず実装しないといけない。マジックしらない取引先が「マジシャンを雇おう」と思って、とりあえず基底クラスがマジシャンである継承クラスの「○○マジシャン」を呼んだとする。「得意なマジックしてみなさい」とメソッドを呼び出す。

2011-01-29 15:13:54
相沢沙呼 @sakomoko

@keisuke_izumi このとき、もし抽象化されていなければ「え、おれそんなメソッドないですww」って言われちゃうけど、抽象化されると「得意なマジック」というメソッドは必ず実装されているから、中身はなんだかよくわからんがとりあえずマジックをしてくれるのは確か。保証される。

2011-01-29 15:14:59
相沢沙呼 @sakomoko

@keisuke_izumi まぁそんな感じ。マジシャンの種類だけクラス定義するのめんどくせーとか思うかもしれないけれど、まぁ、規模にもよるよね。でも、そこそこのプログラムなら、ちゃんと定義してクラスつくっといた方が便利になってくるんだよな。これは実際にやらんと実感しにくい。

2011-01-29 15:20:24
相沢沙呼 @sakomoko

@keisuke_izumi まぁ一般的なたとえだと、たとえばゲーム作るとき、キャラを「戦闘ユニット」クラスに定義して「攻撃する」メソッドを作って、継承クラスに「戦士」「魔法使い」「遊び人」とか作っていくようなものかなぁ。

2011-01-29 15:22:04
和泉圭佑 Kei Izumi🍞 @keisuke_izumi

@sakomoko わかりやすすぎる!って、僕らだけ?あざーす!あざーす!

2011-01-29 15:17:24