A simple UML diagram ... Is this layout correct?

This is the first time I am creating a UML diagram for introduction to a Java course. I find it difficult to understand whether my classes correctly point to each other correctly.

Is the Guitar class supposed to point to a test class? Also, should the Guitar class be to the left of the test class? Any pointers are much appreciated, thanks.

enter image description here My UML diagram is hosted on ImageShack (I don’t have enough ref points to insert the image)

Code below

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 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 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 

The following class of tests:

 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
source share
2 answers

You have one serious problem: the direction should not be from Guitar to GuitarTest , but rather from GuitarTest to Guitar (because you use Guitar in tests). You also forgot the argument of GuitarTest.main (obviously, this is not very important).

@milesma points out in a comment that I was originally wrong and I agree with him:

GuitarTest really used Guitar, but this is a Dependency relationship. (draw a dashed line from the client to the Supplier, in this example, from GuitarTest to Guitar, which means that if the Guitar changed, GuitarTest should change); However, I do not think that using the guitar in the body functions is addictive. (If the guitar is used as a parameter of the method, return type, etc. then the dependency is guaranteed.). IMHO, there is no relationship between them.

It is better to check @milesma's answer, which is more correct.

0
source

Classes GuitarTest and Guitar should not have an associative relationship.

If you have the class "GuitarCase" (and the class "Cover"), which is defined as follows:

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

Then there must be an association of the GuitarCase with the guitar, the end of the association (at the end of the guitar) has the role of "g"; There must be a composition from GuitarCase for the cover, the end of the association (at the end of the cover) has the role of "c";

I even prefer not to show GuitarTest on the chart, because you can put the main function on the guitar.

+2
source

Source: https://habr.com/ru/post/1490184/


All Articles