EclipseUML の利用 - クラス図の追加

Since: June/19th/2005

クラス図の追加

パッケージ内にクラス図を追加します。EclipseUML では、クラス図を追加すると、自動的に対応するクラスのコードが作成されます。このパッケージ内で作成したクラス図に対応するソースは、このパッケージ内のものとして作成されます。

  1. パッケージを右クリック -> 「新規(W)」->「その他(O)」
  2. 「UML Diagrams」->「UML Class Diagrams」を選択し、「次へ(N)」押下
    UML Class Diagram 追加
    図:UML Class Diagram 追加
    もしくは、パッケージを選択してから、ツールバーの "New UML Diagram" アイコンをクリック
    UML Class Diagram 追加
    図:UML Class Diagram 追加
  3. 開いたパネルで次のように指定:
  4. 「終了(F)」押下
  5. Reverse Engineering にチェックをいれて「終了」押下
  6. 確認画面で「OK」押下
  7. 「UML Class Diagram Editor」が開く。
    UML Class Diagram Editor
    図:UML Class Diagram Editor
    エディタの右上のマークが Omondo のロゴです。ここでは、評価版をインストールしているので、"* Evaluation *" と表示されています。無料版の場合は "* Free *" となります。

クラスの追加

  1. Class Diagram Editor のビューのツールバーから、 "Create a Class" アイコンをクリックしてから、ビューの任意の場所をクリック
    Create a Class アイコン
    図:Create a Class アイコン
    もしくは、ビューの任意の場所を右クリック ->「New」->「Class」
  2. 「新規 Java クラス」パネルで次のように入力:
    新規 Java クラス
    図:新規 Java クラス
  3. 「終了」押下
  4. Class Diagram Editor にクラスが追加される。

この結果、エディタにクラスを表す矩形が追加されると同時に、パッケージに、空のクラス Toybox が追加されます。

インタフェースの追加

  1. クラスと同様にインタフェースを追加する。
    新規 Java インタフェース
    図:新規 Java インタフェース
  2. 名前(M): Shape
    新規 Java インタフェース
    図:新規 Java インタフェース

この結果、エディタにインタフェースを表す矩形が追加されると同時に、パッケージに、空のインタフェース Shape が追加されます。

メソッドの追加

  1. インタフェースを右クリックして、「New」->「Method」で、次のメソッドを追加:
    メソッド追加
    図:メソッド追加

この結果、エディタのインタフェースを表す矩形に、メソッドが追加されると同時に、ソースコードに抽象メソッドが追加されます。

メソッド追加結果
図:メソッド追加結果

関係の追加

  1. ツールバーの Association アイコンをクリック
    Association アイコン
    図:Association アイコン
  2. Shape と Toybox を順番にクリック
  3. 1st Association End タブ(Shape 側)で次の設定:
    1st End 側設定項目
    図:1st End 側設定項目
  4. 「OK」押下

この結果、エディタのインタフェースとクラス間に集約の矢印が追加されます。

関係追加結果
図:関係追加結果

それと同時に、ソースコードに色々追加されます。現時点では、次のようになっています。

Shape.java

/*
 * 作成日: 2005/06/20
 *
 * TODO この生成されたファイルのテンプレートを変更するには次へジャンプ:
 * ウィンドウ - 設定 - Java - コード・スタイル - コード・テンプレート
 */
package demouml;

/**
 * @author msugai
 * 
 * TODO この生成された型コメントのテンプレートを変更するには次へジャンプ:
 * ウィンドウ - 設定 - Java - コード・スタイル - コード・テンプレート
 */

public interface Shape {

	/**
	 * 
	 */
	double getArea();

	/**
	 *  
	 * @uml.property name="toybox"
	 * @uml.associationEnd inverse="shape:demouml.Toybox" multiplicity="(0 1)"
	 * 
	 */
	Toybox getToybox();

	/**
	 *  
	 * @uml.property name="toybox"
	 * 
	 */
	void setToybox(Toybox toybox);

}

Toybox.java

/*
 * 作成日: 2005/06/20
 *
 * TODO この生成されたファイルのテンプレートを変更するには次へジャンプ:
 * ウィンドウ - 設定 - Java - コード・スタイル - コード・テンプレート
 */
package demouml;



import java.util.Collection;



import java.util.Iterator;






/**
 * @author msugai
 * 
 * TODO この生成された型コメントのテンプレートを変更するには次へジャンプ:
 * ウィンドウ - 設定 - Java - コード・スタイル - コード・テンプレート
 */

public class Toybox {

	/**
	 *  
	 * @uml.property name="shape"
	 * @uml.associationEnd aggregation="aggregate" inverse="toybox:demouml.Shape" multiplicity="(0 -1)"
	 * 
	 */
	private Collection shape;

