2003年9月18日号

復刻シリーズ4日目。

「システムはオブジェクト指向 Ruby & Flash」(#004)   
                                                          福井修@Fsys

【○】本日のお題  Flash ActionScriptオブジェクト指向から見ると  ━━━
 
前回 注1)オブジェクト指向設計は難しいが、Rubyによるオブジェクト指向実装
で『簡単に』『手軽』で『楽しく』できるようになったと書きました。楽しくな
いものは、長続きしませんし 楽しいRuby はじわじわ広がっていきます。注2)

JavaC#は、純粋なオブジェクト指向言語ではなく欠点があります。注3)

今回は、オブジェクト指向の復習をしてから、Flash ActionScriptを、オブジェ
クト指向の視点で見てみます。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ 階層・粒度の整理
────────────────────────────────────
 まず、物の見方の整理をします。

『階層』というか『粒度』について、再確認です。

 大局
 ↑     コンセプト、方針  レベル
 │
 │     デザイン、設計 レベル
 │
 │     プログラミング、実装 レベル
 ↓
 細部

この レベル(『階層』というか『粒度』)が、混在していると話しがわかりにく
くなります。

そもそも私のタイトル自体「システムは、オブジェクト指向 Ruby & Flash」を
その視点で見てみましょう。

「システム」というのは、ハードもソフトも人もすべて含んだ大きな粒度です。
「Ruby」は、オブジェクト指向スクリプト言語です。
「Flash」は、Macromedia社のアニメーションツール 注4) です。

見事に、レベル(『階層』『粒度』)が、混在しています^^;。

タイトルは、短くまとめないといけませんから言葉が省略されています。

「(これからの)システムはオブジェクト指向(を適用するのが有利なので、オブ
  ジェクト指向開発--分析・設計・実装--に適した)Rubyと(Webでのリッチクラ
  イアント実現に優れた)Flash(のActionScriptで実装するのがよさげですよ)」

まあ関心のある方には、ご理解頂けるでしょう。

『階層』『粒度』を揃えて話しを進めるのが、わかりやすいコツだと思います。

と前フリして前回の補足説明をしておきます。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ オブジェクト指向設計は難しいが Rubyオブジェクト指向プログラミング
   は、やさしい??
────────────────────────────────────
 オブジェクト指向設計・クラス設計は難しいという話しと、Rubyのオブジェク
ト指向プログラミングは、取っつきやすくて、楽しいという話しは、レベルが対
応していないのではないかというツッコミへの補足です。

クラス設計には、粒度の違いを考慮する必要があります。

大きなスケールでは、国連の下部組織UN/CEFACTがビジネスをUMLで記述し国際標
準規格 BCF(Business Collaboration Framework)を策定しようとしています。
注5)

大きい粒度でのビジネスモデリングは、事業模型倶楽部の活動が有名です。注6)

そしてデザインパターンによるクラス設計の段階は、粒度が小さく実装のレベル
となります。注7)

ここのところの差が、激しいのです。業務をモデル化して、いきなりクラス設計
というのは、まず無理で、はじめは、ユースケース分析・設計からでしょう。

ここをじっくりやるにはCRCカードの手法などもあります。注8)

実装のレベルで、クラス設計し、プログラミングしてゆく際には、粒度は細かく
なります。そのレベルでRubyオブジェクト指向プログラミングは、取っつきや
すくて、楽しいのです。

難しいビジネスモデリングの粒度での設計は、ひとまず後回しにして、とっつき
やすい実装の粒度で、オブジェクト指向しましょう。それが賢明でしょうという
話しなのでした。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ Flash ActionScriptオブジェクト指向から見ると
────────────────────────────────────
 やっと今日のテーマの Flash ActionScript に入ります。

オブジェクト指向プログラミングの実装レベルではいろいろな環境があります。

今はやりのJavaや新鋭C#VB.NET をはじめ大御所SmallTalk、輪廻のSqueak注9)
そしてスクリプト言語では、先輩PhysonのあとRubyが君臨し、ActionScriptJavaScriptを踏み台に、ActionScript2へと進化を進めています。注10)

オブジェクト指向には、考え方や用語に、敷居があるのは、確かです。
オブジェクト、クラス、インスタンスメソッドカプセル化、継承、ポルモー
フィズム...まあ慣れてしまえば良いのですが^^

どれかの言語でアプローチすれば、そのエッセンスは、他の言語でも利用できま
す。

Rubyオブジェクト指向に踏み入ったら、Javaも見えますし、ActionScriptもよ
く見えます。

たぶん Web屋さんで Flashは使っているが、ActionScriptはちょっと..という方
も世間には、多いのではないかと推察します。

マウスクリクリとプログラミングでは、スキルの分野が違うと思います。がきっ
と避けて通れないのでしょうから、ここはオブジェクト指向を使うという決断を
して、RubyActionScriptをマスターするのがおいしい選択になると思います。

   ActionScriptの解説は、黄色く太くひときわ目立つところの

  FLASH ActionScriptバイブル 上野 亨著 オーム社 ISBN4-274-06402-6 \3800
  続FLASH ActionScriptバイブル MXのツボ 上野 亨著 オーム社 
                                                ISBN4-274-06490-5 \3800

  がわかりやすくて丁寧なので、お勧めです。

