2017-01-04 4 views
0

は、ここで「コアのJava」から引用した文章です:データカプセル化の原則が破られて以来、Javaの保護フィールドのポイントは何ですか?

は、あなたのクラスは、他のプログラマが使用されていると、あなたが保護されたフィールドでそれを設計しました。不明な場合は、他のプログラマーがクラスのクラスを継承し、保護されたフィールドへのアクセスを開始することがあります。この場合、プログラマを怒らせることなく、クラスの実装を変更することはできません。これはデータのカプセル化を促進するOOPの精神に反します。

この結果、Javaの保護フィールドのポイントは何ですか?

+4

http://softwareengineering.stackexchange.com/questions/162643/why-is-clean-code-suggesting-avoiding-protected-variables –

+0

サードパーティ製の本をあたかも聖書のように扱うべきではありません。 – EJP

答えて

0

スーパークラスとサブクラスが同じ開発者(または同じ組織)によって管理されていない場合は、お勧めできません。しかし、スーパークラスとサブクラスが密接に結合されたコードであれば便利な手法です。たとえば、同じライブラリのコンポーネント。

ビジネス界では、すべての取引は法的な契約によって保護されるべきであり、法的契約の保護なしに取引を行うことは「落胆」していると言えます。当事者が異なる事業体である場合、それは当てはまります。しかし、当事者が事業主体ではなく、同じ家族のメンバーである場合、明らかに同じ原則を適用することはできません。

OOPはコードの組織です。異なる状況では、異なる組織の原則が必要になります。

+0

あなたの言葉は私にとって意味があります。しかし、私は、一連のクラスが同じ人(または同じ組織)によって維持されていても、アクセスの利便性として「保護された」ものを悪用するのは良い習慣ではないかもしれないと思います。保護されたフィールドに直接アクセスするクラスは、スーパークラスの実装と強く結びついているからです。スーパークラスを変更すると、保護されたフィールドを使用していない場合でも、従属クラスを変更せずにかなりの時間を節約できます。 はい、OOPはコードのほうが多く、コード作成者は少なくなっています。 –

0

私は、抽象クラスでより有用であることがわかります。例えば、私は最近、回転フィールド(角度)があったビデオゲームのための抽象クラスを書いた。抽象クラスは、角度の計算方法についてはあまり気にしませんでした。具体的なクラスは、必要に応じてクラスを設定します。抽象クラスはそれを使用し、具象クラスはそれを設定します。

これを達成する他の方法があります。もう1つのバリエーションは、具象クラスにgetAngleというメソッドを実装させることです。これは抽象クラスがローテーションの値を必要とするときに呼び出すが、パフォーマンス目的のためにこのルートには行っていない。

関連する問題