	/**
	 * 
	 * @uml.property name="shape"
	 */
	public void setShape(java.util.Collection value) {
		shape = value;
	}

	/**
	 * 
	 * @uml.property name="shape"
	 */
	public Iterator shapeIterator() {
		return shape.iterator();
	}

	/**
	 * 
	 * @uml.property name="shape"
	 */
	public boolean addShape(demouml.Shape element) {
		return shape.add(element);
	}

	/**
	 * 
	 * @uml.property name="shape"
	 */
	public boolean removeShape(demouml.Shape element) {
		return shape.remove(element);
	}

	/**
	 * 
	 * @uml.property name="shape"
	 */
	public boolean isShapeEmpty() {
		return shape.isEmpty();
	}

	/**
	 * 
	 * @uml.property name="shape"
	 */
	public void clearShape() {
		shape.clear();
	}

	/**
	 * 
	 * @uml.property name="shape"
	 */
	public boolean containsShape(demouml.Shape element) {
		return shape.contains(element);
	}

	/**
	 * 
	 * @uml.property name="shape"
	 */
	public boolean containsAllShape(Collection elements) {
		return shape.containsAll(elements);
	}

	/**
	 * 
	 * @uml.property name="shape"
	 */
	public int shapeSize() {
		return shape.size();
	}

	/**
	 * 
	 * @uml.property name="shape"
	 */
	public demouml.Shape[] shapeToArray() {
		return (demouml.Shape[]) shape.toArray(new demouml.Shape[shape.size()]);
	}

}

実現の追加

インタフェースを実現するクラスを追加してみます。

  1. クラス名: Triangle
    実装クラス追加
    図:実装クラス追加
  2. インタフェースの「追加」ボタン押下
  3. インタフェース名: Shape
    実装クラス追加
    図:実装クラス追加

この結果、ダイアグラム・エディタに実装クラスが追加され、インタフェースとの間に実現の矢印が表示されます。

実装クラス追加
図:実装クラス追加

同時に、ソースコードにクラス Triangle が追加され、インタフェースで宣言している抽象メソッドのデフォルト実装が追加されます。

Triangle.java

/*
 * 作成日: 2005/06/20
 *
 * TODO この生成されたファイルのテンプレートを変更するには次へジャンプ:
 * ウィンドウ - 設定 - Java - コード・スタイル - コード・テンプレート
 */
package demouml;

/**
 * @author msugai
 * 
 * TODO この生成された型コメントのテンプレートを変更するには次へジャンプ:
 * ウィンドウ - 設定 - Java - コード・スタイル - コード・テンプレート
 */

public class Triangle implements Shape {

	/* (非 Javadoc)
	 * @see demouml.Shape#getArea()
	 */
	public double getArea() {
		// TODO 自動生成されたメソッド・スタブ
		return 0;
	}

	/* (非 Javadoc)
	 * @see demouml.Shape#getToybox()
	 */
	public Toybox getToybox() {
		// TODO 自動生成されたメソッド・スタブ
		return null;
	}

	/* (非 Javadoc)
	 * @see demouml.Shape#setToybox(demouml.Toybox)
	 */
	public void setToybox(Toybox toybox) {
		// TODO 自動生成されたメソッド・スタブ

	}

}

クラスを追加した後で、実現の矢印を追加することもできます。

  1. クラスの追加
    実装クラス追加
    図:実装クラス追加
  2. ツールバーの Generalization アイコンをクリック
    実装クラス追加
    図:実装クラス追加
  3. クラス Circle とインタフェース Shape を順番にクリック
  4. Override/Implement Methods で全て選択して「OK」押下
    実装クラス追加
    図:実装クラス追加

メンバ変数の追加

  1. クラス Triangle を右クリック -> 「New」->「Attribute」
  2. 「Parameters」->「Add」:
  3. 「OK」押下
  4. 同様に、クラス Circle を右クリック -> 「New」->「Attribute」
  5. 「Parameters」->「Add」:
  6. 「OK」押下

private なメンバはクラス図には表示されません。

コンストラクタの追加

  1. クラス Triangle を右クリック -> 「New」->「Constructor」
  2. 「Parameters」->「Add」:
  3. 「OK」押下
  4. 同様に、クラス Circle を右クリック -> 「New」->「Constructor」
  5. 「Parameters」->「Add」:
  6. 「OK」押下

クラス図にコンストラクタが追加されると同時に、空のコンストラクタがソースに追加されます。

コンストラクタ追加
図:コンストラクタ追加

以上で、モデリングとしては終了です。他にも、スーパークラス、抽象クラス、内部クラスなどを作成してみてください。



Copyright © 2005 SUGAI, Manabu. All Rights Reserved.
SEO [PR] !uO z[y[WJ Cu