2012-02-15 10 views
3

私はOgre3Dを使用していますので、プロジェクトを実行するためにOgreおよびOISクラスを継承するいくつかのクラスを使用しています。OOPは良いキャッシングを推奨していますか?

私は、あるシングルトンの変数にアクセスして、自分が望むことを他の人に伝える必要が絶え間なくあるので、私はこのゲッター/セッターの膨大な量を持っていますプロジェクト。

私はデータを手の届くところに置いておくことがパフォーマンス上重要であることを知っています。OOPソートでは、必要な変数をクラス内に保持するので、デフォルトでそのようなプラクティスを奨励しますが、これらすべてのコンストラクタでかなりの初期化がありますが、それは哀れです。

私のちょっとばかげたゲームは、それほど多くのリソースを必要とすることはありません。Ogre3DはOOPを使用して効率的に仕事をするので、OOPを使ってゲームをする必要はありません。

私はすべてのデータをパブリックにし、カプセル化について気にしないために、すべてのデータを別の構造体に入れることを考えています。

悪いOOP設計にもかかわらず、パフォーマンスに影響はありますか?

+2

"私は、あるシングルトンの変数にアクセスして、自分が望むことを他の人に伝える必要があるため、問題が発生し始めているので、私はこの膨大なゲッター/セッターをプロジェクト。" **厄介です**少なくともあなたはこれが悪いデザインだと思います。 –

+0

あなたはあなたのすべての状態を1つの巨大なシングルトンで持っているなら、あなたはすでに悪いOOPデザインを持っています... –

+0

OOPが妨害であれば、それを気にする必要はありません。そのようなことを正確に記述し、getter/setterの膨らみを取り除くことができると感じたら、あなたの人生をより楽にして構造体を使用してください。そして、誰もOOPが「正しい」方法であるとは誰も言わなかった;) –

答えて

1

キャッシュを使用してパフォーマンスを向上させたい場合は、OOPはショーストッパーではなく、完璧なプログラミングパラダイムではありません。あなたが言及したように、コンストラクタを単純化するためのセッター。可変状態では、オブジェクトの再利用性、したがってキャッシングがはるかに難しくなります。したがって、(Josh Bloch's Effective Java、項目15を参照)を最小限に抑えてを試みてください。

だからこそ、機能パラダイムが適しています。しかし、あなたは古典的なOOPでそれをかなりうまく採用することができます。現代のOOP言語(Scala、C#、C++ 11など)は実際にはマルチパラダイムであり、簡単な不変性と関数型プログラミングに必要なすべての機能を提供します。

+0

私はすべての私は多くのラムダを作成し、すべてのクラスを忘れる必要がありますか? – jokoon

+0

私はそれが関数型プログラミング - >パフォーマンスのように単純ではないかどうかはわかりません。 –

+0

@Oli:はい、関数型プログラミングとパフォーマンスは比例しません(たとえば、var代入による可変性は非常に速い)。しかし、gokoonは*キャッシング*に興味があり、関数型プログラミングには上記の利点があります。 – DaveFar

0

問題は、OOPよりもシングルトンの使用が多くあります。 OOPはすべてデータ構造のカプセル化に関するものです。実際にデータを保管する方法はあなた次第ですが、重要なことはクラスによって提供されるインターフェースとサービスです。シングルトンは、彼らがOOPであるとふるった貧しい人のグローバル変数です。

シングルシングを落として、OOPをよく書けば、パフォーマンスは再び上昇します。

+2

私は最後の文を除いてすべてに同意します。 OOPとパフォーマンスの間に必ずしも相関関係はありません。 –

+0

私はすべての私のオブジェクトと対話する必要がある場合、それはポイントですか?私はグローバルな名前空間を使い、できる限りカプセル化するべきです。残りの部分については、すべてのコードでオブジェクトを使用する必要がある場合、オブジェクトをオブジェクトに配置することはお勧めできません。 – jokoon

+1

@gokoonデザインが悪いので、あらゆる場所にアクセスする必要がある場合。コードは、ローカライズされた責任しか持たないように編成する必要があります。これは簡単なことではありません。 – bames53

1

コントローラーが必要なように聞こえます(「私は、自分がしたいことをするために、別のシングルトンに変数をアクセスする必要があります」)。通常、イベントは状態に関する情報を必要とするアクションを引き起こします。

システム内のアクター、メッセージ、およびアクションについてもう少し考えてみると、システムのさまざまなアクターを表すクラスにビットごとの情報を配布し始める可能性があります。

一方向はありませんが、OOPを使用すると、モデリングにある程度の労力がかかります。特に国家の考え方と国家を知っている人は、必ずしも1つ(またはそれ以上)の巨大なシングルトンに格納するのに適しているとは限りません。

関連する問題