ohymosj
クラス OhPort

java.lang.Object
  拡張ohymosj.OhObject
      拡張ohymosj.OhPort
直系の既知のサブクラス:
OhReceivePort, OhSenderPort

public abstract class OhPort
extends OhObject

基本型端子モデルを表すクラスです。

端子を作成するための基底となる抽象クラスです。

クラス OhPort は、全ての端子モデルの基底クラスです。 端子が持つべき基本的なメソッドを定義しています。 メソッドの一部は、このクラスでは定義を与えず、抽象メソッドになっています。

OhPort;

OhPort is the base class from which all port classes are derived.

We call an object of class OhPort or classes inherited from class Port a "port".
In ohymosj, a port is used for sending and/or receiving datapacks.

Basic methods which a port should have are declared.
Parts of those basic methods are declared as pure virtual.

バージョン:
$Revision: 1.58 $ $Date: 2004/03/08 17:03:02 $
作成者:
satoh

フィールドの概要
 
クラス ohymosj.OhObject から継承したフィールド
_className, _objectName, _objectNumber, _owner, NEWLINE
 
コンストラクタの概要
OhPort()
           デフォルトコンストラクタです。
OhPort(java.lang.String aPortName, int aPortNumber)
           引数に指定されたメンバ変数を持つ OhPort を作成します。
 
メソッドの概要
abstract  boolean areYouReady()
           計算作業前の確認を行ないます。
 void calReq()
           計算要求を受けつけます。
 boolean canYouGetData(OhTimePoint aT)
           データパックの収録時刻を確認します。
abstract  boolean canYouGetData(OhTimePoint aTFrom, OhTimePoint aTTo)
           取得可能データパックの確認を行ないます。
 boolean canYouSwitch()
           端子の接続作業の終了処理およびデータ送受信開始のための準備作業を行ないます。
 void cPrint(java.io.PrintWriter aPw, java.lang.String aHead)
           オブジェクト情報を出力します。
static OhPort create(java.lang.String aClassName)
           端子を作成します。
abstract  java.lang.String dataType()
           データの型を返します。
 boolean getDataPack(java.lang.Object[] aFormer, OhTimePoint _dataTime)
           時刻指定によりデータパックを取得(送信)します。
abstract  boolean getDataPack(java.lang.Object[] aFormer, OhTimePoint _dataTime, java.lang.Object[] aLater, char aMode)
           時刻指定によりデータパックを取得(送信)します。
 boolean getDataPack(OhTimePoint _dataTime, java.lang.Object[] aLater)
           時刻指定によりデータパックを取得(送信)します。
abstract  void getDataPackArray(OhArrayList[] aDpArray, int[] aNumOfDp)
           データパックの配列リストを取得(送信)します。
abstract  OhTimePoint getNecessaryTimeFrom()
           データ必要時刻を返します。
abstract  OhTimePoint getNecessaryTimeTo()
           データ必要時刻を返します。
abstract  OhTimePoint getNewestDataTime()
           最新のデータの記録時刻を返します。
abstract  int getNumberOfDataPacks()
           データパックの個数を返します。
abstract  OhTimePoint getOldestDataTime()
           最古のデータの記録時刻を返します。
 boolean init(java.lang.String aPortName, int aPortNum)
           オブジェクト名、オブジェクト番号を初期化します。
 void printConnection(java.io.PrintWriter aPw, java.lang.String aHead)
           接続情報を出力します。
abstract  void reduceDataPackStock()
           不要データパックを消去します。
 boolean registerReceiver(java.lang.Object aReceiver)
           受信側端子を登録します。
abstract  void setDataPackArray()
           デ−タパックの配列リストを設定します。
 boolean setSender(java.lang.Object aSender)
           送信側端子を登録します。
 
クラス ohymosj.OhObject から継承したメソッド
getAbsName, getClassName, getObjectName, getObjectNumber, getOwner, getTopOwner, objCompare, objCompare, objCompare, oPrint, setOwner
 
クラス java.lang.Object から継承したメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

OhPort

public OhPort()
デフォルトコンストラクタです。 メンバ変数を以下の通り初期化します。
  ・_className    : "OhPort"
  ・_objectName   : null
  ・_objectNumber : -1
  ・_owner        : null
 


OhPort

public OhPort(java.lang.String aPortName,
              int aPortNumber)
       throws OhError
