実現(Realization )
実現は,あるメソッドが存在することだけが定義されているインターフェイスを実装(implement)する関係を表す.
クラスを表す3段の表現を用いるが,インターフェースであることを表すための「<<interface>>」という記述がインターフェース名の上についている.これをステレオタイプと呼ぶ.ステレオタイプは,定義した要素が特殊な種類のものであることを表現するための方法である.ここで「特殊」とは,クラスではなく,インターフェースという別のものであることを意味している.実際,インターフェースは,抽象メソッドのみを要素としてもつクラスのようなものであるという理解ができるので,単なるクラスとちょっと特殊ということである.
料理をするという操作だけが定義された調理インターフェイスを,中華料理人や寿司職人や板前は,料理する内容を実装している.実装により,料理するものが中華料理であったり,寿司であったり,日本料理であったりすることで,異なるクラスを定義できる.
インターフェイスを表すクラス形式とロリポップを用いた例を示す.実装するクラスで,実装するメソッド名が表示されるので,クラスを表わす3段の表現で重複してメソッド名を定義する必要はない.抽象メソッド名を省略して,インターフェース名のみ定義して簡略化できる.
ロリポップを用いるときには,関係を表す線分として実線を用いる.インターフェイスの表記とクラス表記の違いから方向が明らかであるので方向を表す記号はつかない.
public interface Cooking { public void cooking(); }
public class SushiShokunin implements Cooking { public void cooking() { System.out.println("寿司を作ります"); } }
public class ChineseCook implements Cooking { public void cooking() { System.out.println("中華料理を作ります"); } }
public class FrenchChef implements Cooking { public void cooking() { System.out.println("フランス料理を作ります"); } }
public class Main { public static void main(String args[]) { //寿司職人 Cooking jiro = new SushiShokunin(); jiro.cooking(); //中華料理人 Cooking chin = new ChineseCook(); chin.cooking(); //フレンチシェフ Cooking alan = new FrenchChef(); alan.cooking(); } }
寿司を作ります 中華料理を作ります フランス料理を作ります