3

私はJavaが初めてで、UMLダイアグラムをJavaコードに変換する必要があるいくつかの質問に対処しようとしています:umlドキュメントの画像があります-

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

私がこれまでに持っているものをお見せします:

Q1: コンストラクター public Entry(String name) があり、メソッド getSize が抽象であると仮定して、クラス Entry の Java バージョンを作成します。A:

public abstract class Entry {
    private String name;

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

Q2: クラス File の Java バージョンを、コンストラクター 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;
    }
}

Q3: ディレクトリには、ファイルとディレクトリのコレクションが含まれています。public Directory(String name) というコンストラクタがあり、メソッド getSize がディレクトリ内のすべてのファイルとそのすべてのサブディレクトリの合計サイズを返すと仮定して、クラス Directory の Java バージョンを作成します (このモデルでは、ディレクトリ自体のサイズは無視されます)。

A: ここで行き詰まります。getSize メソッドをどうすればよいかわかりません。私がこれまで行ってきたことが正しいかどうか、誰か教えてもらえますか? また、Q3の正しい方向を教えてください。

編集:わかりました、私は答えを試みましたが、私は本当に自分が何をしているのかわかりません..

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

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

}
于 2012-04-24T17:10:21.353 に答える
0

指摘されたように、最初の 2 つの項目は正しいです。

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

ディレクトリに他のディレクトリが含まれている場合、子ディレクトリの 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 に答える
0

次の 30 日間の評価ビルドを試すことができます: http://www.uml2.org/eclipse-java-galileo-SR2-win32_eclipseUML2.2_package_may2010.zip

解凍するだけで動作します。Java をコーディングし、同時に UML クラス図をライブにします。使いやすく、非常に効率的です。

于 2012-04-24T22:36:42.917 に答える