引数に指定されたメンバ変数を持つ OhPort を作成します。 OhPort.init(String, int) に aObjNum, aObjNum を渡し、 メンバ変数を以下の通り初期化します。
  ・_className    : "OhPort"
  ・_objectName   : aObjName
  ・_objectNumber : aObjNum
  ・_owner        : null
 

パラメータ:
aPortName - a String value
aPortNumber - an int value
例外:
OhError - if an error occurs
メソッドの詳細

dataType

public abstract java.lang.String dataType()
データの型を返します。

抽象メソッドです。

このメソッドの実装は、 OhSendDouble, OhInputFileDouble, OhRelayDouble, OhReceiveDouble, OhOutputFileDouble で与えることにします。 int, long, float についても同様です。 例えば、受信データが int なら "int" を返すように定義します。

Abstract method.

This method returns string DataType which shows the type of datapacks treated by the port.

Because this method is declared as abstract, in a derived class of class OhPort the definition of this method must be given by a programmer.

戻り値:
a String value

areYouReady

public abstract boolean areYouReady()
計算作業前の確認を行ないます。

抽象メソッドです。

接続作業後、計算作業前の確認に用います。 接続作業を終了し、計算作業に進むことができる場合 true を返し、 接続作業が終了していない場合 false を返します。

 RETURN:
   ・true   接続作業が終了している。
   ・false  接続作業が終了していない。
 

Confirm whether all connection work has been done successfully or not.

In class OhPort, which is an abstract class, method areYouReady() is an abstract method.

戻り値:
a boolean value

setDataPackArray

public abstract void setDataPackArray()
デ−タパックの配列リストを設定します。

抽象メソッドです。

実際には、 _dataPackArray の要素数を _numberOfDataPacks に設定するだけです。

Abstract method. This method makes data pack array.


canYouGetData

public abstract boolean canYouGetData(OhTimePoint aTFrom,
                                      OhTimePoint aTTo)
取得可能データパックの確認を行ないます。

抽象メソッドです。

canYouGetData(OhTimePoint aTFrom, OhTimePoint aTTo) は, aTFrom 以前から、 aTTo 以降までのデータパックをこの端子から取得可能ならば、 true を返し、不可能なら false を返すように各派生クラスで定義します.

 ARGUMENT:
   ・aTFrom    aTFrom 以前からのデータパックが取得可能であることを確認する.
   ・aTTo      aTTo 以降までのデータパックが取得可能であることを確認する.
 RETURN:
   ・YES       aTFrom 以前から aTTo 以降までのデータパックを取得可能な場合.
               t におけるデータが取得可能な場合.
   ・NO        aTFrom 以前から aTTo 以降までのデータパックを取得不可能な場合.
 

Inquire whether the invoking port can get data from "aTFrom" to "aTTo".

パラメータ:
aTFrom - an OhTimePoint value
aTTo - an OhTimePoint value
戻り値:
a boolean value

getDataPackArray

public abstract void getDataPackArray(OhArrayList[] aDpArray,
                                      int[] aNumOfDp)
データパックの配列リストを取得(送信)します。

派生クラスにおいて、データパック配列を取得するメソッドを定義します。 aDpArray にはデータパック配列を格納し、aNumOfDp には、aDpArray の要素数を格納します。

Get a datapack array.

パラメータ:
aDpArray - an OhArrayList[] value
aNumOfDp - an int[] value

getOldestDataTime

public abstract OhTimePoint getOldestDataTime()
最古のデータの記録時刻を返します。

This method returns the oldest data time.

戻り値:
an OhTimePoint value

getNewestDataTime

public abstract OhTimePoint getNewestDataTime()
最新のデータの記録時刻を返します。

This method returns the updated data time.

戻り値:
an OhTimePoint value

getNumberOfDataPacks

public abstract int getNumberOfDataPacks()
データパックの個数を返します。

This method returns the number of data packs.

戻り値:
an int value

getDataPack

public abstract boolean getDataPack(java.lang.Object[] aFormer,
                                    OhTimePoint _dataTime,
                                    java.lang.Object[] aLater,
                                    char aMode)
時刻指定によりデータパックを取得(送信)します。

派生クラスにおいて、時刻を指定してデータパックを取得するメソッドを定義します。

aFormer には、データ記録時刻が _dataTime 以前で _dataTime に最も近い収録データパックを取得、格納します。
aLater には、データ記録時刻が _dataTime 以降で _dataTime に最も近い収録データパックを取得、格納します。

