>  > 古河バッテリー ハイグレードクラスカーバッテリー FB7000 エルグランド KD-AV(W)E50 1997-2002 品番:115D31R

古河バッテリー ハイグレードクラスカーバッテリー FB7000 エルグランド KD-AV(W)E50 1997-2002 品番:115D31R

第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;

// ここに 【送料無料】ウェッズ レオニスFY 15インチ 165/55R15 165/55-15 ムーヴキャンバス タイヤ付き ホイール 組込・バランス調整 4本セットを書きます

// 指定されたファイルをメモ帳で開くクラス
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 + " 分です TOYOTIRES トーヨー ナノエナジー3プラス NANOENERGY3plus サマータイヤ 215/55R16 MONZA JP STYLE CRAVER ホイールセット 4本 16 X 6.5 +38 5穴 114.3。");
    }
}


// ポリモーフィズムのための関数
// 引数は 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(

古河バッテリー ハイグレードクラスカーバッテリー FB7000 エルグランド KD-AV(W)E50 1997-2002 ★スタッドレスセット★ 品番:115D31R 【カロ

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 だよ。
じゃ、まず説明の前に実行しとこっか。

1997-2002 ハイグレードクラスカーバッテリー 1997-2002 品番:115D31R エルグランド KD-AV(W)E50 品番:115D31R FB7000 古河バッテリー


今回はスクリプトが長いから送料無料(一部離島除く) REAL レアル ステアリング レクサスシリーズ GS-BSM-SLCにまとめといたよ。
りょーかい!

NotePad の実行結果>

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

古河バッテリー ハイグレードクラスカーバッテリー FB7000 エルグランド KD-AV(W)E50 1997-2002 品番:115D31R


■品番115D31R
■商品バッテリー
■メーカーFURUKAWA BATTERY/古河バッテリー
■商品名ハイグレードクラスカーバッテリー FB7000
■自動車メーカーNISSAN/ニッサン
■車種エルグランド
■車種備考
■エンジン種類ディーゼル
■排気量(cc)3200
■型式KD-AV(W)E50
■エンジン型式QD32ETi
■年式1997-2002
■備考
■新車搭載115D31R
■充電制御車/IS/HV
■寒冷地仕様80D26R+L
■バッテリー形式115D31R
■バッテリータイプRタイプ
■バッテリー個数1
■バッテリー注意事項
■電圧(V)12
■5時間率容量(Ah)72
■外形寸法(約mm):総高さ225
■外形寸法(約mm):箱高さ200
■外形寸法(約mm):幅171
■外形寸法(約mm):長さ304
■液入質量(約kg)21.8
■フタ形状フラットタイプ
■アクセサリーインジケータ(40B19を除く)
取っ手(34B17を除く)
防爆栓
赤リング
取付年月日シール
■商品説明充電制御車対応
長寿命
高い充電受け入れ性能
高い始動性能
防爆設計
補償期間:36ヶ月または6万km
■納期メーカー取り寄せ品の為、通常2~4営業日以内に発送致します。

※ ご注文前に必ずご確認下さい
お急ぎの場合はご購入前に納期確認をお願い致します。
納期について
*メーカー在庫が欠品の場合、1~2ヶ月以上のお時間を頂く場合がございます。
*メーカーにて予告無く廃番、仕様変更になっている場合があります。

返品・キャンセルに関して
*お客様都合による返品・キャンセル・商品の変更は一切お受けしておりません。
*在庫・納期・適合未確認でご購入された商品のキャンセルは一切お受けしておりません。