ActionScriptオブジェクト指向を理解して使いこなすのがポイントでしょう。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■ ActionScript で 部品化、自律 がよく見える
────────────────────────────────────
 ActionScriptには『 Flash UI Components 』という文字通り『部品』が存在し
ます。
これは、パラメータとメソッドが定義されているムービークリップで、これを使
うことで、1から作るのに比べとても簡単に様々な機能を利用できます。注11)

これなんかはオブジェクト指向のメリットそのものですね。

ツリーコントロールやカレンダーコントロールには、お世話になっているので、
実践編でまた紹介します。

現在の Flash MX ActionScriptには、class は、陽にはなく、例えば次の様に

FTreeClass.prototype.addNode = function(parent, child) {
  this.addNodeAt(parent, child, parent.length);
}

prototypeプロパティを使って生成されるオブジェクトのベースを定義します。

次の Flash MX 2004では
「With the introduction of keywords such as class, interface, extends, 
  and implements, ActionScript syntax is now easier to learn for 
  programmers familiar with other languages. New programmers can learn 
  more standard terminology that they can apply to other object-oriented
  languages they may study in the future.」注12)

 とのことですから、class や 継承が 陽に使えるようになりますね。

クラス(=設計図、型枠)から生成したインスタンス(=オブジェクト)で、
それぞれが、自分の時間軸をもってイベントに対して自律して動作する様子は
ムービークリップオブジェクトでは、解りやすいですね。
(目に見えない、例えばDBアクセスのオブジェクトなどに比較して)

オブジェクト指向の特長は、「カプセル化・動的結合・継承などの手段と一緒に
なって、人間の頭でイメージしやすい形でコンピュータの中の情報を表現できる
こと」注13) なので Flashムービークリップオブジェクトは、それらの特長
が極めて端的に現れる例です。

 これをActionScriptでプログラミングすることは、まさにオブジェクトを操っ
ている実感を得られる場面でしょう。


次回は「【 実践編 】MVCモデル を Ruby&ActionScript で実装する」です。
また コードの世界に行きます。お楽しみに。


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
※ 注釈、資料、参考情報
────────────────────────────────────
注1) http://www.melma.com/mag/02/m00020302/a00000612.html
注2) “エンジニアの幸せ”を味わえるプログラミング言語Ruby
     http://itpro.nikkeibp.co.jp/free/ITPro/OPINION/20030804/1/
注3) Javaの欠点と言われるのは次の三つ
    (1)オブジェクトではないデータ型があること
    (2)いろいろな型で使えるクラスを作れない 
    (3)二つ以上のクラスの実装を継承できないこと
    Javaの知られざる欠陥
     http://itpro.nikkeibp.co.jp/members/NBY/techsquare/20030117/1/
     http://itpro.nikkeibp.co.jp/members/NBY/techsquare/20030117/2/
     http://itpro.nikkeibp.co.jp/members/NBY/techsquare/20030117/3/
注4) ケータイ用語の基礎知識第134回:Macromedia Flashとは 
     http://k-tai.impress.co.jp/cda/article/keyword/14150.html
注5) あらゆるビジネスをUMLモデリングする夢 2003/9/12
     http://www.atmarkit.co.jp/news/200309/12/bcf.html
注6) 事業模型倶楽部
     http://www.bm-study.org/
     エンタープライズモデリングへの誘い(いざない)
http://www.ogis-ri.co.jp/otc/hiroba/technical/EnterpriseModeling/
注7) CRCカードとは何か?
     http://shibu.jp/XP/crc
注8) デザインパターンを活用する 中谷多哉子さん
     http://www.s-lagoon.co.jp/pattern_use_nf.html
注9) Squeak Introduction Page!
     http://www.mars.dti.ne.jp/~umejava/smalltalk/squeak/
注10)Flash MX 2004の[ECMA-262第4版準拠]
     http://www.FumioNonaka.com/TechNotes/Flash/FN0309003.html
注11)Macromedia Flash MX コンポーネント
http://www.macromedia.com/jp/devnet/mx/flash/articles/components.html
注12)Macromedia Flash MX 2004 Preview
     http://downloads.junioronline.us/flash_mx_review.html
注13)オブジェクト指向スクリプト言語Ruby まつもとゆきひろ/石塚圭樹共著
     アスキー出版 ISBN4-7561-3254-5  P.201
    
【プロフィール】
福井 修 ( FUKUI Osamu )o-fukui@po.iijnet.or.jp
福井システムリサーチ http://fsys.net/  主幹。システム構築歴27年。
システム構築エキスパート
日本リヌクス協会、神戸商工会議所情報処理学会 会員
関西ソーホ・デジタルコンテンツ事業協同組合デジタルハリウッド三宮校 Java講師