はじめまして現在シューティングを作成しようかと考えているのですが、
プログラムのデータ構造、つまり構造体をバリバリ使いまくるか
オブジェクト指向で汎用性を高くもたせるか迷ってます
構造体バリバリで書くと後のソースいじるときに大量のソースになり
保守するのが難しくなりやすいのと
オブジェクト指向で書くと汎用性を維持するためのコードで複雑になりやすく
これまた保守が難しくなりやすいかと考えています
どちらの手法で組んでいくか、また、別の手法があるかアドバイスいただけませんか?
データ構造で決めかねてます
Re:データ構造で決めかねてます
私の場合、オブジェクト指向(C++)で書いていますが、
依存性の高い方法で書いています。
オブジェクト指向だからといって汎用性が必要というわけではないはず。
(作ったゲームシステム部分を他のゲームなどに流用するなら別ですが)
構造体バリバリでもオブジェクト指向でも、一番大事なのは命名規則です。
大雑把に変数名をつけるとなおさら管理が大変になります。
特に中規模以上のゲームにおいて重要で、
あれやこれやと変更ばかりしていると、
頭の中がこんがらがって、
「そぉい!」
と投げ出してしまいますのでご注意を。
どの言語にしても、曖昧な構想のままでプログラムを組むのはオススメしません。
何が言いたいのかというと、
「こういう構造だからこういう風にプログラムを組む」
と、自分に対してプログラム企画書を作ってみると良いかもしれませんよ、
ということです。
依存性の高い方法で書いています。
オブジェクト指向だからといって汎用性が必要というわけではないはず。
(作ったゲームシステム部分を他のゲームなどに流用するなら別ですが)
構造体バリバリでもオブジェクト指向でも、一番大事なのは命名規則です。
大雑把に変数名をつけるとなおさら管理が大変になります。
特に中規模以上のゲームにおいて重要で、
あれやこれやと変更ばかりしていると、
頭の中がこんがらがって、
「そぉい!」
と投げ出してしまいますのでご注意を。
どの言語にしても、曖昧な構想のままでプログラムを組むのはオススメしません。
何が言いたいのかというと、
「こういう構造だからこういう風にプログラムを組む」
と、自分に対してプログラム企画書を作ってみると良いかもしれませんよ、
ということです。
Re:データ構造で決めかねてます
dicさんの意図を正しく読みとれているか自信はないのですが、
まずどちらでやっても、ゲームの規模に応じてソースコード量は増えます。
既存のライブラリやツールを使うことで多少は減らせるかもしれませんが
基本的にはこれは避けられません。
その上で、ゲームの規模以上に保守が困難になるほどコード量が多くなったり
複雑になるので有れば、どこかに無駄があるか、設計に問題があるのだと思います。
(他にも多数のソースの保守に慣れていない、製作の進め方に問題がある等の可能性もありますが・・・)
特に汎用性については、こだわりすぎるとそんな汎用性は実は必要はなかった、
なんてことも起こりうります。
なので、個人的にはオブジェクト指向的な方がいいと思いますど、
無理してまでやる必要はないですし、どっちでやっても結局保守が難しいと
思うので有れば、どっちでもいいような。
ちなみにそれぞれのケースで書いた場合、設計的にはどんな感じに
しようとしているのでしょうか?
まずどちらでやっても、ゲームの規模に応じてソースコード量は増えます。
既存のライブラリやツールを使うことで多少は減らせるかもしれませんが
基本的にはこれは避けられません。
その上で、ゲームの規模以上に保守が困難になるほどコード量が多くなったり
複雑になるので有れば、どこかに無駄があるか、設計に問題があるのだと思います。
(他にも多数のソースの保守に慣れていない、製作の進め方に問題がある等の可能性もありますが・・・)
特に汎用性については、こだわりすぎるとそんな汎用性は実は必要はなかった、
なんてことも起こりうります。
なので、個人的にはオブジェクト指向的な方がいいと思いますど、
無理してまでやる必要はないですし、どっちでやっても結局保守が難しいと
思うので有れば、どっちでもいいような。
ちなみにそれぞれのケースで書いた場合、設計的にはどんな感じに
しようとしているのでしょうか?
Re:データ構造で決めかねてます
>御津凪さん
何個か作ったのですが、やはり「そぉい」と投げ出しました
やはり命名規則が必要なんですね
ありがとうございます
>Justyさん
構造体で書くと
どっちでもいいので、どっちにしようかなぁ・・・と
何個か作ったのですが、やはり「そぉい」と投げ出しました
やはり命名規則が必要なんですね
ありがとうございます
>Justyさん
構造体で書くと
typedef struct { void (*function); // 動作用関数ポインタ double x, y; // 座標 }t_Bullet; オブジェクト指向で書くと class CBase { double x, y; public: virtual void Function(); // 動作関数の実装はサブクラスにまかせる }; class CBullet : public CBase { public: void Function(); };のような感じですね
どっちでもいいので、どっちにしようかなぁ・・・と
Re:データ構造で決めかねてます
汎用性という意味では、単にオブジェクト指向だけでなく、ジェネリックプログラミングも取り入れたほうがよいとは思いますが...
ソフトウェアを完成させることを最優先するのであれば、現在もっとも得意な手法を採用する方が得策です。
「生兵法は怪我のもの」というように、なまかじりの知識でだましだましやると、かえって効率が落ちます。
まあ、一般的なデータ構造であれば、標準C++ライブラリのコンテナなどを駆使した方が便利なことは確かです。
ソフトウェアを完成させることを最優先するのであれば、現在もっとも得意な手法を採用する方が得策です。
「生兵法は怪我のもの」というように、なまかじりの知識でだましだましやると、かえって効率が落ちます。
まあ、一般的なデータ構造であれば、標準C++ライブラリのコンテナなどを駆使した方が便利なことは確かです。
Re:データ構造で決めかねてます
> オブジェクト指向で書くと
この程度の違いであれば、シンタックスが違っているだけで、本質的な差はありません。
それであれば、より楽に実装できる後者を採用する方が得策です。
この程度の違いであれば、シンタックスが違っているだけで、本質的な差はありません。
それであれば、より楽に実装できる後者を採用する方が得策です。
Re:データ構造で決めかねてます
>どっちでもいいので、どっちにしようかなぁ・・・と
なるほど。
うーん、たかぎさんも仰っていますが、あんまり変わらないですね。
どちらでやっても、片方で起こる問題はもう片方でも起きる可能性は高そうです。
となると、どちらで書くのに慣れているか、で決めてしまってもいいかと思います。
慣れているならオブジェクト指向版で、そうでなければ構造体版で。