>  > 【USA在庫あり】 ダイナテック DYNATEK イグニッション FS システム 4プログラマブルタイミング 02年-05年 ヤマハ YFM660R Raptor DFS7-11P JP

【USA在庫あり】 ダイナテック DYNATEK イグニッション FS システム 4プログラマブルタイミング 02年-05年 ヤマハ YFM660R Raptor DFS7-11P JP

第2章、クラス編の最後はポリモーフィズムについて。
なんかクラス関係って聞いたことない用語が多いね…
ま、確かに聞き慣れない用語が多いよね。
ちなみにポリモーフィズムは「多態性」とか「多相性」とか言ったりもするよ。
それはそれで聞いたことない用語なんだけど…
具体的にはどういうものなの、ポリモーフィズムって?
例えば、A っていうクラスと B っていうクラスがあって、 それぞれこんなふうに定義されてるとするね。

<クラス A, B>
class A
{
    function A(){}  // コンストラクタ(何もしません)

    function finalize(){}  // デストラクタ(何もしません)

    // メッセージを表示するメソッド
    function message()
    {
        System.inform("A");
    }
}

class B
{
    function B(){}  // コンストラクタ(何もしません)

    function finalize(){}  // デストラクタ(何もしません)

    // メッセージを表示するメソッド
    function message()
    {
        System.inform("B");
    }
}

A とか B を表示する message メソッドがあるだけ…ずいぶんシンプルなクラスだね。
うん。
で、あと A, B クラスとは別に showMessage っていう関数があって、こう定義されてるとするね。

showMessage 関数>
function showMessage(object)
{
    object.message();  // object の message メソッドを呼び出します
}

これもシンプルだね。
えっと、これってクラス A か B のオブジェクトが引数になるの?
うん、そだよ。
で、クラス A, B と showMessage 関数を定義した後に、このスクリプトを実行するとどうなると思う?

var a = new A();
var b = new B();
showMessage(a);
showMessage(b);
invalidate a;
invalidate b;

// ここに メルセデス ベンツ GLE W166 ラゲッジマット (クロス)を書きます

// 指定されたファイルをメモ帳で開くクラス
class NotePad
{
    var selector;  // FileSelector クラスのオブジェクト

    function NotePad()
    {
        selector = new FileSelector();
    }

    function finalize()
    {
        invalidate selector;
    }

    // ファイル選択ダイアログボックスを表示します
    // ファイルが選択されれば真、キャンセルされれば偽を返します
    function input()
    {
        return selector.openFile();
    }

    // 選択されたファイルをメモ帳で開きます
    function showResult()
    {
        System.shellExecute("notepad", Storages.getLocalName(selector.name));
    }
}

// 電卓クラス(簡易版)
class Calculator
{
    var ans;  // 計算結果を保存しておくメンバ変数

    function Calculator()
    {
        ans = 0;
    }

    function finalize(){}

    // 数式の入力を求めます
    // OK ボタンが押されると数式の値を計算・保存して真を返します
    // キャンセルボタンが押されると何もせず偽を返します
    function input()
    {
        var expr = System.inputString("電卓", "数式を入力してください。", "");
        if(expr === void)
            return false;

        ans = expr!;

        return true;
    }

    // 計算結果を表示します
    function showResult()
    {
        System.inform(ans, "計算結果");
    }
}

// 時間を計算するクラス
class Time
{
    var minute;

    function Time()
    {
        minute = 0;
    }

    function finalize(){}

    // 時間(分)の入力を求めます
    // OK ボタンが押されると入力された値を保存して真を返します
    // キャンセルボタンが押されると何もせず偽を返します
    function input()
    {
        var value = System.inputString("何分後?", "数値を入力してください。", "");
        if(value === void)
            return false;

        minute = +value;

        return true;
    }

    // 今から minute 分後の時刻を表示します
    function showResult()
    {
        var d = new Date();
        var min = d.getMinutes() + minute;
        var hour = (d.getHours() + min \ 60) % 24;
        min %= 60;

        System.inform("今から " + minute + " 分後は " + hour + " 時 " + min + " 分です 18インチ サマータイヤ セット【適応車種:クラウンハイブリッド(200系 全グレード)】HOT STUFF プレシャス アストM1 メタリックブラック/ポリッシュ 8.0Jx18ZIEX ZE914F 225/45R18。");
    }
}