ちゃんとメモ帳が起動したね。
じゃ次いってみよっか。
じゃあ次は、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 分 新春【ポイント5倍】24時間限定SALE フロントシート ニッサン デイズルークス (DAYZ_ROOX) 専用 前席 [1列分] ピンク ダイヤ キルティング シートカバー カーシートカバー ※オーダー受注生産(約45日)代引き不可。
うん、合ってるね。
ポリモーフィズムを使うと、こんな感じに3つの機能を全部組み込んだスクリプトがスッキリ書けるんだ。
じゃ、まずは polymorphism 関数から見てこっか。
は~い!
NotePad クラス と Calculator クラス と 【新品 激安 4本セット バルブ付き】255/35R20 【なんと4本総額 24,416円】マジーニ(MAZZINI) ECO606タイヤ サマータイヤTime クラスにはそれぞれ input メソッドと showResult メソッドがあるよね。
input メソッドが入力を処理するメソッドで、showResult がその結果を表示するメソッドだよね?
そーそー。
で、input メソッドはデータが入力されると true、 キャンセルされると false を返すように統一されてるから…
データが入力されたら showResult メソッドが実行される、ってことだね。
ん、そういうこと。
ポリモーフィズムの対象になるクラスのメソッドは、名前と引数、あと戻り値の型と意味を合わせとくんだ。
そっか。引数も同じになるし、戻り値の扱いも同じだから、合わせとく必要があるんだね。
うん。
じゃあ、次はオブジェクトを作る部分のスクリプトね。
最初にそれぞれのクラスのオブジェクトを作って配列に入れてるね。
入力された番号によってどのオブジェクトを引数にするかが決まるから、 配列にしとけば、入力された番号を添え字として使えて便利だからね。
あ、なるほどね 。
で、後は inputString メソッドで入力を受け取って…
入力された値が 1, 2, 3 のどれかだったら、 配列の添え字にするために 1 引いてから、 配列に入ってるオブジェクトを polymorphism 関数に渡すんだね。
ん、そう。
こうすることで、オブジェクトごとにいちいち関数を作らなくてもよくなるってワケ。
う~ん、ポリモーフィズムも便利そうだけど、やっぱり上手く使いこなすのが難しそうだよね。
どういうときにポリモーフィズムを使ったらいいのかとかもよく解らないし…
確かにポリモーフィズムとか、あと前に説明したクロージャや incontextof 演算子とかも、使い方よりどこで使えばいいかってのを判断する方が難しいかもね RSR ダウンサス ステージア WGC34 フロント2本 新品 RS-R N730WF。
今回のスクリプトもポリモーフィズムを使わずに書くこともできるわけだしね。
だよねぇ…
まぁ、とりあえずはちゃんと思った通りに動くスクリプトが書けるようになることを目標にしたらいいんじゃないかな。
それが出来るようになってから、わかりやすくてすっきりしたスクリプトとか効率的なスクリプトを書くことに挑戦したらいいわけだし Brembo ブレンボ ブレーキパッド(単品) フロント ブラック MITSUBISHI デリカ 型式P23V P25V P27V P45V P23W P24W P25W P35W 年式86/4~94/3 品番P54 008。
うん、そだね。
じゃあ、第2章はこれで終わり。
次回から第3章に入るね。
第3章は何をやるの?
ウィンドウとかレイヤ関係かな。
あとサウンド再生とかについてもやるつもりだよ。
なんか KAG っぽくなってきたね。
うん。でもタグは使わずに全部 TJS で書いてくから。
あと、第3章で [3252016] DIXCEL PD ブレーキローター リヤ用 シーマ FHY33 97/9~98/9§0.3 の目標を達成するからね。
ってことは、あの時計を完成させるってこと?
うん、そういうこと。
第3章も長くなると思うけど、KAG に色んな機能を追加したりするのに必要なことがたくさんあるから。
そうなんだ、それはちょっと楽しみかも プロジェクトμ TYPE HC-CS ランディ SC25, SNC25 07.1~10.6 リア用。
というワケで、次の章もしっかりついてきてね!
うん、わかった。

古河バッテリー ハイグレードクラスカーバッテリー FB7000 エルグランド KD-AV(W)E50 1997-2002 品番:115D31R

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