1

差出人:http://www.parashift.com/c++-faq-lite/basics-of-inheritance.html#faq-19.9

3つのキー:ROI、ROI、ROI。

構築するすべてのインターフェースには、コストとメリットがあります。構築するすべての再利用可能なコンポーネントには、コストとメリットがあります。すべてのテストケース、すべてのきれいに構造化されたもの、あらゆる種類の投資。その投資にプラスの見返りがない場合は、いかなる時間やお金も投資してはいけません。それがあなたの会社にそれが節約するより多くの費用がかかるならば、それをしないでください!

誰もがこれについて私に同意するわけではありません。彼らには間違っている権利があります。たとえば、現実の世界から十分に離れて住んでいる人々は、すべての投資が良いように振る舞います。結局のところ、彼らは、あなたが十分長く待つならば、それはいつか誰かの時間を節約するかもしれないと推論します。多分。望みでは。

その推論の全行は専門家ではなく、無責任です。あなたには無限の時間がないので、賢く投資してください。確かに、象牙の塔に住んでいる場合は、「スケジュール」や「顧客」と呼ばれる厄介なことを心配する必要はありません。しかし、現実の世界では、あなたはスケジュールの範囲内で仕事をしているので、あなたはあなたが良い見返りを得るところだけにあなたの時間を投資しなければなりません。

元の質問に戻ります。保護されたインターフェイスの構築にいつ時間を費やす必要がありますか?回答:その投資に対して十分な見返りが得られたとき。1時間かかる場合は、1時間以上誰かを節約できることを確認し、節約が「いつか虹の彼方に」ならないようにします。現在のプロジェクト内で1時間節約できるのであれば、それは簡単です。いつか他のプロジェクトを1時間節約できるとしたら、そうしないでください。そしてそれがその中間である場合、あなたの答えはあなたの会社が現在に対して未来をどのようにトレードオフするかによって正確に異なります。

要点は簡単です。スケジュールを損なう可能性のあることをしないでください。(または、そうする場合は、決して私と一緒に作業しないようにしてください。私はあなたの頭を大皿に置きます。)その投資の見返りがあれば、投資は良いことです。素朴で子供っぽくならないでください。成長して、いくつかの投資は、バランスをとって、彼らが返すよりも多くの費用がかかるので、悪いことに気づきます。

さて、これをC++で保護されたインターフェイスに関連付ける方法がわかりませんでした。

このFAQが何について話しているかを示すために、実際のC++の例を教えてください。

4

2 に答える 2

2

まず、プログラミング参照を決定的なものとして扱わないでください。これまで。すべては誰かの意見であり、最終的には自分に最適なことをする必要があります。

つまり、このテキストが基本的に言おうとしているのは、「節約するよりも多くの時間を費やすテクニックを使用しないでください」ということです。彼らが説明している「保護されたインターフェース」の一例は次のとおりです。

class C {
    public:
        int x;
};

さて、Javaでは、すべてのJava EEプログラミングの本は、常に次のようにそのクラスを実装するように指示しています。

class C {
    public:
        int getX() { return x; }
        void setX(int x) { this.x = x; }
    private:
        int x;
};

...これは適切なカプセル化の実装です(専門用語:少し単純化すると、個別のパーツ間の共有を最小限に抑えることを意味します)。コードを使用するクラスは、整数を取得および設定する方法があることを懸念しており、実際にintクラス内に格納されていることを懸念していません。したがって、アクセサメソッドを使用すると、後で基になる実装を変更できるようになります。ネットワークからその変数を読み取れるようにしたいのではないでしょうか。

ただし、これは(文字の観点から)大量の余分なコードと、それを実装するための余分な複雑さでした。物事を適切に行うには、実際にはコストがかかります。コードの正確さという点ではコストではありませんが、直接、他のことをするよりも「より良い」方法で数分を費やしました。また、作成するすべてのものを維持するためにゼロ以外の作業が必要です。どんなに些細なことでも。

ですから、この箇所で言われていることは、私の心の中で良いアドバイスです。何かをするときは、自分が入れたものよりも多くのことを得るようになることを常に再確認してください。プログラマーまたは人間としての実際の有効性を損なう理想に従う。

これは、あらゆるプログラミング言語やあらゆる分野で役立つアドバイスです。

于 2012-02-04T05:54:53.293 に答える
0

上記の引用から、男は衒学的なジャークのように聞こえます:)

彼のFAQの以前のエントリを見ると、彼は実際に次のように言っています。

1)クラスには、2つの異なるクライアントセット用の2つの異なるインターフェイスがあります。

  • 無関係なクラスを提供するパブリックインターフェイスがあります
  • 派生クラスを提供する保護されたインターフェイスがあります

2)クラスごとに2つの異なるインターフェースを作成するという問題に常に取り組む必要がありますか?

3)回答:「いいえ、必ずしもそうではありません」

  • 保護されたgetterメソッドとsetterメソッドを作成し、すべてのデータを「プライベート」にすることは、追加の努力の価値がある場合があります。

  • また、データ自体を「保護」するのに「十分」であると彼は言います。たくさんの余分なコードを書くという余分な作業をすべて行うことなく、結果としてサイズとパフォーマンスのペナルティが発生します。

    私には合理的に聞こえます。あなたがする必要があることをしなさい-しかし、船外に出て、「理論」の名の下にたくさんの不必要なことをしないでください。

彼が言っているのはそれだけです-良い判断を下し、行き過ぎないでください。

あなたはそれと議論することはできません:)

PS:

リンクのFAQの19.5から19.9は、「派生クラス」を扱っています。この議論はいずれも、「継承のために基本クラスをどのように構成する必要があるか」という質問以外には関係ありません。言い換えれば、それは一般的な「クラス」についての議論ではなく、「スーパークラスがサブクラスに物事を最もよく見えるようにする方法」についてのみです。

于 2012-02-04T05:55:29.400 に答える