Javaへの実装テクニック(後編)

シーケンス図からメソッド処理を実装するには?

シーケンス図に記述されたオブジェクト間のメッセージ通信をメソッドの処理として実装する。 シーケンス図が詳細でない場合、UMLの他の動的表現図やユースケース記述を相互参照しながら実装する。

オンライン学習システムのRecordControlクラスを含むシーケンス図とその実装例

public class RecordControl{
   public boolean canRegist(int year,int month,IEmployee employee){
      MonthlyRecord record = RecordManager.getMonthlyRecord(year,month,employee);
      return(record.getState() == MonthlyRecord.RECORD_INPUT);
   }
}    

ステートチャート図からメソッド処理を実装するには?

ステートチャート図が扱うオブジェクトの状態遷移をメソッドの処理として実装する。 また、単にメソッドを実装するだけでなく、状態ごとにクラスを作成する場合もある。 下の図ではステートチャート図から、承認のタイミングで呼び出されるapprove()メソッドの中で、 MonthlyRecordの状態stateにPERMISSONをセットすればいいことがわかる。

オンライン学習システムのMonthlyRecordクラスのステートチャート図とその実装例

public class RecordControl{
   public boolean approve(int year,int month,String id,IEmployee employee){
      return record.setState(MonthlyRecord.PERMISSION);  
   }
}     

アクティビティ図からメソッド処理を実装するには?

アクティビティ図における処理のフローをメソッドの処理として実装する。

※オンライン学習システムのEmployeeViewクラスのlogin()メソッドのアクティビティ図とその実装

public class EmployeeView{
   public void login() throws IOException{
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      EmployeeControl control = new EmployeeControl();
      MenuView menuView = new MenuView();
      
      while(true){
         System.out,println("IDを入力してください。");
         String id = br.readLine();
         System.out,println("パスワードを入力してください。");
         String password = br.readLine();
         boolean isAuthorized = control.login(id,password);
         
         if(isAuthorize){
            IEmployee employee = EmployeeManager.getEmployee(id);
            SessionManager.setEmployee(employee);
            menuView.selectFunction();
            SessionManager.setEmployee(null);
         }else{
            System.out.println("IDまたはパスワードに誤りがあります。")
         }
      }
   }
}           

UMLの動的表現図を使う場面とは?

通常、ステートチャート図、シーケンス図、アクティビティ図などのUMLの動的表現図は、 複雑なロジック(例えば、複数の状態遷移があるオブジェクトのロジック)や、 複雑なシステムで利用される。 比較的簡単なロジックが多いシステムでは、 画面定義書の機能仕様を参考に大部分を実装し、 複雑なロジック部分だけUMLの動的表現図を利用して実装する場合もある。