※ ChatGPTを利用し、要約された質問です(原文:クラス図→ソース)
クラス図からソースコードへの変換における設計ミスとは?
このQ&Aのポイント
クラス図からソースコードへの変換において、複雑なクラス図になると使いたいメソッドとの間が離れてしまうことがある
設計段階でクラス図からソースコードに変換する際に起きる設計ミスは一般的
一般的な解決策としては、メソッドを用意してオブジェクトを取り出す方法がある
くだらない質問かもしれませんが・・・
まず特急列車などの指定席の予約などを行う簡易プログラムを作りたい時に、
例えば、
◇-- は集約の関連 を表すとして、
受付 ◇-- 時刻表 ◇-- 列車
という部分を持つクラス図を作ったとします。時刻表は列車の発車時刻などが書かれています。(例えばなので、これは集約にすべきじゃない!とかは無しの方向で)
これをソースに書き出してやる際に、
受付クラスは フィールドとして時刻表への参照配列をもち、時刻表クラスはフィールドとして列車への参照配列をもつとします。
時刻表 timetable[];
列車 train[]
それで、列車にあるメソッド(hogehoge())を受付のあるメソッドで使いたいというときに、おそらく、
this.timetable[x].train[y].hogehoge();
としますよね。
でも、複雑なクラス図になっていくにつれてもし使いたい場所とメソッドとの間が激しく離れている場合は、
aaa.bbb.ccc.ddd.eee.….zzz();
とかなっちゃいますよね。そうならないように設計しろと言われればそれまでなのですが、実際にクラス図→ソースの段階でこういうこと(設計ミス?)が起きてしまうことってよくあるのでしょうか?
また、この例であれば時刻表クラスに列車オブジェクトを取り出すような
Train getTrain()
とかいうメソッドを用意し、受付クラス中のメソッドで、
Train t = timetable.getTrain();
t.hogehoge();
等する方が一般的でしょうか?なにやらうまく説明できないですが、不明な点があればご指摘ください。