大阪てら子 21 「AS3教えて!えらい人」にいってきました。
色々と勉強になる質問が飛び交い、先生達が勉強になる解答を示してくれて、私にとって、とっても有意義な時間になりました。
自分はinterface(インターフェース)について質問させてもらったんで、その内容をちょちょいとまとめておきます。
インターフェースってなに?
抽象的なクラスです。っと説明つきにくいので、↓を参照してください。
Javaの資料ですが、概念はActionScriptでもほとんど変わらないはずです。自分もモヤモヤっとしか理解してません。。。
もう少し具体的にどういう時に使うの?
インターフェースを実装 (implements)したクラスはインターフェースで定義されたメソッドを必ず実装しなければならない。(しなければコンパイルできない)
ってことは、複数人でコードを書く時にインターフェースを決めておけば、クラスが綺麗に統一されていくよー。みたいなことはググっていけば何となく理解できました。
ただし、システムのように大人数で開発することは余りなく、一人で実装することが多いFlashでは、インターフェースは必須ではないんじゃない?って疑問がふつふつと。
ということで、別な部分での利点を教えてください!
っていうことを質問したわけであります。
で、そのまとめを文章で説明しにくいので以下のasを!!
※車に無理矢理例えてみた。
※メソッドのok_wakattaYo1とok_wakattaYo2を見てなるほど!っと道が開ければ。。
package { import flash.display.DisplayObject; import flash.display.Sprite; public class teraco_osiete extends Sprite { public function teraco_osiete() { ok_wakattaYo1(); ok_wakattaYo2(); } public function ok_wakattaYo1():void { //var car:Car = new Car(); //っとするところを抽象的に //var car:IMachine と変数宣言してみる。 var car:IMachine = new Car(); //そのままcarをaddChildするとIMachineはDisplayObjectでは //ないので怒られる。なんでキャストする。 addChild(DisplayObject(car)); //上記2つと同様。 var carlogo:IMachine = new CarLogo(); addChild(DisplayObject(carlogo)); } public function ok_wakattaYo2():void { //Car(Sprite)とCarLogo(TextField)をインスタンス化して、配列にぶっこむ。 var machines:Array = []; var car:Car = new Car(); var carlogo:CarLogo = new CarLogo(); machines.push(car); machines.push(carlogo); //配列の中身をfor eachでまわす時、受け取る変数をIMachineと定義する。 //IMachineにはdrawが定義されているので問題なくdrawできる。 //※抽象クラスを使うことによりSpriteを継承しているCarでもTextFieldを継承しているCarLogoでも // 変数に格納できる。 for each (var obj:IMachine in machines) { trace(obj);//1ループ目[object Car] , 2ループ目[object CarLogo] obj.draw(); } } } } import flash.display.Sprite; import flash.text.TextField; import machine1.IMachine; /** * 抽象クラス「IMachine」を実装 (implements)したCarクラス */ class Car extends Sprite implements IMachine { public function draw():void {} } /** * 抽象クラス「IMachine」を実装 (implements)したCarLogoクラス */ class CarLogo extends TextField implements IMachine { public function draw():void {} } /** * 抽象クラス「IMachine」 * 抽象メソッド「draw」のシグネチャを定義 */ interface IMachine { function draw():void; }
私と同じぐらいのas理解度の人はなるほどー!!ってなるはず。
comments
こんにちは!
てらこで一緒したikekouです。誰だか覚えてない感じかと思いますが・・・紫色のパーカー着てた人です。QTVRに載ってるやつ見たら思い出していただけるかと。
インターフェースは僕もあまり使いこなせてなかったので、めっちゃナイス質問!て思っておりました。
>システムのように大人数で開発することは余りなく、一人で実装することが多いFlashでは、インターフェースは必須ではないんじゃない?って疑問がふつふつと。
と、僕も思ってました。ので、大先生の回答で「なるほど」ってなりました。
そんなかんじで、またご一緒する機会がありましたら、よろしくお願いします^^
覚えてますよ!
インターフェースはずっと使い方が分からなかったので
すっきりしました。
同じような疑問もってる人がいて何だか嬉しいです。
こちらこそ、またご一緒する機会がありましたら、よろしくお願いします!
very nice submit, i definitely love this website, keep on it