オープンモデリング記法(OML)(構想中2)
現金と振込振替を並べてみると、
<支払方法:現金>:
<<消費者:1>>|・・・・><通販会社:1>
<通販会社:1> |====><<消費者:2>>;
<支払方法:振込振替>:
<<消費者:1>>|−−−−><通販会社:1>
<通販会社:1> |====><<消費者:2>>
<<消費者:2>>|・・・・><通販会社:3>;
となって、お金の流れ(・・・・>)と商品の流れ(====>)の順序が丁度逆になっているのが分かります。支払方法と言うルールにおける現金と振込振替の違いとは、つまりそう言うことです。
未入金者への督促
さて、ここで、振込振替で、消費者が商品を受け取ってもお金を振り込んでこない場合はどうなるかを考えます。
<支払方法:振込振替>:
<<消費者:1>>|−−−−><通販会社:1>
<通販会社:1> |====><<消費者:2>>
<<消費者:2>>|・・・・><通販会社:3>
<<消費者:2>>|・・・・|<通販会社:4>
<通販会社:4> |−−−−><<消費者:5>>;
消費者からの入金がない場合(・・・・|)は、通販会社は消費者に対して督促状を送ります。督促状は情報の流れですので(−−−−>)となります。入金があるまで督促を繰り返す場合は<<消費者:5>>のところを<<消費者:2>>にすることでそれを表現します。
支払方法がカードの場合
支払方法がカードの場合を考えます。
<支払方法:カード>:
<<消費者:1>> |−−−−><通販会社:1>
<<信販会社:2>>/−−−−><通販会社:1>
<通販会社:1> |====><<消費者:3>>
<通販会社:1> |−−−−><<信販会社:4>>
<<消費者:5>> /・・・・><<信販会社:4>>
<<信販会社:4>>|・・・・><通販会社:6>;
流れを簡単に説明しますと、消費者から注文を受けた通販会社は、信販会社に消費者の与信情報を取りに行きます。与信がOKなら、通販会社は商品を出荷します。一緒に信販会社に売上情報を送信します。信販会社は、売上情報に基づき消費者の口座から代金を引き落とし、通販会社に代金を支払います。
ここでもし、信販会社が消費者の口座から代金を引き落としできない場合、どうなるかです。この場合も信販会社は通販会社に対してこの消費者の代金を振り込みます。(もちろん信販会社から消費者へ督促が行われるはずです)
つまりこうなります。
<支払方法:カード>:
<<消費者:1>> |−−−−><通販会社:1>
<<信販会社:2>>/−−−−><通販会社:1>
<通販会社:1> |====><<消費者:3>>
<通販会社:1> |−−−−><<信販会社:4>>
<<消費者:5>> /・・・・><<信販会社:4>>
<<消費者:5>> /・・・・|<<信販会社:4>>
<<信販会社:4>>||・・・・><通販会社:6>;
支払方法が自動振替の場合
自動振替とは、毎月の電話代であるとか、かかった分だけ、事前に登録した銀行あるいは郵便局の口座から毎月の決められた日に自動で引き落とされるものです。カードとの違いは、引き落としができないと、収納代行会社から通販会社に代金が支払われないと言うことです。
<支払方法:自動振替>:
<<消費者:1>> |−−−−><通販会社:1>
<通販会社:1> |====><<消費者:2>>
<通販会社:1> |−−−−><<収納会社:3>>
<<消費者:4>> /・・・・><<収納会社:3>>
<<消費者:4>> /・・・・|<<収納会社:5>>
<<収納会社:3>>|・・・・><通販会社:6>
<<収納会社:5>>|−−−−><通販会社:7>
<通販会社:7> |−−−−><<消費者:8>>;
ルールの拡張
更にルールの拡張と言う概念を説明します。
振込振替のルールをもう一度書きます。
<支払方法:振込振替>:
<<消費者:1>>|−−−−><通販会社:1>
<通販会社:1> |====><<消費者:2>>
<<消費者:2>>|・・・・><通販会社:3>
<<消費者:2>>|・・・・|<通販会社:4>
<通販会社:4> |−−−−><<消費者:5>>;
この<通販会社:1>をルールとして以下のように拡張します。
<通販会社:1>:
<通販会社:1> /====><<運送会社:1>>;
これは通販会社の倉庫に運送会社のトラックが荷物を取りに来ると言う意味です。これを振込振替のルールに反映させると、こうなります。
<支払方法:振込振替>:
<<消費者:1>> |−−−−><通販会社:1>
<通販会社:1> /====><<運送会社:1>>
<<運送会社:1>>|====><<消費者:2>>
<<消費者:2>> |・・・・><通販会社:3>
<<消費者:2>> |・・・・|<通販会社:4>
<通販会社:4> |−−−−><<消費者:5>>;
このルールの拡張には、拡張するルールと元のルールとの間のオブジェクトの識別子の扱い方法を規定する必要がありますが、これは後ほど検討します。
ここで注意しなければいけないのは、拡張されたルールは、拡張されればされるほど本質ではなくなると言うことです。どう言うことかと言えば、例えば、<通販会社:1>の拡張を上記の内容ではなく、以下のような拡張をしたとします。
<通販会社:1>:
<通販会社:1> |−−−−><<物流倉庫:1>>
<<物流倉庫:1>>/====><<運送会社:2>>;
そうすると元のルールは次のようになります。
<支払方法:振込振替>:
<<消費者:1>> |−−−−><通販会社:1>
<通販会社:1> |−−−−><<物流倉庫:1>>
<<物流倉庫:1>>/====><<運送会社:2>>
<<運送会社:2>>|====><<消費者:2>>
<<消費者:2>> |・・・・><通販会社:3>
<<消費者:2>> |・・・・|<通販会社:4>
<通販会社:4> |−−−−><<消費者:5>>;
つまりいくらでもバリエーションがあって、ルールを拡張すればするだけ本来の振込振替のルールの本質が見えなくなると言うことです。ただ、逆に具体的なアプリケーションの実装と言うことを考えれば、このルールの拡張が必須の作業であることも理解できるはずです。 KAI