// ポリモーフィズムのための関数
// 引数は NotePad クラス、Calculator クラス、Time クラスのオブジェクトのどれかになります
function polymorphism(object)
{
    if(object.input())        // 入力を求めます
        object.showResult();  // 入力された場合は処理結果を表示します
}


// それぞれのクラスのオブジェクトを作ります
var objects = new Array();
objects[0] = new NotePad();
objects[1] = new Calculator();
objects[2] = new Time();

while(

【USA在庫あり】 カッパーシングルディスク ダイナテック DYNATEK イグニッション FS システム 4プログラマブルタイミング LUXUR 02年-05年 ヤマハ YFM660R Raptor DFS7-11P JP

true)
{
    var input = System.inputString("番号を入力してください。", "1: NotePad, 2: Calculator, 3: Time", "");
    if(input === void)
        break;  // キャンセルボタンが押されると終了します

    input = +input - 1;  // 配列の添え字に対応させるために 1 マイナスします
    if(input == 0 || input == 1 || input == 2)
        polymorphism(objects[input]);  // 対応するオブジェクトを引数にして polymorphism 関数を呼び出します
    else
        System.inform("1 から 3 の数字を入力してください。", "エラー");
}

invalidate objects[2];
invalidate objects[1];
invalidate objects[0];

えっとね… a を引数にして showMessage 関数を呼び出すと、 object が a に置き換わって a.message(); になるから…
A」って表示されるよね。
うんうん。
次の showMessage は b が引数になってて、 object が b に置き換わるから「B」って表示されるね。
そ。これがポリモーフィズム。
えっ、どういうこと?
showMessage 関数の中で呼び出してる message メソッドって、 引数にどっちのクラスのオブジェクトを指定するかで結果が変わるよね。
うん。object が A クラスのオブジェクトだったら「A」って表示されるけど、 B クラスのオブジェクトだったら「B」って表示されるよね。
つまり、引数に指定するオブジェクトに応じて色んな動作をする性質がポリモーフィズムってこと。
ちなみにポリモーフィズムってのは「色んな姿を見せる」って意味ね。
なるほど、そういうことね。
でも、これって何の役に立つの?
んー、例えばこういう場合にポリモーフィズムが使えるよ。

うわ、長いね~。
まぁね。
でも NotePad クラスも Calculator クラスも Time クラスも前に似たようなの作ったでしょ。
確かに、全部見たことある感じのスクリプトだね。
というワケで、NotePad クラスと Calculator クラスと Time クラスの説明は省略するね。
うん、OK だよ。
じゃ、まず説明の前に実行しとこっか。

JP 【USA在庫あり】 YFM660R DYNATEK DFS7-11P Raptor 4プログラマブルタイミング 【USA在庫あり】 ダイナテック イグニッション 4プログラマブルタイミング 02年-05年 ヤマハ システム FS


今回はスクリプトが長いから225/65R18 スタッドレス タイヤ 225/65R18 冬用 新品 1本 ブリヂストン BLIZZAK DM-V2 225/65R18 103Q タイヤ1本 (225 65 18 225-65-18 225/65/18)にまとめといたよ。
りょーかい!

NotePad の実行結果>

えっと、これって数字を入力すればいいの?
ん。1, 2, 3 のどれかを入力して OK ボタンを押してみて。
じゃあ、最初は 1 で、OK。
1 は NotePad になってるから、メモ帳を起動してファイルの中身を表示するんだよね?
うん。
「ファイルを開く」ダイアログボックスが表示されるから、ファイルを選択して「開く」を押せばいいんだよね。

ちゃんとメモ帳が起動したね。
じゃ次いってみよっか。
じゃあ次は、2 を入力して、OK。
2 は Calculator だから電卓だね。
ん、そう。
これって、前と同じように式を入力すればいいの?
うん、何か数式を入力してみて。
じゃあ『(65-43)/2』って入力して、OK。

Calculator の実行結果>

えっと、(65-43)/2 は 22÷2 だから、11 で合ってるよね。
じゃあ、最後に 3 の Time だね。
うん。3 を入力して OK、と。

これも前と同じなんだよね?
うん。
じゃあ、100 って入力して、OK。

Time の実行結果>

