研修で絶賛Java中でUMLを見ながらコーディングをするという演習をやっているのだけれども。
演習問題のUMLがひどすぎる。使用するデータのデータ型が間違っていたり、クラス図とシーケンス図・実行イメージからでは動作が予測できないメソッドの実装が求められていたり。なんじゃこりゃ、と思うような設計なわけで。
多分、これを作った本人はJavaとかオブジェクト指向云々について勘違いしているんじゃないかな、と思うのさ。クラス図の表記が間違っているのは言語以前の問題だけれども、どうして現実空間ではあり得ない挙動をプログラムでは求めているのやら。仕様について簡単に触れると、
-
キーボードから数字を入力する(購入する的な挙動)と、
-
消費者オブジェクトに数字が引き渡されて、
-
さらにその数字が店舗オブジェクトに引き渡されて、
-
それに相当する商品オブジェクトが返されて、
-
それを買い物カートオブジェクトに引き渡す
なんてところがあったのだけれども、この流れのどこかで、『与えられた数字に対応する商品オブジェクトが存在するのか』という判断が必要になるのだけれども、初期使用だと消費者オブジェクトが在庫の有無をはんだんしているわけだけれども、これはオブジェクト指向として間違っているよね、と考えるわけさ。
だって消費者オブジェクトはキーボードの入力=購入をするわけであって、在庫確認をしているわけではないでしょ。購入をしようとしているのに、商品オブジェクトをフェッチするよりも前に在庫がないという返答はおかしいのではと。つまり、購入したいという振る舞いの消費者オブジェクトに対して、在庫の有無を判断するのは店舗オブジェクトでなければ現実空間との矛盾が発生する、というわけさ。すくなくとも消費者オブジェクトが『その商品は存在するか』を考えなくてもよいようにするのがただしいのではないかな?
オブジェクト指向と言えばカプセル化に多様性などなどがあるわけだけれども、それ以外にも、現実空間での挙動に近づけるようにするなんてのも含まれていた気がするのだけれども、それはどうなんだろう? これはまさか値の認識が間違っているのかな?
[0回]