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

クラス図のインターフェースを実装するには?

インターフェースの宣言部でinterfaceキーワードを記述する。
public interface IEmployee{...}

クラス図の抽象クラスを実装するには?

クラスの宣言部でabstract classキーワードを記述する。
public abstract class AbstractEmployee{...}

クラス図の具象クラスを実装するには?

クラスの宣言部でclassキーワードを記述する。
public class Employee{...}

フィールドを実装するには?

クラス図のフィールド記述からフィールドを実装する。 初期値は記述されている場合のみ実装する。
アクセス修飾子 型 フィールド名[=初期値]

クラスフィールドを実装するには?

クラス図のクラスフィールド記述からクラスフィールドを実装する。 クラス図のフィールド記述に下線が引かれているものがクラスフィールドである。 Javaのクラスフィールドはstatic修飾子を利用し、初期値は記述されている場合のみ実装する。
アクセス修飾子 static 型 フィールド名[=初期値]

メソッドのシグニチャ部分を実装するには?

クラス図のメソッド記述からメソッドのシグニチャ部分を実装する。
アクセス修飾子 戻り型 メソッド名(型 引数名)

クラスメソッドのシグニチャ部分を実装するには?

クラス図のクラスメソッド記述からクラスメソッドのシグニチャ部分を実装する。 クラス図のメソッドに下線が引かれているものがクラスメソッドである。 Javaのクラスメソッドはstatic修飾子を利用する。
アクセス修飾子 static 戻り型 メソッド名(型 引数名)

抽象メソッドのシグニチャ部分を実装するには?

クラス図の抽象メソッド記述から抽象メソッドのシグニチャ部分を実装する。 クラス図のメソッド記述で斜体になっているものが抽象メソッドである。 Javaの抽象メソッドはabstract修飾子を利用する。
アクセス修飾子 abstract 戻り型 メソッド名(型 引数名)

実現を実装するには?

実現先クラスのクラス宣言部において、implementsキーワードで実現元クラスの実現を定義する。 また実現元クラスのメソッドを実現先クラスで実装する。 AbstractEmployeeクラスではIEmployeeの未実装のメソッド(インターフェースクラスで定義されたメソッド) getID(),getName(),checkIdAndPassword()を実装することになる。

※オンライン学習システムのIEmployeeインターフェースとそれを実現したAbstractEmployeeクラスについて クラス図と実装

package entity;



public interface IEmployee{
   public String getID();
   public String getName();
   public boolean checkIdAndPassword(String id,String password);   
}      

汎化を実現するには?

汎化先のクラスのクラス宣言部において、extendsキーワードで汎化元クラスの汎化を定義する。 また、汎化元クラスで未実装のメソッドを汎化先クラスで実装する。

※オンライン学習システムのAbstractEmployeeクラス(抽象クラス)と、それを汎化したEmployeeクラス(具象クラス) についてクラス図と実装

package entity;



public class Employee extends AbstractEmployee{
   public Employee(String id,String password,String name){
      super(id,password,name);
   }



   public String getName(){
      return super.name;
   }
}    

依存を実装するには?

依存元のクラスにおいて、「メソッド」の中で依存先のオブジェクトを参照する。

※オンライン学習システムのEmployeeManagerクラスと、そのクラスに依存を持つEmployeeControlクラス のクラス図と実装

public class EmployeeControl{
   public boolean login(String id,String password){
      IEmployee employee = EmployeeManager.getEmployee(id);
      return((employee != null) && (emloyee.checkIdAndPassword(id,password)));
   }
}    

関連を実装するには?

関連元のクラスにおいて、「フィールド」で関連先のオブジェクトを参照する。

※オンライン学習システムのIEmployeeクラスと、そのクラスに関連を持つMonthlyRecordクラス のクラス図と実装

public class MonthlyRecord{
   private IEmployee employee;
}    

MonthlyRcordクラスのフィールド、メソッドのシグニチャを実装するには?

オンライン学習システムのMonthlyRecordクラスについてのクラス図とフィールド、 メソッドのシグニチャの実装を次に示す。

packeage entity;



import java.util.*;



public class MonthlyRecord{
   public static final int RECORD_INPUT = 0;
   public static final int REQUEST_PERMISSION = 1;
   public static final int PERMISSION = 2;
   private int year;
   private int month;
   private Map workingHours;
   private int state;

   public MonthlyRecord(int year,int month,IEmeployee employee){
      this.year = year;
      this.month = month;
      this.employee = employee;
      this.workingHours = new HashMap();
   }

   

   public void setWorkingHours(int day,int hour){
      this.working.put(new Integer(day),new Integer(hour));
   }

   public boolean setState(int state){
      this.state = state;
      return true;
   }
   
   public int getState(){
      return state;
   }
}

EmployeeManagerクラスのフィールド、メソッドのシグニチャを実装するには?

オンライン学習システムのEmployeeManagerクラスについてのクラス図とフィールド、 メソッドのシグニチャの実装を次に示す。

packeage entity;



import java.util.*;



public class EmployeeManager{
   private static Map employee = new HashMap();

   public static IEmployee getEmployee(String id){
      return(IEmployee)employee.get(id);
   }

   public static void setEmployee(IEmployee employee){
      employee.put(employee.getID(),employee);
   }
}

AbstractEmployeeクラスのフィールド、メソッドのシグニチャを実装するには?

オンライン学習システムのAbstractEmployeeクラスについてのクラス図とフィールド、 メソッドのシグニチャの実装を次に示す。

packeage entity;



public abstract class AbstractEmployee implements IEmployee{
   protected String id;
   protected String password;
   protected String name;

   public AbstractEmployee(String id,String password,String name){
      this.id = id;
      this.password = password;
      this.name = name;
   }

   public String getID(){
      return id;
   }

   public abstract String getName();

   public boolean checkIdAndPassword(String id,String password){
      return(this.id.equal(id) && this.password.equals(password));
   }
}