犬ぶよツールズ制作記録

Javaによる研究生活のためのパッケージ、犬ぶよツールズ。
その開発と保守のための備忘録

jp.inubuyo.bone.domain.core (RntoB) パッケージ

2013-01-04 20:56:17 | Weblog

● 概要

double[]を引数としbooleanを戻り値とする写像を表す抽象クラスRntoBを提供するパッケージです。

Inubuyo Logic (BntoB) Libraryに依存します。

 

● 構成

抽象クラスRntoBは、抽象メソッドvalue(double[]): booleanを持ちます。

メソッドvalue(double[]): booleanは、引数の配列の0番目からn番目の要素により定まるものとします。

この、依存する要素の数を抽象メソッドsize(): intにより返します。

valueメソッドの引数には長さがsize()以上の配列を指定してください。

短い場合には、RntoBの実装クラスはArrayIndexOutOfBoundsExceptionを送出することができます。

 

size()が1、つまり配列の最初の要素のみに依存するRntoBのインスタンスは自然に、doubleを引数としbooleanを返すメソッドと見做せます。

これを抽象クラスRtoBとその抽象メソッドvalue(double): booleanで表します。

同様に、size()が2のRntoBのインスタンスは抽象メソッドvalue(double, double): booleanで表せます。

これを抽象クラスR2toBとします。

抽象クラスR2toBはRntoBを継承し、抽象メソッドvalue(double, double): booleanで継承したメソッドvalue(double): booleanを実装します。抽象クラスRtoBはR2toBを継承し、抽象メソッドvalue(double): booleanで継承したメソッドvalue(double, double): booleanを実装します。

 

定値関数はsize()が0になります。このインスタンスは、クラスRtoB_Constantの定数RtoB_Constant.TRUE、RtoB_Constant.FALSEとして提供します。

 

boolean値に対する単項演算not(否定)から、RntoBに対する単項演算が定まります。これをクラスRntoBのメソッドnot(): RntoBで提供します。

メソッドnot()は共変戻り値型になります。つまり、RntoB#not(): RntoB、 R2toB#not(): R2toB、RtoB#not(): RtoBです。

 

boolean値に対する二項演算から、RntoBに対する二項演算が定まります。これをRntoBのメソッドoperateWith(B2toB, RntoB): RntoB

で提供します。特に、可換な二項演算についてはメソッドを提供します。

+ and(RntoB): RntoB

+ or(RntoB): RntoB

+ xor(RntoB): RntoB

+ nand(RntoB): RntoB

+ nor(RntoB): RntoB

+ nxor(RntoB): RntoB

二項演算に対してはサブクラスで引数の異なるメソッドが提供されます。つまり、R2toB#and(R2toB): R2toB、RtoB#or(RtoB): RtoBなどです。
 
R2toBのメソッドvalue(double, double): booleanの第2引数に値を代入したものを考えると、これはRtoBになります。
同様に第1引数に代入してもRtoBになります。これらをメソッドR2toB#substitute0(double): RtoB、R2toB#substitute1(double): RtoBで提供します。引数は代入する値です。
RtoBはsubstitute1(double): RtoBを自分自身を返すメソッドとしてオーバーライドします。また、substitute0(double): RtoBをRtoB_Constantを返すメソッドとしてオーバーライドします。
 
これと同様に、RntoBは代入した写像のインスタンスを返すメソッドsubstitute(int, double): RntoBを持ちます。引数は代入する成分のインデックス(第1引数)と代入する値(第2引数)です。
 
集合R^nから集合Bへの写像fと、集合R^mから集合Bへの写像gと、B上の2項演算・から、直積写像:R^n×R^m → Bが、(x, y)をf(x)・g(y)に写す写像として定義されます。これを、メソッドRntoB#directProduct(B2toB, RntoB): RntoBにより提供します。RtoB同士の場合には戻り値がR2toBになるので、型が異なるメソッドRtoB#directProduct(B2toB, RtoB): R2toBもあります。
 
● まとめ
以上、RntoBに関わる抽象クラスをjp.inbuyo.bone.domain.coreパッケージに収めます。実装に必要なクラスがjp.inubuyo.bone.domain.core.implにあります。

最新の画像もっと見る