////////////////////////////////////////////////////////////////////
/*

    KAB-studio.h


    (C)KAB-studio 1999 - 2007 ALL RIGHTS RESERVED.
        http://www.kab-studio.biz/
        info@mail.kab-studio.biz

    送信日： 2007/03/19(Mon) No.399
    配信数： 1553
    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
*/
////////////////////////////////////////////////////////////////////

/*            KAB-studio.h 発行終了のおしらせ                     */

このたび、本メールマガジン「KAB-studio.h」は、2007年3月26日発行の
No.400号をもちまして発行を終了することとなりましたため、みなさまに
おしらせいたします。
発行終了後の各コンテンツは以下の通りとなります。

・ニュースおよび日記ダイジェスト
→KAB-studioではRSSを配信してしておりますのでそちらをご利用ください。
http://www.kab-studio.biz/rss.xml

・風雅、舞い
ホームページにて不定期掲載を行います。
掲載はかぶろぐおよびRSSにておしらせいたします。
http://www.kab-studio.biz/Novel/Fuga/index.html

・#pragma twice
No.400にて最終回となります。ご了承ください。
ホームページ版にて全話公開しておりますのでご利用ください。
http://www.kab-studio.biz/Programing/PragmaTwice/index.html

以上、ご了承頂ければと思います。


////////////////////////////////////////////////////////////////////
// NEW!!
http://www.kab-studio.biz/index.html

2007/03/19 (Mon)
　ほとはー外伝３にP.94を追加！
[ 三人合体ホットハーブ 外伝３ 【ワタシ の キロク】 ]
http://www.kab-studio.biz/Comic/HotHerbA3/index.html


////////////////////////////////////////////////////////////////////
// ちょお普通な日記
http://www.kab-studio.biz/nikki2/index.html

2007/03/11 (Sun)
　ダメな日。３時間ウィスポボクシング面白すぎ。でもマットプロ強すぎ。
アニメ観て感想書いて以上。昨日確定申告送ったから気が抜けた。

2007/03/12 (Mon)
　テキスト関係おしごとを３分の１完了。今日はこれだけ。

2007/03/13 (Tue)
　引き続きテキスト関係おしごと。思った以上に大変。追加する部分が結構
あった。今日はこれだけ。

2007/03/14 (Wed)
　テキスト関係おしごと、昨日朝６時までやって、起きてからもずっと。
午後４時くらいに完成して送付。ウィスポボクシングでマットプロ倒す。

2007/03/15 (Thu)
　横浜でもじぴったんとかコミックスとか購入。あとはぐだー。もじぴったん
にはまれない。

2007/03/16 (Fri)
　昨日は夜中までもじぴったん。今日はお絵かきとほとはー外伝３ネーム
切り。あとは洗濯とかして以上。

2007/03/17 (Sat)
　なんかしっかり寝れてない。ほとはー外伝３は月曜分完成。PSP購入。
出費多いし消化し切れてないし。


////////////////////////////////////////////////////////////////////
// かぶろぐ。
http://d.hatena.ne.jp/kab_studio/

2007/03/11 (Sun)
http://d.hatena.ne.jp/kab_studio/20070311
起きた。
[KAB-studio]ぷらとわ追加。
[KAB-studio][ほとはー]ほとはー外伝３ P.93
[アニメ]獣拳戦隊ゲキレンジャー 第4話「ゾワゾワ！五毒拳」
[アニメ]「牙」 第49話「母と子」
[アニメ]おねがいマイメロディ〜くるくるシャッフル！〜 
　第50話「潤を救えたらイイナ！」
[アニメ]ひまわりっ！！ 第10話「ひまわり、故郷に帰る」
[アニメ]京四郎と永遠の空 第10話「天使の牢獄（バスティーユ）」
[アニメ]神様家族 第10話「涙のハートで桃色貯金?!」

2007/03/12 (Mon)
http://d.hatena.ne.jp/kab_studio/20070312
起きた。
[アニメ]金色のコルダ 第23話「俺たちのカデンツァ」
[アニメ]がくえんゆーとぴあ まなびストレート！ 第10話「集う仲間たち」

