1
public class Score {

    private String score;


    public String getScore() {
        return score;
    }
    public void setScore(String score) {
        this.score = score;
    }

}

このコードを見つけたプロジェクトに取り組んでいます

このコードの機能は簡単ですが、setter が public の場合に String スコアを private にする理由がわかりません。私には、これは、スコアを非公開にするという感覚が、パブリック セッターによって破られているように見えます。

初心者から少なくとも少しのプログラマーに進化するのを手伝ってくれてありがとう。

4

3 に答える 3

0

一見、壊れたカプセル化のように見えます。ただし、上記の2つの利点があります。

  1. 実装。実装は変数である必要はありません。Stringセッターの実装はそれをデータベースに書き込み、ゲッターはそれを取得します。
  2. 検証。フィールドを公開するだけで、必要に応じてStringを設定できます。setter メソッドを導入することで、(たとえば) 長さ、null、コンテンツなどのチェックが可能になります。

上記は、必要に応じて、インターフェイスとは異なる方法でクラスを実装できることを意味します(想像してください-これらのメソッドをインターフェイスに抽象化し、すべてが深遠なさまざまな方法で動作する複数の実装を提供できます)。これらは同じインターフェイスに準拠しているため、周囲のコードを変更することなく、ある実装を別の実装に置き換えることができます。

私は(これに加えて)上記のパターンが好きではない傾向があると言います. 私の推論は、OO の利点は、フィールドを自分で抽出し、それらを使用して独自のロジックを実行できるようにするためではなく、オブジェクトに自分に代わって何かを行うように指示できることです。そのため、セッター/ゲッターと一緒にフィールドで構成されるクラスを疑う傾向があります。

于 2013-03-14T15:07:42.210 に答える
0
  1. privateキーワードは、そのように宣言された属性またはメソッドがクラス内でのみ表示されることを意味します。

  2. publicキーワードは、そのように宣言された属性またはメソッドが誰にでも見えることを意味します。

このプラクティスは、情報のカプセル化としてよく知られています。パブリック セッターとゲッターを使用すると、プログラマーは、これらの関数のユーザーがプライベート アトリビュートに対して実行できる操作を制御できます。

于 2013-03-14T15:12:12.163 に答える