2017-10-04 6 views
0

これは純粋なC++の技術的な質問ではないかもしれませんが、アドバイスは大歓迎です。C++クラスのデザイン

多くのメンバーでクラスを実装する必要があります(Aとしましょう)。

また、これらのデータには他のクラスのセットでアクセスする必要があり、このアクセスは非常に高速である必要があります(クラスAのメンバーが条件づけをしています)。

最初のアプローチは、プライベートとしてアクセスレベルをプライベートとして設定し、特定の要素をチェックする(多くのメソッド呼び出し)セッター/ゲッターの種類を使用することでした。

他の方法では、すべてのものをAで公開し、次のものは友だちクラスを12個作成します。正直言って、私は上記のどれも好きではありません。システムの残りの部分は、Aクラスのメンバーにはアクセスできず、関心のあるメンバーだけにアクセスすべきである。

多分誰かが同様のものに対処しなければならなかったかもしれませんし、アドバイスはいくつかの良い練習、多分いくつかの適切なデザインパターンかもしれませんか?

+0

何を試しましたか? – Raindrop7

+2

おそらく基本的な問題は「多くのメンバー」です。 :-)問題をいくつかの小さな問題に分けることはできませんか?おそらく、不安の一部は消え去るだろうか?それ以外の場合、インラインゲッターはパブリック変数とのパフォーマンスの違いを与えません。だから心配しないでください。とにかくほとんどの時間を費やす場所は、「ドローイングのもの」です。一方、「数十人の友人」は避けるべきもののようです。 –

+0

@ Raindrop7私はポストに記載されたすべてをテストしました。実際にはそれらのすべてがうまくいっていますが、私の意見では「かなりエレガントではありません」。だから、多分もっと良いものがあるかもしれない。 – Robert

答えて

0

あなたのクラスは、データとフラグのダムコレクションを超えている場合は、適切なアプローチは、あなたが代わりに取得/設定でそれをさらすこと、データクラスでを行っているものは何でも追加することです。

たとえば、 'Polygon'クラスから座標、色、線の太さを引っ張って描画する場合は、描画を行うクラスにメソッドを追加する必要があります。パラメータ)。

+0

ここで問題となるのは、このクラスは単にデータ/フラグのセットではなく、もっと何か(実際はシステムのようなものです)です。だから私はカプセル化が欲しかったのです。また、1つのクラスだけでなく、このシステムのコンポーネントを描画します。しかし、同僚が上に示唆したように、より小さな部品に関するより良いデザインは、このことについてのより良い気持ちについてのトリックを行うべきです。 – Robert

0

2つのオプションのうち、システムのほとんどの部分がこれらのメンバーにアクセスしてはならない場合は、パブリックメンバーが良い考えではないため、ゲッター/セッターの方法が好まれます。
だから、(あなたの質問は、一般的に十分と細部の貪欲であっても)あなたが「制御されていないアクセス」によって心配されている場合は、おそらく解決策は

  • 宣言メンバープライベートベースクラスがある場合は(高々、保護することができそれらにアクセスすることができ、いくつかのサブクラス)
  • 使用ゲッター/セッター
  • 使用友人クラス(または友人方法にみんなで行くことができますメンバーのためのランダムなクラスによってアクセスされない非公開/保護されたメンバーへのアクセス)。

最後に、すべてのサブクラスに共通の有効なメソッドのセットを提供するために、共通の仮想クラスを定義して、できるだけメンバーにアクセスする異なるクラスの量を減らそうとする必要があります。

関連する問題