Colin Moockセミナー参加!-PartⅡ-

  • 投稿日:
  • by
  • カテゴリ:

またまた行ってきました。Colin Moockセミナー
またまた行ってきました。Macromedia。
今日のお題は「オブジェクト指向プログラミング(OOP)」。
もちろん「ActionScript2.0による」です。

はっきり言おう。「目から鱗が落ちる」とはこのことさっ。
実際使いこなせるかどうかは別として、いままでとっつきにくくてしょーが
なかったOOPの数々の単語の意味がこのセミナーで霧が晴れるように
理解できたのです。別にColin Moockを持ち上げるわけではありません、
いつものようにユーモア交えながら丁寧に説明はしてくれましたが。
前回と違っていたのはテキストが日本語化されていたこと。これだけでも
ありがたかったです。スタッフのみなさんありがとー。

それにしても何であんなに悩んでいたんだろう。考えてみればOOPを
まじめに講義受けたのはこれがはじめてではないだろうか。いつも独学
で何とかしようとして越えられそうで越えられなかった壁。それが大家の
説明一つ聞くだけでこんなにも理解がすすむものでしょうか。

「百冊の本を読むより一人の大家に聞け」 by ただおー
(別に本を馬鹿にするわけではありません。実際私も本をよく買いますし)

セミナー自体は例によって前半でOOPの基礎を説明、後半は「たまごっち」
(なつかしー)もどきのゲームをOOPで作成するというケーススタディでした。
今回は夜からの2時間、と前回よりタイトなスケジュールだけに最後の方は
時間が押してしまい駆け足になってしまったのが残念です。

聞け。天からの声。

  OOPとはプログラムをモジュールに分けてプログラミングする手法です。
  その細かく分けられたモジュールを「クラス」といいます。
  クラスは独立し、互いに依存しません。
  クラスには変数と関数が含まれます。
  一般にクラスは抽象的なコンセプトです。(実体ではない)

  一方、クラスを実体化したものを「オブジェクト」といいます。
  オブジェクトは「インスタンス」とも呼ばれます。
  FLASHでいうと、ライブラリの中にある「シンボル」がクラスで、
  そのシンボルがステージ上に配置された時点でオブジェクトになります。

  オブジェクト指向のプログラムを作成するために必要な3ステップ

   1.1つ以上のクラスを作成
   2.クラスからオブジェクトを生成(オブジェクトを「インスタンス化」する)
   3.オブジェクトに命令を送る

  クラスファイルは拡張子が「.as」のファイルです。
  クラス名及びクラスファイル名は同一でなくてはならず
  最初の文字が大文字であることが強い慣例となっています。
  .flaファイルとの関連付けは同一ディレクトリに置けば特に何もする必要はなし。
  ディレクトリを分ける場合はFLASHのクラスパスで設定する必要があります。
  ActionScript2.0では「#include」は使えません。

  クラス内で定義された関数を「メソッド」といい、
  クラス内で定義された変数を「プロパティ」といいます。
  メソッドはJAVAやC++など他のOOP言語と共通するキーワードですが
  プロパティはFLASH独自のものです。(他では変数は「変数」らしい)
  クラス内のメソッド及びプロパティを合わせて「メンバー」といいます。

  privateキーワード:クラス内でのみ使うことができる
  publicキーワード:他のクラスから呼び出すことができる

  「オブジェクトの生成(実体定義)」: new ClassName()
  オブジェクトはどこかに保持していなければならない。
  通常変数に代入してこれを保持します。

   var obj = new ClassName();

  オブジェクトが生成される時に自動的に実行される関数を
  「コンストラクタ」関数といます。初期化をおこなうためのものです。
  コンストラクタはクラス名と同一のfunction名をつけます。
  通常プロパティ定義直後に記述します。

  データ型宣言を明示的にしておくことでコンパイル(Ctl+Enter)時に
  型チェックをして方の不一致を検出できます。
  データ型宣言はメソッド及びプロパティ定義の後ろに「:」をつけます。
  データ型にはNumberやStringのほかにクラスを指定することもできます。
  メソッドにおいては戻り値の型を指定することになります。
  このようにすることでデバッグの効率がアップします。

   var age: Number, var name: String;
   var funcCalc(): Number, var funcName(): Void ※Void:戻り値なし

  アクセサーメソッド(Accessor Method):

   プロパティに直接触らずにオブジェクトの状態を
   外部から取得したり変更したりするためのもの

  カプセル化

   クラスの動作に関わる内部の詳細を隠蔽すること
   必要なプロパティのみpublicとして他はprivateとして隠蔽
   内部の詳細を理解することなく、依存することなくオブジェクトを使える
   ようにすることがカプセル化の目的です。

  同一クラス名で複数オブジェクトが存在していて、
  それぞれのオブジェクトに共通する情報は「クラスプロパティ」として定義します。
  具体的には「static」を変数名につけます。「Static Property」ともいいます。

  プログラム内でマジックバリュー(マジックナンバー)の記述は避けるべき
  その理由は下記の通りです。

   ・それ自身だけでは目的が判明しない
   ・プログラム内に散らばって記述された場合、間違いを引き起こしやすい

  以上の理由よりマジックバリューはクラスプロパティに保持するようにします。

  継承

   あるクラス(サブクラス)において他のクラス(スーパークラス)の機能を利用して
   使うこと。「extends」キーワードを使う。

    class サブクラス extends スーパークラス{ }

以上はColinのサイトで公開しているものを当日テキストとして日本語訳されて
配布されたものから抜粋して自分なりにまとめたものです。
このテキストは一生のお宝になるであろう...