{yahoojp} {tjs2.info}
えっと、今 20 時 15 分だから、100 分後は… 21 時 55 分 DIVINE【75D23L 】MFカルシウムバッテリー ◆トヨタ:ハイラックス ◆45D23L 50D23L 55D23L 60D23L 65D23L 75D23L 70D23L他互換。
うん、合ってるね。
ポリモーフィズムを使うと、こんな感じに3つの機能を全部組み込んだスクリプトがスッキリ書けるんだ。
じゃ、まずは polymorphism 関数から見てこっか。
は~い!
NotePad クラス と Calculator クラス と 【店舗取付サービス】【C-HR ノブレッセ】C-HR 可変式リアウイング 未塗装 カーボンTime クラスにはそれぞれ input メソッドと showResult メソッドがあるよね。
input メソッドが入力を処理するメソッドで、showResult がその結果を表示するメソッドだよね?
そーそー。
で、input メソッドはデータが入力されると true、 キャンセルされると false を返すように統一されてるから…
データが入力されたら showResult メソッドが実行される、ってことだね。
ん、そういうこと。
ポリモーフィズムの対象になるクラスのメソッドは、名前と引数、あと戻り値の型と意味を合わせとくんだ。
そっか。引数も同じになるし、戻り値の扱いも同じだから、合わせとく必要があるんだね。
うん。
じゃあ、次はオブジェクトを作る部分のスクリプトね。
最初にそれぞれのクラスのオブジェクトを作って配列に入れてるね。
入力された番号によってどのオブジェクトを引数にするかが決まるから、 配列にしとけば、入力された番号を添え字として使えて便利だからね。
あ、なるほどね 。
で、後は inputString メソッドで入力を受け取って…
入力された値が 1, 2, 3 のどれかだったら、 配列の添え字にするために 1 引いてから、 配列に入ってるオブジェクトを polymorphism 関数に渡すんだね。
ん、そう。
こうすることで、オブジェクトごとにいちいち関数を作らなくてもよくなるってワケ。
う~ん、ポリモーフィズムも便利そうだけど、やっぱり上手く使いこなすのが難しそうだよね。
どういうときにポリモーフィズムを使ったらいいのかとかもよく解らないし…
確かにポリモーフィズムとか、あと前に説明したクロージャや incontextof 演算子とかも、使い方よりどこで使えばいいかってのを判断する方が難しいかもね ブリヂストン ALENZA アレンザ 001 サマータイヤ 225/55R18 ENKEI PerformanceLine PF01 ホイールセット 4本 18 X 8 +45 5穴 114.3。
今回のスクリプトもポリモーフィズムを使わずに書くこともできるわけだしね。
だよねぇ…
まぁ、とりあえずはちゃんと思った通りに動くスクリプトが書けるようになることを目標にしたらいいんじゃないかな。
それが出来るようになってから、わかりやすくてすっきりしたスクリプトとか効率的なスクリプトを書くことに挑戦したらいいわけだし NITTO ニットー NT555 G2 サマータイヤ 215/40R18 WORK ワーク DURANDAL DD5.2 ホイールセット 4本 18インチ 18 X 7.5 +45 5穴 114.3。
うん、そだね。
じゃあ、第2章はこれで終わり。
次回から第3章に入るね。
第3章は何をやるの?
ウィンドウとかレイヤ関係かな。
あとサウンド再生とかについてもやるつもりだよ。
なんか KAG っぽくなってきたね。
うん。でもタグは使わずに全部 TJS で書いてくから。
あと、第3章で 【高性能】ベンツ Sクラス(W221) 221057用 MANN フレシャスプラス エアコンフィルター Mercedes-Benz メルセデス・ベンツ ☆送料無料☆ 当日発送可能(弊社在庫品の場合)§0.3 の目標を達成するからね。
ってことは、あの時計を完成させるってこと?
うん、そういうこと。
第3章も長くなると思うけど、KAG に色んな機能を追加したりするのに必要なことがたくさんあるから。
そうなんだ、それはちょっと楽しみかも ディクセル ブレーキローター PD(プレーンディスク) フロント左右セット ムーヴ L152S 3818013 取付セット DIXCEL ディスクローター ブレーキディスク【店頭受取対応商品】。
というワケで、次の章もしっかりついてきてね!
うん、わかった。

【USA在庫あり】 ダイナテック DYNATEK イグニッション FS システム 4プログラマブルタイミング 02年-05年 ヤマハ YFM660R Raptor DFS7-11P JP

。がんばるね!
{yahoojp}jpprem01-zenjp40-wl-zd-32267