5

そのため、クラスとその中のメソッドについて読んだり学んだりしているので、メソッドをパブリックとプライベートとして宣言することの実際的な違いについてはほとんどわかりませんでした。

違いは、プライベート クラスはクラス内でのみアクセスできるのに対し、パブリック メソッドはクラス外のコード (他のクラス、関数) からアクセスできることです。しかし、私が本当に知りたいのは:

  • アプリケーションをデプロイするときに、何らかの方法で宣言したい/したくないのはなぜですか?
  • メソッドを public と private のどちらで宣言するかの指針となるベスト プラクティスはありますか?

また、それが問題かどうかはわかりませんが、Web アプリケーション環境で主に VB.Net と C# を学習しているので、その詳細が役立ちます。

4

4 に答える 4

9

カプセル化とは、各クラスをサービスを提供するマシンと考える必要があることを意味します。たとえば、椅子に座ると座ることができ、芝刈り機を使用すると芝生を刈ることができます。

プライベートメソッドは、マシンの内部動作に関連しています。対照的に、パブリックメソッドは、ユーザー (他のクラス) がマシンと対話する方法に関連しています。

例 1: 椅子...

椅子に座っているときは、詰め物の量やホッチキスの数を知る必要はなく、基本的には占有されているかどうか、安定しているかどうかを知る必要があります。

  • パブリック メソッド: IsStable、IsOccupied、Sit
  • プライベート メソッド: CalculateStuffingVolume、CountNumberOfStaples

例 2: 芝刈り機...

芝刈り機の場合、十分な燃料がある (またはプラグが差し込まれている) かどうか、ブレードが鋭利であるかどうか、電源を入れることができるかどうかを知る必要があります。

  • パブリック メソッド: GetFuelLevel、IsBladesSharp、TurnOn、TurnOff
  • プライベート メソッド: Combust など、想像するには多すぎます。

結論:

だから、あなたが開発しているとき、あなたが見るのは...

例 1: Chair.Sit、Chair.IsStable、Chair.IsOccupied

また

例 2: Lawnmower.GetFuelLevel、Lanmower.IsBladesSharp、Lawnmower.TurnOn、LawnMower.TurnOff

開発者は、布張りの糸の数、燃料キャップの色、ブレードの回転数、または椅子が接着されているかホッチキスで留められているかについて考える必要はありません。この違いにより、詳細に圧倒されることなく、アプリケーションを簡単にまとめることができます。さらに、プログラマーは必要な情報のみを公開できるため、セキュリティ レベルが向上します。John が述べたように、これにより Person クラスが Lawnmower.Combust(fuel) を呼び出すことが想定されていないときに呼び出されなくなります。

于 2013-03-20T01:38:48.627 に答える
4

メソッドがプライベートの場合、外部クラスがそれを間違って呼び出していることを考える必要はありません。

これの利点の 1 つは、クラスへのインターフェイス (その公開部分) とその実装を分離できることです。クラスの実装方法が誰にもわからない場合 (つまり、実装方法に依存するコードがない場合)、他のコードを壊すことなく実装方法を自由に変更できます。

于 2013-03-20T01:14:30.097 に答える
2

これは、オブジェクト指向プログラミングの最も重要な原則の 1 つであるカプセル化です。

クラスは通常、(パブリック) インターフェイスを提供します。例 (疑似コード):

class Rectangle {
    private length;
    private width;

    public getPerimeter() {
        // return calculatePerimeterOld();
        return calculatePerimeterNew();
    }

    private calculatePerimeterOld() {
        // old variant
    }

    private calculatePerimeterNew() {
        // Here the perimeter is caltulated.
        // so: perimeter = 2 * (length + width)
        // or so: perimeter = 2 * (length) + 2 * (width)
        // or maybe so: perimeter = length + width + length + width - (0.5 * length) + 2 * 0.25 * length)
        return perimeter;
    }

}

プライベートメソッドは好きなように変更できます。名前を変更したり、他のメソッドに置き換えたりできます。しかし、私のパブリック インターフェイスは同じままです。メソッドを として定義するときに署名する契約であるため、同じままにする必要がありpublicます。すべて、署名されてprivateいるのは私の「ブラックボックス」であり、そこでやりたいことが何でもできます。

それが主な理由です。もう 1 つの理由は、クラスのユーザー (-s) にメソッド/情報を提供してはならないということです。多すぎる(情報)はよくありません。

于 2013-03-20T01:58:38.053 に答える
1

自分だけが管理する1回限りのWebサイトを開発している場合は、パブリック機能とプライベート機能の概念が不要な場合があります。

ただし、他の人にソフトウェアを提供していて、その人があなたのソフトウェアの上に構築している場合、それは絶対に重要な概念です。

中には千個のノブとスイッチがある物理的な機械のように考えてください。しかし、外側にはっきりとラベルが付けられたノブがいくつかあるきれいなケースの中に含まれています。

  • パブリック関数とメソッドは、外部の関係者がソフトウェアと対話するために作成するものです。
  • プライベート関数とメソッドは、ソフトウェアがそれ自体と相互作用するために作成するものです。

ただし、1人の開発者が管理する1回限りのWebサイトの場合、これらの違いはそれほど重要ではありません。

于 2013-03-20T02:22:26.597 に答える