彼らはそれ以上何も知らないからです。
原作者は、混乱し複雑なC ++の世界に由来する固体原理の誤解に固執しているでしょう。
ruby、python、perlの世界には、ここでの回答が封印の理由であると主張する問題がないことにお気づきになることを願っています。動的型付けに直交することに注意してください。アクセス修飾子は、ほとんどの(すべての)言語で簡単に機能します。C ++フィールドは、他の型にキャストすることでいじることができます(C ++はより弱い)。JavaとC#はリフレクションを使用できます。アクセス修飾子を使用すると、本当に必要な場合を除き、実行できないようになります。
クラスを封印してメンバーをプライベートにすることは、単純なことは単純であり、困難なことは可能であるという原則に明示的に違反します。突然、単純であるべきことはそうではありません。
原作者の視点を理解することをお勧めします。その多くは、現実の世界で絶対的な成功を示したことのない、カプセル化の学術的なアイデアに由来しています。どこかで開発者が少し違った動作を望み、それを変更する正当な理由がないフレームワークやライブラリを見たことがありません。メンバーを封印し、プライベートにした元のソフトウェア開発者を悩ませた可能性のある可能性が2つあります。
- Ar慢-彼らは本当に彼らが拡張のために開いていて、修正のために閉じられていると信じていました
- 自己満足-他のユースケースが存在する可能性があることを知っていましたが、それらのユースケースについては記述しないことにしました
私は、企業の枠組みの中で、#2がおそらくそうだと思います。これらのC ++、Java、および.NETフレームワークは「完了」する必要があり、特定のガイドラインに従う必要があります。通常、これらのガイドラインは、型が型階層の一部として明示的に設計され、他のユーザーが使用できる多くのことのためにプライベートメンバーとして設計されていない限り、封印された型を意味します。 。新しいタイプの抽出は、サポート、文書化などに費用がかかりすぎます...
アクセス修飾子の背後にある全体的な考えは、プログラマーが自分自身から保護されるべきだということです。「Cプログラミングは、自分で足を踏み入れることができるので、悪いです。」プログラマーとして私が同意するのは哲学ではありません。
私はpythonの名前のマングリングアプローチを非常に好みます。必要に応じて、プライベートを簡単に(リフレクションよりもはるかに簡単に)置き換えることができます。これに関するすばらしい記事はこちらから入手できます:http ://bytebaker.com/2009/03/31/python-properties-vs-java-access-modifiers/
Rubyのprivate修飾子は、実際にはC#で保護されているようなもので、C#修飾子としてのprivateはありません。保護は少し異なります。ここに素晴らしい説明があります:http ://www.ruby-lang.org/en/documentation/ruby-from-other-languages/
静的言語は、その言語で書かれたコードの時代遅れのスタイルに準拠する必要はありません。