4

Java 入門コースで初めて UML ダイアグラムを作成しています。クラスが互いに正しく指し合っているかどうかを判断するのに苦労しています。

Guitar クラスは test クラスを指しているはずですか? また、Guitar クラスはテスト クラスの左側に配置する必要がありますか? どんなポインタでも大歓迎です、ありがとう。

ここに画像の説明を入力 ImageShack でホストされている私の UML ダイアグラム (画像を挿入するのに十分な参照ポイントがありません)

コードは以下です

package guitartest;

import java.util.Scanner;

public class Guitar {

// Declare variables 
private int numberOfStrings;
private String stringName;
private boolean isTuned;
private boolean isPlaying;
private boolean isPlucking;


// Construct a guitar and set boolean fields to "false"
public Guitar(){
    this.isTuned = false;
    this.isPlaying = false;
    this.isPlucking = false;
}   // end constructor


// Prompt user to enter number of strings 
public int getNumberOfStrings() {
    Scanner sc = new Scanner(System.in);

    // Loop continues until a positive integer is entered
    do {
        System.out.println("Enter number of strings in integer format");
        while (!sc.hasNextInt()) {
            System.out.println("Error! That's not a number!");
            sc.next();
        }    // end while
        numberOfStrings = sc.nextInt();
     }    // end do-while loop
     while (numberOfStrings <= 0); 
    return numberOfStrings;
}   // end method getNumberOfStrings

// Prompt user to enter string names
public String getStringName() {
    Scanner sc = new Scanner(System.in);

    // Loop continues until all strings are named
    for (int i = 0; i < numberOfStrings; i++){
        System.out.println("Enter string name"); 
        // Error if input is not a character
        while (!sc.hasNext("[A-Za-z]")) {
            System.out.println("Error! That's not a character!");
            sc.next();
         }
        stringName = sc.next();
    }   // end for loop
    return stringName;
}   // end method getStringName

// Verifies tuning status
public boolean tuneInstrument(){
    return isTuned;
}   // end method tuneInstrument

// Tune guitar
public void setTuned(boolean isTuned) {
    this.isTuned = isTuned;
}   // end method setTuned

// Verifies instrument is playing
public boolean playInstrument(){
    return isPlaying;
}   // end method playInstrument

// 
public void startPlayingInstrument(){
    isPlaying = true;
}   // end method startPlayingInstrument

public boolean pluckInstrument(){
    return isPlucking;
}   // end method pluckInstrument

public void startPlucking(){
    isPlucking = true;
}   // end method startPlucking

// Stop instrument
public void stopInstrument(){
    isPlaying = false;
}   // end method stopInstrument

}   // end class Guitar

テストクラスは次のとおりです。

package guitartest;

import java.util.Scanner;
// Scanner is in the java.util package

public class GuitarTest {

public static void main(String[] args) {

    // Create 10 guitar objects
    Guitar[] guitar = new Guitar[10];

    for (int i = 0; i < guitar.length; i++){
        guitar[i] = new Guitar();


    // Call methods in Guitar class
    guitar[i].getNumberOfStrings(); 
    guitar[i].getStringName();

    System.out.println("Is the guitar tuned? " + guitar[i].tuneInstrument());
    System.out.println("Guitar is being tuned. Please wait...");
    guitar[i].setTuned(true);
    System.out.println("Is the guitar tuned? " + guitar[i].tuneInstrument());

    System.out.println("Is the guitar playing? " + guitar[i].playInstrument());
    System.out.println("Please wait for guitar to play...");
    guitar[i].startPlayingInstrument();
    System.out.println("Is the guitar playing? " + guitar[i].playInstrument());

    System.out.println("Is the guitar being plucked? " + guitar[i].pluckInstrument());
    System.out.println("Please wait for guitar to be plucked...");
    guitar[i].startPlucking();
    System.out.println("The guitar is playing and being plucked. " + guitar[i].pluckInstrument());

    System.out.println("Stopping guitar from playing...");
    guitar[i].stopInstrument();
    System.out.println("Is the guitar playing? " + guitar[i].playInstrument());
    }   // end for loop

}   // end method main


}   // end class GuitarTest
4

2 に答える 2

2

GuitarTest と Guitar クラスは、関連関係を持つべきではありません。

「GuitarCase」クラス (および「Cover」クラス) が次のように定義されている場合:

public class GuitarCase{
    public Guitar g;
    public Cover  c = new Cover();
}

次に、GuitarCase から Guitar へのアソシエーションが必要です。アソシエーション エンド (Guitar エンド) にはロール "g" があります。GuitarCase から Cover までのコンポジションが必要です。関連付けの端 (カバーの端) にはロール "c" があります。

メイン関数を Guitar 自体に配置できるため、GuitarTest を図に表示しないことさえ好みます。

于 2013-07-08T10:31:09.567 に答える
0

大きな問題が 1 つあります。方向は from ではなく、逆Guitarにする必要があります。from toです (テストで使用するため)。また、GuitarTest.main の引数を忘れています (明らかなのであまり重要ではありません)。GuitarTestGuitarTestGuitarGuitar

@milesma はコメントで、私が最初は間違っていたと指摘し、彼に同意します。

GuitarTest は確かに Guitar を使用しましたが、それは「依存関係」の関係です。(クライアントからサプライヤーまで、この例では GuitarTest から Guitar まで破線を引きます。これは、Guitar が変更された場合、GuitarTest が変更されなければならないことを意味します); ただし、関数本体で Guitar を使用することは依存関係ではないと思います。(Guitar がメソッドのパラメーター、戻り値の型などとして使用される場合、Dependency は保証されます。) 私見、間に関係はありません。

より正しい@milesmaの回答を確認してください。

于 2013-07-07T22:48:11.977 に答える