ProtectedData
http://martinfowler.com/bliki/ProtectedData.html
優れたOO設計者はクラス内のデータをprotectedにする?
すべてのデータはprivateにするべきだというOO設計者もいれば、いくつかはpublicにするというOO設計者もいます。
(この底の見えないプールに飛び込む前に、 protected アクセス修飾子の意味が言語によって 微妙に変わるということを指摘しておきましょう。 これは重要です。)
このトピックが難しいのは、チーム内開発から見た場合と チーム間開発から見た場合があるからだと思います。 この視点こそが最大の理由です。
サブシステムを作る際に、振る舞いを継承した実装を行うとします。 そのとき、スーパークラスをディープにアクセスできるサブクラスを作れると非常にラクです。 いずれにせよ、すべて自分のコードなのですから。 (多態性を提供するためにサブクラスを使っているのであって、 モジュールを提供しているのではありませんので注意)
一方、フレームワークを構築する際に、オーバーライドしてもらうようなフックとなるクラスを提供するとします。 このときは、サブクラスを壊さないように変更を行うために、データをprotectにするかもしれません。 注意しないとサブクラスはスーパークラスを簡単に壊すことができるから、というのが本当の理由だったりしますけども。 (これについては脆弱な基クラス問題を参照のこと)
このように、データをprotectedにすることは、常に良いとも悪いとも言えません。 まったく知らない人間がオーバーライドするようなクラスの場合は、 protectedな機能を公布済みインターフェイスの一部として扱うべきです。 結果として気をつける必要も出てきますが。 フィールドを公開するというのはよくありません。 私ならこういう場合でもそんなことはしません。
これが意図したものではなく、 自分が書いたサブクラスのデータにアクセスしやすくするものだというのであれば、 まあ、理解できないこともありません。 ですが、私は通常、フィールドをprivateにし、滅多にprotectedにはしません。
関連した問題に、自己カプセル化を使うか否かがあります。