aFlag は取得のモードを選択するためのオプションで、下記の通りです。

   ・"b"       aFormer, aLater の両方を必ず取得する。
               取得できない場合は、両方とも NULL に設定する。
   ・"f"       aLater を取得できなくても、aFormer のみ取得する。
               aLater を取得できない場合、NULL に設定する。
   ・"l"       aFormer を取得できなくても、aLater のみ取得する。
               aFormer を取得できない場合、NULL に設定する。
   ・その他    aFormer, aLater のすくなくとも一方を取得する。
               取得できないものは NULL に設定する。
 
aFlag のデフォルト値は、 "b" です。

また、 引数に aLater を渡さない場合は、 aFlag を f として aFormer のみ取得し、 引数に aFormer を渡さない場合は、 aFlag を l として aLater のみ取得します。

データ記録時刻が丁度 _dataTime であるデータパックが収録されている場合は、 aFormer, aLater ともそれを格納します。

条件を満たすデータパックを取得できない場合、aFormer, aLater は null に設定されます。

データを取得できた場合は、true を返します。

パラメータ:
aFormer - an Object[] value
_dataTime - an OhTimePoint value
aLater - an Object[] value
aMode - a char value
戻り値:
a boolean value

getNecessaryTimeFrom

public abstract OhTimePoint getNecessaryTimeFrom()
データ必要時刻を返します。

getNecessaryTimeFrom よりデータ記録時刻が早いデータパックは、 OhPort.reduceDataPackStock() により消去されます。

戻り値:
an OhTimePoint value

getNecessaryTimeTo

public abstract OhTimePoint getNecessaryTimeTo()
データ必要時刻を返します。

戻り値:
an OhTimePoint value

reduceDataPackStock

public abstract void reduceDataPackStock()
不要データパックを消去します。

この端子で取得可能なデータパックのうち、 getNecessaryTimeFrom() よりデータ記録時刻が早いデータパックを消去するよう、 派生クラスで定義します。


init

public boolean init(java.lang.String aPortName,
                    int aPortNum)
             throws OhError
オブジェクト名、オブジェクト番号を初期化します。

引数つきコンストラクタで使用されます。

Initialization.

オーバーライド:
クラス OhObject 内の init
パラメータ:
aPortName - a String value
aPortNum - an int value
戻り値:
a boolean value
例外:
OhError - if an error occurs

setSender

public boolean setSender(java.lang.Object aSender)
                  throws OhError
送信側端子を登録します。

このクラスの派生クラスでは、 Object 型にキャストされた送信元端子のアドレス aSender を引数として受けとり、 aSender を送信元として設定できたら true を、設定できなかったら false を返すよう定義してください。

このメソッドは、エラーメッセージを出力後 false を返します。 派生クラスで、setSender() を再定義しない場合は、これが、default の定義になります。

Set the sender. There is only one sender for each receiver. This method returns whether it succeeded or not.

Although a default definition is given in the Port class, a programmer must give his own definitions in derived classes.

パラメータ:
aSender - an Object value
戻り値:
a boolean value
例外:
OhError - if an error occurs

registerReceiver

public boolean registerReceiver(java.lang.Object aReceiver)
                         throws OhError
受信側端子を登録します。

このクラスの派生クラスでは、 Object 型にキャストされた送信先端子のアドレス aReceiver を引数として受けとり、 aReceiver を送信先として登録できたら true を、登録できなかったら false を返すよう定義してください。

このメソッドは、エラーメッセージを出力後 false を返します。 派生クラスで、setSender() を再定義しない場合は、これが、default の定義になります。

Register a receiver of this port. There may be more than one receiver for a sender port. This method returns whether it suceeded or not.

Although a default definition is given here, a programmer must give his own definitions in derived classes.

パラメータ:
aReceiver - an Object value
戻り値:
a boolean value
例外:
OhError - if an error occurs

canYouSwitch

public boolean canYouSwitch()
                     throws OhError
端子の接続作業の終了処理およびデータ送受信開始のための準備作業を行ないます。

このクラスの派生クラスで、端子の接続作業の終了処理とつぎの仕事の準備を行なうよう定義します。

処理が成功したら true を、失敗したら false を返します。 このメソッドは、エラーメッセージを出力後 false を返します。

