12

Smalltalk 言語には、private/protected メソッドの概念がないことに気付きました。すべてのメソッドはパブリックです。Java/C++ のバックグラウンドを持つ私は、Smalltalk で作成されたアプリケーションは完全に改ざんされる可能性があるため、これは言語の根本的な弱点であると考えていました。パブリック API を文書化し、メソッドをプレフィックスしてプライベートとして示すために命名規則に頼ることができると思います (Squeak がこれを行うと思います) が、それでも完全にオープンです。

メソッド呼び出しへのアクセスを制御するために明示的なアクセス修飾子を使用するよりも、このアプローチに利点はありますか?

4

4 に答える 4

16

実際、Smalltalk のやり方は、プライベート メソッドを「プライベート」カテゴリに入れることです。これは、これらのメソッドを使用すべきではないことを示していますが、もちろんこれを強制するものではありません。

これは仕様によるものです。これは機能であり、バグではありません。Smalltalk は、最初から正確にオープン システムとして設計されました。

いくつかの利点:

  • どうしても必要な場合 (おそらく、ライブラリの設計者は、私が必要とする特定のものを公開する必要性を予見していなかったのかもしれません) でも、それらのプライベート メソッドを呼び出すことができます。明らかに、これは簡単にできることではありません。むしろ、賢明に、慎重に、それが戦術的な解決策であることを知っています。
  • 言語の単純さ。
  • (Alexandre Jasmin のコメントによると) Smalltalk は、プログラマーであるあなたができることと、言語/環境ができることを区別しません。つまり、Smalltalk-the-image は、独自のインスペクター/デバッガーなどを構築するために必要なすべてのものを公開し、特別なツールを提供する必要はありません。
于 2011-09-13T09:53:14.327 に答える
6

プライベートメソッドと保護されたメソッドは、実際、c ++、java、c#などの言語の重大な弱点です。彼らは基本的にユーザーにこう言います:私は学び、進化したくありません。その結果(そしてはるかに初期のバインディング)は、これらの言語がはるかに多くのBDUFを必要とし、したがって、現代の(アジャイル)開発プロセスにははるかに使いにくいということです。

于 2011-09-17T17:45:16.890 に答える
3

最初の質問は、private/protected アクセス修飾子とは何ですか? 基本的に、それは安全やセキュリティに関するものではありません。それは、適切なインターフェースをユーザーに公開することです。それから始めて、カテゴリを保護/非公開にすることと、そのための言語構造を持つことの間にほとんど違いはありません。

プライベート/保護された可視性修飾子を使用すると、実際に解決するよりも問題が複雑になるとさえ言えます。

それに加えて、プライベート/保護された可視性がこの問題に対する良い答えだとは思いません

于 2011-09-15T08:07:31.787 に答える
-1

少なくとも、Smalltalk には、「アンダースコア」で始まるメソッド名をオブジェクト自体の外部で呼び出すことは禁じられているというテキストの規則が必要です。残念ながら、「アンダースコア」をメソッド名の最初の文字として使用することは許可されていないと思います。

于 2011-09-13T14:33:36.237 に答える