« 2008年03月02日 - 2008年03月08日 | メイン | 2008年03月16日 - 2008年03月22日 »



2008年03月09日 - 2008年03月15日 アーカイブ

2008年03月09日

餃子の皮から水餃子作ったよ。

DSCF2272.jpg 今日は家内が表参道のほうへ習い事?に行ったようなので、昼食を作りました。先週のモーニングの「誰も寝てはならぬ」でお焼きを作っていたのがおいしそうだったので、その生地(皮)を作っていたのですが、どう見ても餃子の皮なので計画変更して水餃子を作りました。
中国産の冷凍餃子が騒がれていましたので、皮から作れば安心♪なんて思っていましたが、ふっつーに中華スープを投入していました。全然ダメじゃんか。あははは
というわけで、皮のレシピです。

<皮の作り方>
・小麦粉100g
・水40cc
・塩少々
・サラダオイル1さじ

これらをひたすら混ぜて冷蔵庫で30分くらい寝かす。あとはちぎって伸ばす。水餃子なので、皮が多少分厚くなっても大丈夫です。
DSCF2273.jpg 餃子の具はそれぞれご家庭によって違うと思いますが、今日作った餃子の具は、

・にんにく
・にんじん
・しょうが
・ニラ
・ネギ
・ひき肉
・たまご
・シメジ

です。珍しいものは入っていませんが、白菜か何か入れればよかったですね。あとはスープですが、火をつける前に、たまねぎスライスを投入。沸騰したら豆腐を無造作に切って投入。中華スープを入れて(こわいよー)、餃子を入れてしばらく置いておきます。後は、酒と、みりん、薄口しょうゆ、ごま油で味を調えて出来上がり。水菜は彩りで入れます。
DSCF2275.jpg こうやって切り口を見せるとうまそうに見えますね。うまかったですよ。写真とった後はご飯をスープにいれてオジヤにして食べました。(台無しです)

[ 最近のエントリーとその関連エントリー ]


[ スポンサードリンク ]

2008年03月12日

やる夫がデザインパターンをやるようです 第5回

≪第4回第6回≫

前回のやる夫で学ぶデザインパターンでは、勇者が冒険の中で獲得する、「武器」による攻撃力の強化だけでなく、アクセサリの追加装備により攻撃力のさらなる強化を実現するための追加仕様を、やる夫が検討しました。

検討その1.継承を爆発させた。
検討その2.必要最低限な「武器」クラスを用意して、「強化アイテム」をスーパークラスのメンバ変数で表現。

やる夫が見直した検討その2.のデザインは、武器クラスの拡張には柔軟に対応できますが、強化アイテムの追加や削除、変更が入った場合に柔軟に対応することができません。
class Weapon {
    String description;
    
    // 強化アイテムのブール値
    boolean isBracelet;
    boolean isMantle;
    boolean isHairOrnament;
    boolean isRing;

    getDescription();
    getPower();

    hasBracelet();
    setBracelet();

    hasMantle();
    setMantle();

    hasHairOrnament();
    setHairOrnament();

    hasRing();
    setRing();
}
前回、アーキテクトが気にしていたのは、「同じアイテムを2つ持った場合、その分の武器の強化をどのように実現するか?」ですが、上記のデザインを見ると、強化アイテム1つ1つをメンバに割り当てているのでアイテムが増えたり、強化値が変更される度にこのクラスを検討しなおす必要があります。
・・・「同じ強化アイテムを2つ以上重ねがけできる」仕様はどうすんだ?
          ____
       / \  /\  キリッ
