2

mobileCall というクラスを実装しました。このクラスからいくつかのオブジェクトを作成し、このオブジェクトの String 変数に、特定の人物に対する複数の mobileCalls を持つ XML から取得した値を設定します。この人が発信したすべての通話をグループ化してカウントする必要があります (つまり、国内通話: 11 分; 国際通話: 15 分; データ: 20 MB)

そのため、クラス内にいくつかのパブリック メソッドを実装して、呼び出しの型をチェックして true または false を返すようにしました。メインクラスでは、これらのメソッドを呼び出して、特定のカウンターをカウントアップする基準を満たしているかどうかを確認しました。

専門家が私のコードを見て、これは良い習慣ではなく、OOP はそのような「あなたは何ですか」メソッドを排除するように設計されていると言いました。そして、この動作を実装するためのより良い方法があること。OOP とカプセル化を読み込もうとしましたが、それを行うためのより良い方法を見つけることができませんでした。彼には一理あると思います。

コード例

public class MobileCall {

    String callType;
    String callDuration;
    String callAmount;
    String callerID;
    String calleID;
    ....
    public boolean isNational(){

        if (callType.compareTo("National")==0)
            return true;
        else
            return false;
    }

    public boolean isInternational(){

        if (callType.compareTo("international")==0)
            return true;
        else
            return false;
    }
    ...
}

In Main Method

int nationalCounter;
int internationalCounter;
MobileCall mobileCall = new MobileCall();

if(mobileCall.isNational())
    nationalCounter = nationalCounter + mobileCall.getCallDuration();
else if (mobileCall.isInternational())
    internationalCounter = internationalCounter + mobileCall.getDuration();
....
4

5 に答える 5

0

まず、すべてのインスタンス変数を として宣言する必要がありますprivate。これにより、特定のクラスの各インスタンス変数または属性がカプセル化されます。これは、オブジェクトの属性がその特定のクラス内でのみアクセスできるカプセル化の背後にある全体的な考え方です。

たとえば、次のように変更String callType;します。private String callType;

インスタンス変数をプライベートとして宣言する利点は、他のクラスが特定のオブジェクトの属性を操作するのを防ぐことができ、誤った値が設定されないようにセーフティ ネットを提供できることです。ある人が別の人の身体的属性を変える能力を持っていると想像してみてください。それは絶対にばかげているでしょう。同様に、カプセル化の原則に従うには、属性を非公開にする必要があります。

属性/インスタンス変数にアクセスできる方法は、セッターとゲッターを使用することです。例えば:

public void setCallType(String callType) {
    this.callType = callType;
}

public String getCallType() {
    return this.callType;
}

このようにして、カプセル化の OOP 原則に従います。

于 2013-09-26T16:31:47.947 に答える