ぺんぎんらぼ

お笑いとマンガ好きなしょぼしょぼWeb系エンジニアの日記です。たまに絵を描きます。

お笑いとマンガ好きなしょぼしょぼWeb系エンジニアの日記です

UMLとJavaのコードをセットで覚える

勉強するたびに忘れてしまうUMLJava Goldの勉強をしていたらいい感じのJavaの実装とUML図が出てきたのでメモ。基本はこれ。

用語 解説
has-a 関係 全体を表現するクラスの属性に部分となるクラスが存在する、集約関係を表す。コンポジションは集約関係の一種。全体と部分のオブジェクトのライフサイクルが同一の状態を指す。
is-a 関係 クラス間の構造に似通ったものが存在する関係を表す。Java言語では継承関係(extends)で成立する。
dependency 関係 他のクラスの変数を利用したり、一時的に別のクラスのオブジェクトを参照する場合は、依存関係を表す。
realization 関係 実現関係を表す。

上記の表、次のコードとUMLのネタ元にさせていただいたのは『オラクル認定資格教科書 Javaプログラマ Gold SE 7 スピードマスター問題集 (EXAMPRESS)』

例1. スーパークラス/インスタンスの生成と参照の保持/setterとgetter

■コード

  • AクラスのスーパークラスはSクラス
  • スーパークラスSはBクラスへの参照を持っている
  • CクラスはUクラスのpublicメソッドを呼び出し、変数を使用する
  • AクラスはYクラスのpublic変数を使用する
class S {
    private B b;
}
 
class A extends S {
    private void print() {
        System.out.println(Y.NAME);
    }
}
 
class B {}
 
class C {
    private void print() {
        System.out.println(new U().getter());
    }
}
 
class Y {
    public static String NAME;
}
 
class U {
    private String name;
 
    public void setter(String name) {
        this.name = name;
    }
 
    public String getter() {
        return name;
    }
}

UML

TODO 追加予定

■例2 ArrayListインスタンスを生成してList型の参照で保持

■コード

import java.util.*;
interface I {
}
 
class A implements I {
    List<C> = new ArrayList<>();
}
 
class B extends A {
}
 
class C {
    void method() {
    }
}

UML

TODO 追加予定

AクラスはArrayListインスタンスを参照し、ArrayListはCクラスのインスタンスを参照するので、二重の集約関係となる。