.     / (ー)  (ー)\
    /   ⌒(__人__)⌒ \
    |      |r┬-|    |
     \     `ー'´   /
    ノ            \
  /´               ヽ
 |    l              \
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))

          ____
        /_ノ  ヽ、_\ だっておwwwww
 ミ ミ ミ  o゚((●)) ((●))゚o      ミ ミ ミ
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\   /⌒)⌒)⌒)
| / / /     |r┬-|    | (⌒)/ / / //
| :::::::::::(⌒)    | |  |   /  ゝ  :::::::::::/
|     ノ     | |  |   \  /  )  /
ヽ    /     `ー'´      ヽ /    /
 |    |   l||l 从人 l||l      l||l 从人 l||l
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))


     |  |   |   |
     _||_||__||  ||
    (__/   `ー――
   (___/  r
    (_レノ)\   ___
    (__/__/

       ____
     /⌒  ⌒\ ホジホジ
   /( ○)  (○)\
  /::::::⌒(__人__)⌒::::: \  そんな仕様にするから
  |    mj |ー'´      | ゲームバランスが取れなくなっtt
  \  〈__ノ       /
    ノ  ノ 
仕様そのものに納得できずに実装するプログラマは少なくないかと思いますが、やる夫も「あー。今vip保守してっから仕様書そこに置いとけお」なんていえる立場ではありません。実装という観点でも問題があるということをまず理解する必要があります。

<やる夫>
    _/⌒  ⌒\_
  /:●))(__人__)((● \ せめてヒントがほしいお
  |     |r┬-|     |
  \      `ー'┃     / 




<アーキテクト>
   / ̄ ̄\
 /   _ノ  \
 |    ( ●)(●)
. |     (__人__) ちっ
  |     ` ⌒´ノ 最初から素直にそう言えや
.  |         }
.  ヽ        }
   ヽ     ノ        \
   /    く  \        \
   |     \   \         \
    |    |ヽ、二⌒)、          \ 




     ____
    / ⌒  ⌒  \ (アーキテクトさんがいないと何もできないお!)
  ./( ―) ( ●)  \ ウチのアーキは意外と扱いやすいお。。
  /::⌒(_人_)⌒:::::  |
  |    ー       .|
  \          / 




   / ̄ ̄\
 /   _ノ  \
 |    ( ○)(○)
. |     (__人__)ほう。
  |     ` ⌒´ノ
.  |         }
.  ヽ        }  
   ヽ       ____
   /       / ⌒  ⌒  \ フヒ・・・?
   | .   ./( ○) ( ○)  \
.   |     /::⌒(_人_)⌒:::::  |
.        |    ー       .|
        \          / 





とりあえずてめぇの腹は把握した。
が、仕事は仕事だ。

以前、ストラテジーパターンで学んだことは何だ?
変化する処理をカプセル化するということだな。
今回てめぇが学ぶべきことは「拡張」の扱い方だ。
武器クラスをアイテムクラスで拡張するという風に考えてみろ。
それも既存のコードを修正せずに振舞いを拡張するんだ。

