首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Simple UML Diagram...is这个布局正确吗?

Simple UML Diagram...is这个布局正确吗?
EN

Stack Overflow用户
提问于 2013-07-08 06:23:34
回答 2查看 2.5K关注 0票数 4

我是第一次为Java入门课程创建UML图。我很难弄清楚我的类是否正确地指向了彼此。

吉他类是否应该指向测试类?另外,吉他类应该在测试类的左边吗?非常感谢您的指点,谢谢。

My UML diagram hosted on ImageShack (我没有足够的参考点来插入图像)

代码如下

代码语言:javascript
运行
复制
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

测试类如下:

代码语言:javascript
运行
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-08 06:48:12

您有一个主要问题-方向不应该是从GuitarGuitarTest,而是相反-从GuitarTestGuitar (因为您在测试中使用了Guitar )。此外,您还忘记了GuitarTest.main的参数(很明显,所以不是很重要)。

@milesma在评论中指出,我最初是错误的,我同意他的观点:

GuitarTest确实使用了吉他,但这是“依赖”关系。(画一条虚线从客户到供应商,在这个例子中,从吉他到吉他,这意味着,如果吉他改变,GuitarTest必须改变);但是,我不认为在函数体中使用吉他是一个依赖。(如果将Guitar用作方法的参数、返回类型等,则保证依赖。)我的意思是,两者之间没有任何关系。

最好查看@milesma answer哪个更正确。

票数 0
EN

Stack Overflow用户

发布于 2013-07-08 18:31:10

GuitarTest和吉他类不应该有关联关系。

如果您有一个定义如下的"GuitarCase“类(和一个"Cover”类):

代码语言:javascript
运行
复制
public class GuitarCase{
    public Guitar g;
    public Cover  c = new Cover();
}

然后应该有一个从GuitarCase到GuitarCase的关联,关联端(在吉他端)有角色"g";应该有一个从GuitarCase到Cover的组合,关联端(在封面端)有角色"c";

我甚至不喜欢在图表上显示GuitarTest,因为您可以将main函数放在吉他本身中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17517001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档