UML图转换为Java代码

3

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

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

我将展示目前为止的内容:

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

public abstract class Entry {
    private String name;

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

问题2: 编写一个Java版本的File类,假设它有以下构造函数: public File(String name, long size) 答案:

public class File extends Entry {
    private long size;

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

    public long getSize(){
        return size;
    }
}

问题三:一个目录包含一组文件和目录。编写一个 Java 版本的 Directory 类,假设它有这个构造函数:public Directory(String name),并且 getSize 方法返回目录中所有文件和子目录的总大小(在此模型中,目录本身的大小被忽略)。

答案:我卡在了 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;
    }
}

3
你走在正确的道路上。对于第三个问题,你需要有一些东西来将一个目录与零个或多个Entry类型的对象关联起来。在Java中,这些关联是通过集合来实现的,比如ArrayList,其中关联的对象被存储。 - Ozan
我猜你的Directory类将包含一个Entry类型对象的集合(可能是ArrayList)。getSize方法将循环遍历这些Entry(目录和文件)对象,并计算它们的大小(使用文件的getSize方法),然后返回总大小。你应该在Directory类中添加一个方法,用于将文件和目录添加到文件集合中。 - scrappedcola
你差不多就快掌握了。当你使用集合时,你可以使用Java的foreach符号:for(Entry entry: entries) { ... } 在括号内,“entry”是当前迭代的Entry对象,你可以正常调用它的方法:String name = entry.getName(); - Ozan
3个回答

1

你对Q1和Q2的回答看起来不错。

关于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;
    }

}

0

正如指出的那样,前两个项目是正确的。

以下是我如何实现您的目录类。

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

如果您的目录包含其他目录,则会调用子目录的getSize来获取其大小。
您将不得不添加一个控件,以防止将目录添加到自身,否则会出现无限循环:)
另一个选项是
public long getSize(){
    long size = 0;
    for( Entry e : entries)
    {
    //Probably something like this
    size += e.getSize();
    }
    return size;
}

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接