つまり、ニコニコクロニクル1.0で作成した武器クラスに修正を入れずにアイテムクラスで拡張する方法を考えてみろ。すると、「そうせざるを得ない」あることがわかる。
ヒントはjava.ioにある。
        / ̄ ̄\
      /       \
      |::::::        | 
     . |:::::::::::     | 
       |::::::::::::::    |          ....,:::´, .
     .  |::::::::::::::    }          ....:::,,  ..
     .  ヽ::::::::::::::    }         ,):::::::ノ .
        ヽ::::::::::  ノ        (:::::ソ: .
        /:::::::::::: く         ,ふ´..
-―――――|:::::::::::::::: \ -―,――ノ::ノ――
         |:::::::::::::::|ヽ、二⌒)━~~'´ 





    _/⌒  ⌒\_
  /:○))(__人__)((○ \ わかりましたお。
  |     |r┬-|     |
  \      `ー'┃     / 
というわけで、アーキテクトが言うには、やる夫が今回学ぶべきことは「拡張」のようでした。

「こういうことだから、こんなデザインパターンになったよー。」という話の進め方をしたいのですが、なかなか上手くいきませんね。ワタシも正しく理解しているわけではないところがたくさんありますが、次回第6回でデザインパターンに収束してみたいと思います。

≪第4回第6回≫


[ 最近のエントリーとその関連エントリー ]


2008年03月10日

やる夫がデザインパターンをやるようです 第4回

≪ 第3回第5回 ≫

前回の失敗でスパヒロ大戦のプロジェクトからはずされたやる夫は、現在、携帯向けアプリケーションの「ニコニコクロニクル2.0(ロールプレイングゲーム)」の開発に携わっています。

yaruoDecoClsPic.PNG やる夫の担当は、武器アイテムの管理です。ニコニコクロニクル1.0のリリース時には、今ほどリッチなクライアントではなく、武器も非常に限られていて右記のようなクラス図で実現されていました。


しかし、昨今の携帯の高機能化により、ニコニコクロニクル2.0ではこれまでの単純な武器アイテムの管理に加えて、「指輪」や「腕輪」、「髪飾り」などを勇者が持つことにより、武器の破壊力を強化できるシステムになりました。(ワタシはゲーム開発をお仕事でやっておりません。携帯が高機能だから云々は話を進めるためにとってつけたものです。)
やる夫はこれらの強化アイテムも武器管理デザインとしてシステムに組み込む必要が出てきました。


yaruoDeco2ClsPic.PNG やる夫が作成したクラス図は右記のようなものです。





<やる夫>
           ___
     ____,./      \
    ノ   /         \   継承が大爆発しちゃったお
  /   /            \ 
 |     |::..           ...::::| 
 ヽ    `一ー――――-、;;;;::/`一ー―-、
  ヽ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))




       ____
     /      \
   /  _ノ  ヽ、_  \きっとアーキテクトにフルボッコにされるお
  /  o゚⌒   ⌒゚o  \  
  |     (__人__)    |
  \     ` ⌒´     /




       ____
     /⌒  ⌒\
   /( ●)  (●)\
  /::::::⌒(__人__)⌒::::: \  でも動けば文句ないんだお!
  |     |r┬-|     |  きっとちゃんと動くお!
  \      `ー'´     /  頑張ったことは認めてくれるはずだお!




     ____
    / ⌒  ⌒  \
  ./( ―) ( ●)  \
  /::⌒(_人_)⌒:::::  | チラッ
  |    ー       .|
  \          /




<アーキテクト>
        / ̄ ̄\
      /       \
      |::::::        |      それ(ry
     . |:::::::::::     |     常(ry
       |::::::::::::::    |          ....,:::´, .
     .  |::::::::::::::    }          ....:::,,  ..
     .  ヽ::::::::::::::    }         ,):::::::ノ .
        ヽ::::::::::  ノ        (:::::ソ: .
        /:::::::::::: く         ,ふ´..
-―――――|:::::::::::::::: \ -―,――ノ::ノ――
         |:::::::::::::::|ヽ、二⌒)━~~'´ 




     ____
    / ⌒  ⌒  \
  ./( ―) ( ○)  \
  /::⌒(_人_)⌒:::::  | ・・・聞き取れないお。。。
  |    ー       .|
  \          / 
やる夫が作成したサブクラス群は、武器×アイテムのマトリクスを総当りでクラスに書き出したものです。この場合、強化アイテムがひとつ増えただけで、武器数分のクラスを改めて作る必要が出てきてしまいます。また、既存の強化アイテムの強化値が変更された場合、同様に武器数分のクラスを見て回る必要があります。

これから強化アイテムをいくつか追加する予定があるが
その分のクラスを作りてぇなら作れ。
さもなくば、今のクラス群をとっととCVSからリムーブしてデザインしなおせ
        / ̄ ̄\
      /       \
      |::::::        | 
     . |:::::::::::     | 
       |::::::::::::::    |          ....,:::´, .
     .  |::::::::::::::    }          ....:::,,  ..
     .  ヽ::::::::::::::    }         ,):::::::ノ .
        ヽ::::::::::  ノ        (:::::ソ: .
        /:::::::::::: く         ,ふ´..
-―――――|:::::::::::::::: \ -―,――ノ::ノ――
         |:::::::::::::::|ヽ、二⌒)━~~'´ 
     ____
   /      \
  /  ─    ─\  わかりました。
/    (●)  (●) \ さらにクラスをつくtt
|       (__人__)    |
/     ∩ノ ⊃  /
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ / 

      / ̄ ̄\ 
    /ノ( _ノ  \  いいからCVSからソース消しとけや
    | ⌒(( ●)(●)
    .|     (__人__) /⌒l 
     |     ` ⌒´ノ |`'''| 
    / ⌒ヽ     }  |  |               
   /  へ  \   }__/ /             / ̄ ̄\ 
 / / |      ノ   ノ           / ●)) ((●\’, ・ 
( _ ノ    |      \´       _    (   (_人_)’∴ ),
       |       \_,, -‐ ''"   ̄ ゙̄''―---└'´ ̄`ヽ   て 
       .|                  ______ ノ    ( 
       ヽ           _,, -‐ ''"  ノ       ヽ   r'
         \       , '´        し/..     | J 
          \     (           /      | 
            \    \         し-  '^`-J 
というわけで、やる夫は武器と強化アイテムのデザインをしなおすことになりました。
class Weapon {
	String description;
	
	// 強化アイテムのブール値
	boolean isBracelet;
	boolean isMantle;
	boolean isHairOrnament;
	boolean isRing;

	getDescription();
	getPower();

	hasBracelet();
	setBracelet();

	hasMantle();
	setMantle();

	hasHairOrnament();
	setHairOrnament();

	hasRing();
	setRing();
}
これは、やる夫が作成しなおしたスーパークラスWeaponです。それぞれの強化アイテムのブール値を保持し、スーパークラスのgetPowerメソッドで強化された値を全て計算します。サブクラスとなる武器はgetPowerをオーバーライドし、その武器の強化値を独自に計算し、後にスーパークラスのgetPowerを呼び出すという寸法です。
<やる夫>
これで、ニコニコクロニクル1.0から
クラスもそれほど増えずに強化アイテムを含めた管理ができるお
どう考えても天賦の才だお!
         ___
       / ⌒  ⌒\
      / (⌒)  (⌒) \ 
    /   ///(__人__)/// \ 
     |   u.   `Y⌒y'´    |
      \       ゙ー ′  ,/
      /⌒ヽ   ー‐    ィヽ
      / rー'ゝ       〆ヽ
    /,ノヾ ,>      ヾ_ノ,|
    | ヽ〆        |´ | 




<アーキテクト>
・・・「同じ強化アイテムを2つ以上重ねがけできる」仕様はどうすんだ?
        / ̄ ̄\
      /       \
      |::::::        | 
     . |:::::::::::     | 
       |::::::::::::::    |          ....,:::´, .
     .  |::::::::::::::    }          ....:::,,  ..
     .  ヽ::::::::::::::    }         ,):::::::ノ .
        ヽ::::::::::  ノ        (:::::ソ: .
        /:::::::::::: く         ,ふ´..
-―――――|:::::::::::::::: \ -―,――ノ::ノ――
         |:::::::::::::::|ヽ、二⌒)━~~'´ 



<やる夫>
         ___
       / ⌒  ⌒\    メンバを配列に・・・・
      / (○)  (○) \  ・・いや・・・その仕様は拒否するお
    /   ///(__人__)/// \ 
     |   u.   `Y⌒y'´    |
      \       ゙ー ′  ,/
      /⌒ヽ   ー‐    ィヽ
      / rー'ゝ       〆ヽ
    /,ノヾ ,>      ヾ_ノ,|
    | ヽ〆        |´ | 

ワタシも滅茶苦茶な仕様は拒否したいものですが、今回のやる夫のケースはそうは行きません。
ではどのようなデザインであればよかったのでしょうか。第5回に続きます。
やる夫で学ぶデザインパターンを串刺しで見たい場合はタグのほうからどうぞ。(まだ1パターンしか完結してません。フヒヒ)

≪ 第3回第5回 ≫

[ 最近のエントリーとその関連エントリー ]


2008年03月09日

餃子の皮から水餃子作ったよ。

DSCF2272.jpg 今日は家内が表参道のほうへ習い事?に行ったようなので、昼食を作りました。先週のモーニングの「誰も寝てはならぬ」でお焼きを作っていたのがおいしそうだったので、その生地(皮)を作っていたのですが、どう見ても餃子の皮なので計画変更して水餃子を作りました。
中国産の冷凍餃子が騒がれていましたので、皮から作れば安心♪なんて思っていましたが、ふっつーに中華スープを投入していました。全然ダメじゃんか。あははは
というわけで、皮のレシピです。

<皮の作り方>
・小麦粉100g
・水40cc
・塩少々
・サラダオイル1さじ

これらをひたすら混ぜて冷蔵庫で30分くらい寝かす。あとはちぎって伸ばす。水餃子なので、皮が多少分厚くなっても大丈夫です。
DSCF2273.jpg 餃子の具はそれぞれご家庭によって違うと思いますが、今日作った餃子の具は、

・にんにく
・にんじん
・しょうが
・ニラ
・ネギ
・ひき肉
・たまご
・シメジ

です。珍しいものは入っていませんが、白菜か何か入れればよかったですね。あとはスープですが、火をつける前に、たまねぎスライスを投入。沸騰したら豆腐を無造作に切って投入。中華スープを入れて(こわいよー)、餃子を入れてしばらく置いておきます。後は、酒と、みりん、薄口しょうゆ、ごま油で味を調えて出来上がり。水菜は彩りで入れます。
DSCF2275.jpg こうやって切り口を見せるとうまそうに見えますね。うまかったですよ。写真とった後はご飯をスープにいれてオジヤにして食べました。(台無しです)

[ 最近のエントリーとその関連エントリー ]


ツリータイプ・カテゴリー

open all | close all

リファラから検索


サイト内検索