3

I'm new to Java and am trying to work through some questions where I have to convert a UML diagram to Java code: I have an image of the uml document-

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

I'll show you what I have so far:

Q1: Write a Java version of class Entry assuming it has this constructor: public Entry(String name) and that the method getSize is abstract. A:

public abstract class Entry {
    private String name;

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

Q2: Write a Java version of class File assuming it has this constructor: 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: A directory contains a collection of files and directories. Write a Java version of class Directory assuming it has this constructor: public Directory(String name) and the method getSize returns the total size of all the files in the directory and all its sub-directories (in this model the size of a directory itself is ignored).

A: This is where I get stuck, I don't know what to do about the getSize method. Can anyone tell me whether what I have done so far is correct? And also point me in the right direction for Q3?

Edit: okay I have attempted an answer but I really I don't know what I'm doing..

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
  • 3
    You're on the right way. For Q3, you need something to associate one directory with 0 or more Entry type objects. In Java, these associations are realized with Collections, like ArrayList, in which the associated objects are stored.
    – Ozan
    Commented Apr 24, 2012 at 16:59
  • Well I would guess that your Directory class will contain a collection (Possibly an ArrayList) of Entry type objects. The getSize method would loop through those Entry (directory and File) Objects and total up the sizes (using the file's getSize Mehtods) and returns the total.You should probably have a method to add files and directories to the collection of files in the directory class. Commented Apr 24, 2012 at 17:02
  • You almost got it. When you are using Collections you can use the foreach notation of Java: for(Entry entry: entries) { ... } Within the brackets 'entry' is the Entry object of the current iteration, whose methods you can call normally: String name = entry.getName();
    – Ozan
    Commented Apr 24, 2012 at 23:25

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

}
0
0

You can try the following 30 days evaluation build: http://www.uml2.org/eclipse-java-galileo-SR2-win32_eclipseUML2.2_package_may2010.zip

Just unzip and it works. You code your java and get your UML class diagram live at the same time. Easy to use and very efficient.

0

As pointed out first two items are correct.

Here's how i would implement your Directory class.

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

If your Directory contains other directories, the getSize of the child directory will be called to get its Size.

You will have to add a control that you can't add a directory to itself, or you will have a infinite loop :)

An other option is

public long getSize(){
    long size = 0;
    for( Entry e : entries)
    {
    //Probably something like this
    size += e.getSize();
    }
    return size;
}

Not the answer you're looking for? Browse other questions tagged or ask your own question.