OhReceivePort では、接続作業後行なうべき処理は特にありません。 常に true を返すように定義します。

OhSendPort では、複数の受信端子にデータを送信することもあるので、 送信相手の port をリスト _bufferList に収録していきます。 最終的には、リストに登録された送信相手の port を配列 _receiversArray に移し替えます。 この作業を OhSenderPort.canYouSwitch() で実行します (OhSendPort は、 OhSenderPort の派生クラス)。

その後、接続が終了して、計算を始めます。 その時、_dataPackArray の準備をします。 すなわち、_numberOfDataPacks の値を -1 から 0 に設定します。

Finish registration of receivers and count the number of receivers. In a derived class, do work which finishes connection operations.

戻り値:
a boolean value
例外:
OhError - if an error occurs

calReq

public void calReq()
            throws OhCannotGetDataError,
                   OhError
計算要求を受けつけます。

ここでは何もしないように定義されています。

以下のクラス OhPort の派生クラスでつぎのように定義されています。

  1. OhSendPort.calReq() は、 その OhSendPort を所有している要素に計算要求を転送します。
  2. OhRelayPort.calReq() は、 その OhRelayPort にデータを送信している端子に計算要求を転送します。
  3. OhReceivePort.calReq() は、 その OhReceivePort にデータを送信している端子に計算要求を転送します。

Request of calculation. Transfer the request to a element which does actual caluculation work or ports which send datapack to the current port.

例外:
OhCannotGetDataError - if an error occurs
OhError - if an error occurs

canYouGetData

public boolean canYouGetData(OhTimePoint aT)
データパックの収録時刻を確認します。

このメソッドは、aT(引数) におけるデータが取得可能か確認するメソッドです。 このクラス内の同名の抽象メソッドを呼び出しています。

Inquire whether the invoking port can get data at OhTimePoint "aT".

パラメータ:
aT - an OhTimePoint value
戻り値:
a boolean value

getDataPack

public boolean getDataPack(java.lang.Object[] aFormer,
                           OhTimePoint _dataTime)
時刻指定によりデータパックを取得(送信)します。

派生クラスにおいて、時刻を指定してデータパックを取得するメソッドを定義します。 このクラス内の同名の抽象メソッドを呼び出しています。

aFormer には、データ記録時刻が _dataTime 以前で _dataTime に最も近い収録データパックを取得、格納します。

aFlag は取得のモードを選択するためのオプションで、下記の通りです。 データ記録時刻が丁度 _dataTime であるデータパックが収録されている場合は、 aFormer にそれを格納します。

条件を満たすデータパックを取得できない場合、aFormer は null に設定されます。

データを取得できた場合は、true を返します。

パラメータ:
aFormer - an Object[] value
_dataTime - an OhTimePoint value
戻り値:
a boolean value

getDataPack

public boolean getDataPack(OhTimePoint _dataTime,
                           java.lang.Object[] aLater)
時刻指定によりデータパックを取得(送信)します。

派生クラスにおいて、時刻を指定してデータパックを取得するメソッドを定義します。 このクラス内の同名の抽象メソッドを呼び出しています。

aLater には、データ記録時刻が _dataTime 以降で _dataTime に最も近い収録データパックを取得、格納します。

データ記録時刻が丁度 _dataTime であるデータパックが収録されている場合は、 aLater にそれを格納します。

条件を満たすデータパックを取得できない場合、aLater は null に設定されます。

データを取得できた場合は、true を返します。

パラメータ:
_dataTime - an OhTimePoint value
aLater - an Object[] value
戻り値:
a boolean value

cPrint

public void cPrint(java.io.PrintWriter aPw,
                   java.lang.String aHead)
オブジェクト情報を出力します。

オーバーライド:
クラス OhObject 内の cPrint
パラメータ:
aPw - a PrintWriter value
aHead - a String value

printConnection

public void printConnection(java.io.PrintWriter aPw,
                            java.lang.String aHead)
接続情報を出力します。

派生クラスで接続情報を表示するよう定義します。 このクラスでは、エラーメッセージを出力します。

パラメータ:
aPw - a PrintWriter value
aHead - a String value

create

public static OhPort create(java.lang.String aClassName)
端子を作成します。

引数に、端子モデルを表すクラス名を与えると、 その端子モデルのオブジェクトを生成します。

パラメータ:
aClassName - a String value
戻り値:
an OhPort value