3

我是 Java 新手,正在尝试解决一些必须将 UML 图转换为 Java 代码的问题:我有一个 uml 文档的图像-

http://s1079.photobucket.com/albums/w513/user20121/?action=view¤t=uml.jpg

我将向您展示我到目前为止所拥有的:

Q1:编写一个 Java 版本的 Entry 类,假设它有这个构造函数:public Entry(String name) 并且方法 getSize 是抽象的。A:

public abstract class Entry {
    private String name;

    public Entry(String name){
        this.name =  name;
    }
    public String getName()
    {
        return name;
    }
    abstract long getSize();
}

Q2:写一个 Java 版本的类 File 假设它有这个构造函数: public File(String name, long size) A:

public class File extends Entry {
    private long size;

    public File(String name, long size){
        super(name);
        this.size = size;
    }

    public long getSize(){
        return size;
    }
}

Q3:目录包含文件和目录的集合。编写一个 Java 版本的 Directory 类,假设它具有以下构造函数:public Directory(String name),getSize 方法返回目录中所有文件及其所有子目录的总大小(在此模型中为目录本身的大小被忽略)。

A:这就是我卡住的地方,我不知道如何处理 getSize 方法。谁能告诉我到目前为止我所做的是否正确?并为我指出第三季度的正确方向?

编辑:好吧,我已经尝试过回答,但我真的不知道我在做什么..

import java.util.ArrayList;

public class Directory extends Entry {

    ArrayList <Entry> entries = new ArrayList<Entry>();

    public Directory(String name)
    {
        super(name);
    }

    public long getSize(){
        long size;
        for(int i=0;i<entries.size();i++)
        {
        size +=  //don't know what to put here?
        }
        return size;
    }
}
4

3 回答 3

1

Your answers for Q1 and Q2 are looking fine.

Regarding Q3:

// A Directory is an Entry and can contain an arbitrary number of other Entry objects
public class Directory extends Entry {

    // you need a collection of Entry objects, like ArrayList<Entry>
    // ArrayList<Entry> entries = ...

    function getSize() {
        long size;
        // now we calculate the sum of all sizes
        // we do not care if the entries are directories or files
        // the respective getSize() methods will automatically do the "right thing"
        // therefore: you iterate through each entry and call the getSize() method
        // all sizes are summed up
        return size;
    }

}
于 2012-04-24T17:10:21.353 回答
0

您可以尝试以下 30 天评估构建:http ://www.uml2.org/eclipse-java-galileo-SR2-win32_eclipseUML2.2_package_may2010.zip

只需解压缩即可。您编写您的 java 代码并同时获得您的 UML 类图。易于使用且非常高效。

于 2012-04-24T22:36:42.917 回答
0

正如所指出的,前两项是正确的。

以下是我将如何实现您的 Directory 类。

import java.util.ArrayList;

public class Directory extends Entry{


ArrayList <Entry> entries = new ArrayList<Entry>();

public Directory(String name)
{
    super(name);
}

public long getSize(){
    long size = 0;
    for(int i=0;i<entries.size();i++)
    {
    //Probably something like this
    size += entries.get(i).getSize();
    }
    return size;
}
}

如果您的 Directory 包含其他目录,则会调用子目录的 getSize 来获取其大小。

您将必须添加一个不能将目录添加到自身的控件,否则您将有一个无限循环:)

另一种选择是

public long getSize(){
    long size = 0;
    for( Entry e : entries)
    {
    //Probably something like this
    size += e.getSize();
    }
    return size;
}
于 2012-04-25T14:12:59.567 回答