« shadowboxでHTML表示のメモ | main | javascript開発環境をとりあえず作っておく。 »

インターフェースって食べれるの?

FLASH勉強

2009年03月16日

大阪てら子 21 「AS3教えて!えらい人」にいってきました。

色々と勉強になる質問が飛び交い、先生達が勉強になる解答を示してくれて、私にとって、とっても有意義な時間になりました。

自分はinterface(インターフェース)について質問させてもらったんで、その内容をちょちょいとまとめておきます。

インターフェースってなに?

抽象的なクラスです。っと説明つきにくいので、↓を参照してください。

Java入門 | インタフェース

Javaの資料ですが、概念はActionScriptでもほとんど変わらないはずです。自分もモヤモヤっとしか理解してません。。。

もう少し具体的にどういう時に使うの?

インターフェースを実装 (implements)したクラスはインターフェースで定義されたメソッドを必ず実装しなければならない。(しなければコンパイルできない)

ってことは、複数人でコードを書く時にインターフェースを決めておけば、クラスが綺麗に統一されていくよー。みたいなことはググっていけば何となく理解できました。

ただし、システムのように大人数で開発することは余りなく、一人で実装することが多いFlashでは、インターフェースは必須ではないんじゃない?って疑問がふつふつと。

ということで、別な部分での利点を教えてください!

っていうことを質問したわけであります。

で、そのまとめを文章で説明しにくいので以下のasを!!

※車に無理矢理例えてみた。
※メソッドのok_wakattaYo1とok_wakattaYo2を見てなるほど!っと道が開ければ。。

teraco_osiete.as

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理解度の人はなるほどー!!ってなるはず。

trackbacks

trackbackURL:

comments

  • ikekou
  • 2009年03月20日 23:33

こんにちは!
てらこで一緒したikekouです。誰だか覚えてない感じかと思いますが・・・紫色のパーカー着てた人です。QTVRに載ってるやつ見たら思い出していただけるかと。

インターフェースは僕もあまり使いこなせてなかったので、めっちゃナイス質問!て思っておりました。

>システムのように大人数で開発することは余りなく、一人で実装することが多いFlashでは、インターフェースは必須ではないんじゃない?って疑問がふつふつと。

と、僕も思ってました。ので、大先生の回答で「なるほど」ってなりました。

そんなかんじで、またご一緒する機会がありましたら、よろしくお願いします^^

  • y-tti
  • 2009年03月22日 01:21

覚えてますよ!

インターフェースはずっと使い方が分からなかったので
すっきりしました。
同じような疑問もってる人がいて何だか嬉しいです。

こちらこそ、またご一緒する機会がありましたら、よろしくお願いします!

  • John
  • 2016年10月12日 17:30

very nice submit, i definitely love this website, keep on it

comment form
Adobe Flash CS3 詳細! ActionScript 3.0 入門ノート (DVD-ROM付)
クラスで書けるようになった。配列のpushとかspliceとかsliceとかややこしい部分の辞書代わりにも使ってます。XML関係もこれで覚えた。
ActionScript 3.0 アニメーション
vx,Math,cos,sinとか???な数学的な部分をこの本で理解できた気がします。逃げたいジャンルだけどFLASHに必須なジャンルなのよね。。
Adobe Flash CS3 詳細! ActionScript3.0入門ノート2 (CD-ROM付)
ActionScript応用への第一歩。ただこれを読む前に入門ノート1を先に読んでおいた方がよさそう。ASの世界が広がった気がする本です。
Flash Creative Workshop
FLASHを始めて右も左も分からない時に救世主となった本。FLASHサイト制作法がなるほど!っと。ActionScriptバリバリの人はスルー。
FLASH OOP for ActionScript 3.0
FLASHの「今の主流」を知ることが出来る本。筆者の方々は総勢10人以上でかつ現在活躍中の方々ばかりなんでミーハー的な読み方もありかも。