ゲームにおけるデータ構造・クラス設計・パターン2
■ このスレッドは過去ログ倉庫に格納されています
0001名前は開発中のものです。
2008/05/23(金) 21:10:59ID:8M1gqhPXどのようにクラス設計をすればよいか、
継承・委譲関係はどのようにすればよいか、
使えそうなパターンは何かなど語るのもよし。
自作ゲームの内容とクラス図を書いて
改善案を聞くもよし。
設計に関して困ったことを質問するもよし。
関数の具体的な実装内容やゲーム内容に関しては他スレに譲る。
大いに語れ。
前スレ
http://pc11.2ch.net/test/read.cgi/gamedev/1155209226/
テンプレ追加事項あったらよろすく
0277名前は開発中のものです。
2008/08/01(金) 00:01:16ID:yD3o9/Ufprivateにしたメンバをもつクラスを保持しているクラスから、そのprivateメンバにアクセスしたいときに
get()で呼び出すのが面倒なんだが・・・・publicならそのまま呼び出せるし
0278名前は開発中のものです。
2008/08/01(金) 00:11:49ID:yp70Uz6tクラス使って日の浅い俺はset()、get()作りまくり。確かにメンドイ。
たぶん何か間違っている。
0279名前は開発中のものです。
2008/08/01(金) 00:14:41ID:GzWnlC6Z俺も同じようなこと悩んでて、気がついたら両方混在してた。
「これはクラスじゃない、構造体なんだ!」
って言い聞かせながらところどころpublicにしてたりw
0280名前は開発中のものです。
2008/08/01(金) 00:22:47ID:z2aBgJTr全部にgetter/setter作る意義って、メンバごとに独自処理必要な場合だろ
そういうの不要ならpublicなり言語の提供するアクセサメソッド簡略化機能とうかで構わんて
0281名前は開発中のものです。
2008/08/01(金) 00:28:14ID:4UGZmRTZコード書くのがマンドイだけなんじゃ?
まっしなIDEやプロパティのある言語つかうとかかな。
0282名前は開発中のものです。
2008/08/01(金) 00:32:32ID:GzWnlC6Z例えば、「すばやさ」と「回避率」と「盾の大きさ」というメンバ変数があったとする。
仕様変更により、これら三つを「守備力」に統合しようとしたとき、
各メンバ変数へのアクセスが全てアクセサメソッド経由なら、
そのクラスの変更だけで終わってしまう(ごまかせる)というメリットがあるよ。
0283名前は開発中のものです。
2008/08/01(金) 00:36:38ID:z2aBgJTrすばやさにアクセスしても盾の大きさにアクセスしても「守備力」が変わるって設計で良いなら構わんが……
守備力を出すクラスなりが仲介して、他のパラメータを元から束ねてた場合の話って事かな。
ちょっとエスパー疲れるぞ?
0284名前は開発中のものです。
2008/08/01(金) 00:47:59ID:GzWnlC6Zまあ、そういうこともあるさ(汗)
ここはお茶を濁しながら、オブジェクト間の結合を弱めましょうとか何とか言って、逃げようかな。
あと、全部アクセサメソッドつけたくなる理由は、Java beansに対応させるってのもあるな。
シリアライズしてXMLでデータを吐けるとか特典があったはず(要らない特典かも)。
0285名前は開発中のものです。
2008/08/01(金) 00:54:19ID:b/gVwGdZpublicにした方が使う側は書きやすくでいいんじゃないの?と思うわけ。
ああ、でもsetterに値のチェックとか入れれるのか・・・・
0286名前は開発中のものです。
2008/08/01(金) 01:01:50ID:b/gVwGdZ取得側で配列格納用の変数も用意しないと取得した配列の要素にアクセスできないし、
非常に手間。
0287名前は開発中のものです。
2008/08/01(金) 01:02:58ID:tFL87oCT気が向いたらprivateにして、
それまで直接アクセスしたるところを、
大河の流れのように涙を流しながら直せば無問題。
0288名前は開発中のものです。
2008/08/01(金) 01:07:26ID:b/gVwGdZなるほど。あまりスッキリしないやり方ですが、しょうがないですかね。
いちいちget()で呼んで、呼び側の変数のセットして使うのって、スループット高そうなのもイヤなんですよね。
0289名前は開発中のものです。
2008/08/01(金) 01:09:03ID:b/gVwGdZ0290名前は開発中のものです。
2008/08/01(金) 01:19:38ID:ua9U6ROuメソッドが多くて中で使いまくるならclassで隠蔽。メソッド内でもget、set呼ぶ。
データの集合でしかなくメソッドが簡単な処理しかないならstructでpublic化かな。
コンストラクタ、コピーコンストラクタ、代入、比較演算あたりまでならstructで。
0291名前は開発中のものです。
2008/08/01(金) 01:32:56ID:b/gVwGdZこういうのって、センスが必要ですね・・・・。
ちょっと気になった事があるんですが、
自分のクラスのpublic関数が、内部で自分のクラスのprivateなメンバを使う場合、
わざわざgetterで呼び出して使う必要はないですよね?
class Foo{
private int a;
public int get(){ return a;}
public int calc(){
return get() * 2;
}
このようなcalc()の書き方に利点はあるのでしょうか?
0292名前は開発中のものです。
2008/08/01(金) 02:26:05ID:ua9U6ROu内部だけで使うprivateメンバ変数と意識して区別できるとか
関数内のローカル変数と名前が被ってもメンバ変数を指してるのが一目瞭然とか。
命名規則で見分けられるようにするのが良いんだろうけどなるべくそうしてる。
0293名前は開発中のものです。
2008/08/01(金) 03:52:45ID:eorE7C0S0294名前は開発中のものです。
2008/08/01(金) 04:12:11ID:gQhqelIhまず public なインターフェースが決まって、その後で必要なメンバ変数を private で考えるのが筋だろ。
0295名前は開発中のものです。
2008/08/01(金) 18:37:49ID:YDkT93Ih今まで作ってきたゲームの焼き直しなら、現実的なやり方だね。うん。
0296名前は開発中のものです。
2008/08/01(金) 19:02:25ID:m4Vy5Xwk個人製作なら気に入らなければ壊して作りなおせるからそれでもいいけど
それにこだわって完成させられない場合が多い気がする
0297名前は開発中のものです。
2008/08/01(金) 20:43:12ID:mQpnHwPhプライベートメンバ変数にはアクセッサを用意すべき。
単なるクラスだけでプログラムするんだったら、位置とか角度とか見たいなアクセス頻度の高い
メンバはパブリックのほうが良いかと思う。
0298名前は開発中のものです。
2008/08/02(土) 00:14:18ID:n2w2ONnP0299名前は開発中のものです。
2008/08/02(土) 00:25:25ID:MidBaG0Q0300名前は開発中のものです。
2008/08/02(土) 06:50:04ID:xZ8r6Jdxプロパティが欲しいと。
0301名前は開発中のものです。
2008/08/02(土) 11:52:40ID:eytLWJfu■ このスレッドは過去ログ倉庫に格納されています