2007/03/13 (Tue)
http://d.hatena.ne.jp/kab_studio/20070313
起きた。
[アニメ]SHUFFLE! MEMORIES 第10話「リシアンサス編 後編」
[アニメ]Pumpkin Scissors 第23話「そして甘い罠」

2007/03/14 (Wed)
http://d.hatena.ne.jp/kab_studio/20070314
起きた。
[Wii]Wii Sports ボクシング 攻略
[アニメ]DEATH NOTE 第22話「誘導」
[アニメ]ネギま！？ 第24話「ネギ先生、どうやらクライマックスです」

2007/03/15 (Thu)
http://d.hatena.ne.jp/kab_studio/20070315
起きた。
帰ってきた。
[買]もじぴったんDS
[買]コミックスとか。
[アニメ]ロケットガール 第4話「カウントダウン -count down-」
[アニメ]武装錬金 第24話「キミが死ぬ時が私が死ぬ時」

2007/03/16 (Fri)
http://d.hatena.ne.jp/kab_studio/20070316
起きた。
[絵]侍さん。
[アニメ]のだめカンタービレ 第10話
[アニメ]ひだまりスケッチ 第10話「11月3日 ゆのさま」
[アニメ]セイントオクトーバー 第11話「ロリ激突！女の意地が超ごっつんこ！」
[アニメ]すもももももも〜地上最強のヨメ〜 第22話「いつもの日々へ」(終)

2007/03/17 (Sat)
http://d.hatena.ne.jp/kab_studio/20070317
起きた。
[買][装備]PSP購入！
[アニメ]デルトラクエスト 第11話「はばひろ川を渡れ」
[アニメ]おとぎ銃士 赤ずきん 第37話「ふたつの世界の物語」
[アニメ]ふしぎ星の☆ふたご姫 Gyu! 第50話「ブラッククリスタルキング登場☆学園の危機」
[アニメ]コードギアス 反逆のルルーシュ 第21話「学園祭宣言！」


////////////////////////////////////////////////////////////////////
// Ajaxでエロゲーを作るブログ
http://d.hatena.ne.jp/AjaxEroge/

（今週はお休みです）


////////////////////////////////////////////////////////////////////
// 風雅、舞い
http://www.kab-studio.biz/Novel/Fuga/index.html

■　第十五章　濁る澱み、清らかな血溜り　−２７−

　少年は、洞窟を黙々と歩いていた。
　灯りはない。外から届く僅かな光を、感度を上げて視ることはできる。し
かし、少年はそれも必要としていなかった。
　どこへ向かっているのか、少年すらも知らなかった。
　そもそも、家の外、不自然な石が埋まっているのを見つけた時から、突き
動かされるようにしてここまで来ていた。石をずらして見つけた階段を降
り、洞窟へと入り、迷路のような道を迷うことなく進んでいた。
　僕は、ここに来たことなどないのに。
　両親の記憶が何らかの形で刷り込まれているのかもしれない。少年が生活
する上で必要な知識は、培養器で育てられている間に植え付けられたもの
だ。その中に両親の記憶が含まれていたのかもしれない。
　智子先生は何も言っていなかったが、左であれば何も言わずにするに違い
ない。
　だから、少年は自らに従い洞窟を進む。その先に、母親がいると信じて。
「……本当にいるのか？」
　そう、口に出してみる。
　言えば、信じられる気が少しずつしてきた。
　最近、自分の心が揺らいでいると感じる。
　母親の事が一番の理由だろうし、数日間、舞と一緒にいたこともあると思
う。
　自分の命は作られた命。過去の記憶を持たず、未来への成長もなく、ただ
今しかない自分に、何があるというのか。
　でも、母がいる。父もいる。
　舞を見ていると、能力があっても人並みの生き方はできると分かる。
　最近は、リシュネも変わりつつあった。
　ＡＰであっても、ヒトの輪の中にいなくても、それでも、もしかしたら
「普通の生き方」というものが得られるのかもしれない。
　肩肘を張らなくてもいい、その誘惑が、同時に自分を縛り付ける。
　ＡＰである自分に許される生き方なんて、たかが知れている。普通の生活
なんて、できるはずがない。
　本当にそうなのだろうか。
　その答を、母親が教えてくれる、そう感じた。
　そして。
　目の前に、その母親がいた。
                                                              (続く)

