コレクションのカプセル化
≪第17回・第19回≫やる夫。オマエが以前デザインしていた マジックコレクションと言うクラスがあるだろう。 / ̄ ̄\ / _ノ \ | ( ●)(●) . | (__人__) | ` ⌒´ノ . | } . ヽ } ヽ ノ / く | \ | |ヽ、二⌒) あるお。魔法を配列で管理しているクラスデザインだお。 魔法をアビリティクラスで表現したやつだお。 ____ /_ノ ヽ_\ /( ●) ( ●)\ / ::::::⌒(__人__)⌒:::::\ |  ̄ | \ /
やる夫は以前ニコニコクロニクルの魔法管理クラスを実装していました。
魔法クラスはAbilityItemという汎用データストアクラスを利用して表現し、魔法として実装上のラベルをつけて扱っています。
魔法クラスはAbilityItemという汎用データストアクラスを利用して表現し、魔法として実装上のラベルをつけて扱っています。
public class AbilityItem {
String name; // アビリティ名
String description; // 説明
double effectiveValue; // アビリティ効果値
public AbilityItem( String name, String description, double effectiveValue ){
this.name = name;
this.description = description;
this.effectiveValue = effectiveValue;
}
// プロパティアクセサメソッド・・・
}
この汎用アビリティアイテムを魔法1つ1つとして表現したお。
____
/⌒ ⌒\
/( ―) (―)\
/::::::⌒(__人__)⌒::::: \
| |
\ /
出来上がった魔法群をマジックコレクションクラスにロードして、魔法を一元管理するという手法をとっています。
public class MagicCollection implements Collection {
static final int MAX_ITEMS = 6;
int numberOfItems = 0;
AbilityItem[] abilityItems;
// 配列でアビリティを扱う。
public AbilityItem[] getAbiiltyItems(){
return abilityItems;
}
}
このソースはアビリティアイテムを扱う
マジックコレクションクラスだお。
魔法は全部で6種類あったから配列の最大値を6として
スタティックに切ったお。
____
/⌒ ⌒\
/( >) (<)\
/::::::⌒(__人__)⌒::::: \
| /| | | | | |
\ (、`ー―'´, /
ああ。わかっている。ニコニコクロニクルプロジェクトに
入りたての頃に作ったクラスだな。
で、最近オマエが作った潜在能力クラスPotentialCollectionだが、
/ ̄ ̄\
/ _ノ \
| ( ●)(●)
. | (__人__)
| ` ⌒´ノ
. | }
. ヽ }
ヽ ノ
/ く
| \
| |ヽ、二⌒)
潜在能力クラスPotentialCollectionは
魔法を使えないキャラクターの魔法代替能力だお。
相変わらず企画はわけの分からん仕様を打ち出してくるお。
ポテンシャルに「邪鬼眼」ていったい何がしたいんだお。
/ ̄ ̄ ̄\
/ \
/ ─ ─ ヽ
| (●) (●) |
\ (__人__) __,/
/_______\
魔法が使えないキャラクターの魔法代替能力だと言うことは
一応わかってんじゃねーか。
だから、同じようにこのPotentialCollectionとやらを
使えるかと思ったんだが、
/ ̄ ̄\
/ _ノ \
| ( ●)(●)l
. | (__人__) |
| ` ⌒´ |
. | }
. ヽ }
ヽ ノ
/ く なんだこれは。こっちは
/ ヽ ArrayListで返してくんじゃねーか。
public class PotentialCollection implements Collection {
ArrayList abilityItems;
// 配列でアビリティを扱う。
public ArrayList getAbiiltyItems(){
return abilityItems;
}
}
そうだお。ArrayListは便利だお。
こっちを使うときはキャストして使えお。
____
/⌒ ⌒\
/(● ) (● )\
/:::⌒(__人__)⌒:::: \
| mj |┬-| |
\ 〈__ノ`ー'´ /
/ノ ノ ‐‐‐‐一´\
やる夫。仕様変更のメールは見たか?
潜在能力は魔法の代替ではなくなった。
つまり、魔法も使えて潜在能力も持てる
キャラクターを実現することになる。
/ ̄ ̄\
/ _ノ \
| ( ●)(●)l
. | (__人__) |
| ` ⌒´ |
. | }
. ヽ }
ヽ ノ
/ く
/ ヽ
そんなメール
____
/::::::─三三─\
/:::::::: ( ○)三(○)\
|::::::::::::::::::::(__人__):::: | _____
\::::::::: |r┬-| ,/ .| |
ノ:::::::: `ー'´ \ | |
全然知らないお
____
/:∪::─ニ三─ヾ
/:::::::: ( ○)三(○)\
(:::::∪:::::::::: (__人__)::::: i| ____
\::::::::: |r┬-| ::::ノ | |
リ:::::::: `ー'´ ::\ | |
邪鬼眼も、ベギラモも使えるキャラクターが出てくる様な
仕様じゃゲームバランスが崩れて
発売3日でワゴンに放り込まれるようになるお。。。。
______
/:∪::─ニjjニ─ヾ
/:::li|.:( ○)三 (○)\
(:::||!.:∪::::: (__人__)):::: i| ____
)::::::::::::: |r┬-| li::::/ | |
/::::::::::::::: `ー ' ::::::ヽ | |
/ ̄ ̄\ 2週間前には故障表と一緒に
/ \ 仕様変更メールが行ってるだろ
|:::::: |
. |::::::::::: |
|:::::::::::::: | ....,:::´, .
. |:::::::::::::: } ....:::,, ..
. ヽ:::::::::::::: } ,):::::::ノ .
ヽ:::::::::: ノ (:::::ソ: .
/:::::::::::: く ,ふ´..
-―――――|:::::::::::::::: \ -―,――ノ::ノ――
|:::::::::::::::|ヽ、二⌒)━~~'´
キャラクタークラスで保持している
魔法コレクションと、潜在能力コレクションをリスト表示する
メソッドがあるだろう。listAbilityCollection()だな。
魔法とか潜在能力以外にも
アビリティコレクションがさらに追加されたらどうすんだ?
/ ̄ ̄\
/ _ノ \
| ( ●)(●)l
. | (__人__) |
| ` ⌒´ |
. | }
. ヽ }
ヽ ノ
/ く
/ ヽ
public void listAbilityCollection(){
// 潜在能力コレクションの取得・・・
// 魔法コレクションの取得・・・
ArrayList ptntItems = potentialCollection.getAbiiltyItems();
AbilityItem[] mgcItems = magicCollection.getAbiiltyItems();
// 潜在能力コレクションはArrayListを返すのでキャストしてリスト
for( int idx = 0; idx < ptntItems.size(); idx++ ){
AbilityItem abiItem = (AbilityItem)ptntItems.get( idx );
System.out.println( abiItem.getName() );
// ・・・
}
// 魔法コレクションは配列をそのまま返すので直接参照してリスト
for( int idx = 0; idx < mgcItems.length; idx++ ){
AbilityItem abiItem = mgcItems[ idx ];
System.out.println( abiItem.getName() );
// ・・・
}
____
/ \ ・・・・ど、ど、
/ ─ ─\
/ (●) (●) \
| (__人__) | ________
\ ` ⌒´ ,/ .| | |
ノ \ | | |
/´ | | |
| l | | |
ヽ -一ー_~、⌒)^),-、 | |_________|
ヽ ____,ノγ⌒ヽ)ニニ- ̄ | | |
__ ____
//  ̄ \\ ど、どう、どし、ど
//--.-- -─\\ どう、どうし、どしうよう
// (● ●) ((●(●) \
.| |.| ( . ((_人_人__) | _ _== =
\\ ⌒ ` /,/ | |  ̄ ̄ ̄  ̄| ||
ノ \\| | | | ||
/´ | | | |
| l | | |||
ヽ -一ー_~、⌒)^),-、 | |_________| |
ヽ ____,ノγ⌒ヽ)ニニ- ̄ | | | =