////////////////////////////////////////////////////////////////////
// JavaA2Z
http://www.kab-studio.biz/Programing/JavaA2Z/index.html

■追加・更新単語

（今週の追加はありません）


////////////////////////////////////////////////////////////////////
// #pragma twice
http://www.kab-studio.biz/Programing/PragmaTwice/index.html

　Version 18.12
プログラムはクラスの組み合わせ

「前回はエディットボックスとデータのやりとりをするクラスを作ってみま
した」
『確かにあんな感じにクラス作ると便利……なんだけど、結局プログラムが
移動しただけであまり意味なくない？』
「そんなことはないよ、クラスや関数という形でプログラムをまとめれば、
それを再利用しやすいからね」
『どういうこと？』
「たとえば、 Version 18.10 ( No.397 ) で紹介した、 CEditCtrl クラス
に分ける前のプログラムはこうなっていたでしょ」

// = ボタンが押された時のイベントハンドラ。
void CNewCalcDialog::OnEqual()
{
    // 各エディットボックスのウィンドウハンドルを取得します。
    HWND hLeftWnd = GetDlgItem( m_hWnd, IDC_E_LEFT );
    HWND hRightWnd = GetDlgItem( m_hWnd, IDC_E_RIGHT );    ←無駄
    HWND hAnswerWnd = GetDlgItem( m_hWnd, IDC_E_ANSWER );

    // 各エディットボックス用文字列を用意します。
    char pchLeft[256];
    char pchRight[256];                                    ←無駄

    // IDC_E_LEFT と IDC_E_RIGHT の文字列を取得します。
    GetWindowText( hLeftWnd, pchLeft, 255 );
    GetWindowText( hRightWnd, pchRight, 255 );             ←無駄

    // 文字列から数値として取り出すためのストリームを用意します。
    std::istrstream cIStrStreamLeft( pchLeft );
    std::istrstream cIStrStreamRight( pchRight );          ←無駄

    // それぞれ int 型に変換します。
    int iLeft;
    int iRight;                                            ←無駄
    cIStrStreamLeft >> iLeft;
    cIStrStreamRight >> iRight;                            ←無駄
// 以下略

『うぉ、無駄ばっか！』
「この、エディットボックスから入力値を取得する部分って、
IDC_E_LEFT と IDC_E_RIGHT とで同じ処理だから」
『まったく同じことを二度しなきゃいけない、だから無駄なのね』
「これを CEditCtrl クラスの GetInt() メンバ関数にまとめると、呼び出す
側はこんなにシンプルになります」

// = ボタンが押された時のイベントハンドラ。
void CNewCalcDialog::OnEqual()
{
    // 各エディットボックス用の、 CEditCtrl クラスの変数を
    // 用意します。
    CEditCtrl cEditCtrlLeft( m_hWnd, IDC_E_LEFT );
    CEditCtrl cEditCtrlRight( m_hWnd, IDC_E_RIGHT );
    CEditCtrl cEditCtrlAnswer( m_hWnd, IDC_E_ANSWER );

    // 入力値を取り出します。
    int iLeft = cEditCtrlLeft.GetInt();
    int iRight = cEditCtrlRight.GetInt();
// 以下略

『つまりそれって、同じことを何度もしてるところはクラスにしましょう、
ってこと？』
「そういうこと！　同じ機能をクラスにまとめることで、その機能を簡単に
どこでも使うことができます」
『だね、 CEditCtrl クラスなら多分これから何度も何度も使いそう』
「それにプログラムは、〈同じ処理をしている部分〉を何個も作らない方が
いいんです」
『どゆこと？』
「一番の理由は、修正が面倒なこと。もしその処理に問題があったら」
『……全部修正しなきゃいけない』
「もしクラスにしてひとつにしてあったら」
『そこ直せばいいだけ。なるほどねー』
「それに、プログラムが見やすくなる、っていうのもあるかな」
『見やすくなる？』
「同じ処理を何度も何度も書いてあると、プログラムが長くなってごちゃご
ちゃしてわかりにくくなるから」
『それよりもクラスに分けた方が分かりやすい………………ッ』
「はい火美ちゃん」
『分かりやすくねー！！　クラスに分かれてるとファイルも分かれるから分
かりづらいんだけど』
「最初はそうだろうね。クラスの関係が頭の中でイメージできないと、むし
ろ分かりづらいかも」
『うんうん』
「というわけでクラスを図にしてみましょう」
『そういう解決策ですか！』
「今回使用しているクラスは次の3つ」

CDialog
CNewCalcDialog
CEditCtrl

「これを図にすると、こうなります」

┌───────────────────────┐      
│CDialog                                       │
├───────────────────────┤
│ m_pcDialog [static メンバ変数]               │
├───────────────────────┤
│ DispatchDialogProc() [static メンバ関数]     │
│ ~CDialog()                                   │
│ DoModal()                                    │
│ DialogProc() [純粋仮想関数]                  │
└───────────────────────┘
                       △
                       │（継承）
                       │
┌───────────────────────┐      
│CNewCalcDialog                                │
├───────────────────────┤
│ m_hWnd                                       │
├───────────────────────┤
│ DialogProc() [オーバーライド]                │
│ OnOk()                                       │
│ OnEqual()  →→→→→→→→→→→→→→→→→→→→→
└───────────────────────┘     ↓
                                                       ↓
┌───────────────────────┐     ↓（使用）
│CEditCtrl                                     │     ↓
├───────────────────────┤     ↓
│ m_hWnd                                       │     ↓
│ m_bIsError                                   │←←←
├───────────────────────┤
│ CEditCtrl()                                  │
│ GetInt()                                     │
│ SetInt()                                     │
│ IsError()                                    │
└───────────────────────┘

『……こうしてみると、結構すっきりしてるかも』
「機能で分かれているからね。各クラスは、」

CDialog          ：ダイアログの基本機能
CNewCalcDialog   ：NewCalcダイアログのイベント処理
CEditCtrl        ：エディットボックスとのデータのやりとり

「という感じに処理を分けてあるから」
『だから分かりやすいんだ』
「もしこれが、 Version 18.01 ( No.388 ) の時のままで、処理するイベント
がどんどん増えたとしたら……」
『……どんどん複雑になっちゃうね……』
「それをクラスに分けることでプログラム全体が機能ごとに分かれるから」
『プログラム全体が分かりやすくなる！』
「そういうこと。そこから発展させて、クラスを〈プログラムの部品〉って
考えてみるといいかな」
『プログラムの部品……つまり、クラスを組み合わせてプログラムを作って
いく、ってこと？』
「そう、プログラムの中にある機能をそれぞれクラスの中に入れて、それを
くっつけていくことで大きなプログラムを作っていく、それが理想かな」
『そうすれば部品ごとに分かりやすくなる……』
「それに、プログラムをクラスに分けることで、クラスを交換するだけで簡
単に修正できるようになったりもするんです」
『どういうこと？』
「今回の最初で説明した CEditCtrl クラスを使う前と使った後、を例にし
てみようか。もしここで、エディットボックスを自分で作った特殊なものに
切り替えたとします」
『うんうん』
「特殊なものなので、 API が使えません。そうすると修正箇所は……」
『げ、 GetDlgItem() とか GetWindowText() とか、 SetWindowText() とか
全部変えなきゃいけないってこと？』
「そういうこと。でも、 CEditCtrl クラスを使っている場合、その特殊な
エディットボックスを使うクラスを用意して、 CEditCtrl クラスと同じ
メンバ関数にすれば……」
『それなら簡単だね、クラス変えればいいだけだもん。……そっか、そう
やって機能をクラスに分けておけば、交換するだけで簡単に機能を切り替え
られるんだ』
「これを【疎結合】って言います」
『そけつごう？』
「分かりやすく言うと、深く結びついていないってこと。 CEditCtrl クラス
を使う前は、 CNewCalcDialog クラスの OnEqual() メンバ関数から直接 API 
を使用していました。これはつまり、 API との深く結びついていたというこ
と」
『これは疎結合じゃない、ってことね』
「そう、深く結びついていて疎結合じゃないと、切り替える箇所が増えて大
変になります。でも CEditCtrl クラスを使えば、 API の呼び出しまでに
一度メンバ関数っていうクッションがあるから」
『深く結びつかない、つまり疎結合になるってことね』
「そうすることで、メンバ関数の名前や引数、戻り値を変えずに中だけ変え
てクラスを作ればいいわけです」
『……？　あのさ、もしかしてそれってオーバーライドとかでできるんじゃ
ない？』
「そう！　実はオーバーライドにはそういう機能もあるんです。今回の
CDialog クラスと CNewCalcDialog クラスの関係もそうだしね」
『そういえば継承つかってるね』
「 CDialog クラスの DialogProc() メンバ関数が、メンバ関数名・引数・
戻り値を決めてくれるから、あとは派生クラスで実装して、使ってる部分、
つまり WinMain() 関数の」

    CNewCalcDialog cDialog;  ←←←←←←ここ

「を変えれば」
『それだけで別のダイアログのクラスを使うことができる！』
「そういうこと。こういうポリモーフィズムの機能は、疎結合をするための
ものって言っても過言じゃないかも」
『なるほどねー』
「さて、この章は今回で最後です」
『げ、もう？　今回は早いね……』
「今回のこれまでの話が、この章のまとめになるかな」
『つまり、ダイアログプロシージャに全部書かないで、クラスに分ける、
と』
「それを実現するための方法が、 Version 18.03 ( No.390 ) の static 
メンバ関数を使う方法や、 Version 18.04 ( No.391 ) のウィンドウの 
32 ビット整数値を利用する方法になるわけです」
『そういえばそういうのもあったね』
「元々、ウィンドウプロシージャは普通の関数しかだめ、っていう話だった
からね」
『それが、クラスのメンバ関数にすることができれば、ここまで色々と
できるようになる……プログラムがクラスの集まりになる！』
「そういうこと。ウィンドウプロシージャを普通のメンバ関数にする方法と
クラスを組み合わせてプログラムを作っていく、このふたつをちゃんと
憶えておいてください」

/*
    Preview Next Story!
*/
『次回は最終回！！』
「まずこれまでのまとめをします！」
『8年間ってなげー！！』
「加えてこれからの方針を説明します」
『どう勉強すればいいかってこと？』
「何を勉強すればいいか、ってこと」
『というわけで次回』
＜ Version 18.13 まとめと、これから。 ＞
「つづく！」
『何を、って具体的には？』
「 C++ じゃなく、どの言語を勉強すればいいのかてこと」
『なんですとー！？』


////////////////////////////////////////////////////////////////////
/*                          ご注意！！                            */

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
http://www.kab-studio.biz/nikki2/index.html
・購読登録を解除したいときにはこのページで行なってください。
http://www.mag2.com/m/0000012198.htm
・解除は自分で行なってください。
・バックナンバーはこれらのページにあります。
http://backno.mag2.com/reader/Back?id=0000012198
http://www.kab-studio.biz/Freeware/index.html#MailMagazine


////////////////////////////////////////////////////////////////////
/*
    KAB-studio.h
      Weekly Mail Magazine.
      Written by Kaburaya Seiden.
      http://www.kab-studio.biz/Info/MailMagazine/

    (C)KAB-studio 1999 - 2007 ALL RIGHTS RESERVED.
        http://www.kab-studio.biz/
        info@mail.kab-studio.biz
*/
////////////////////////////////////////////////////////////////////

