くだらない質問かもしれませんが・・・
まず特急列車などの指定席の予約などを行う簡易プログラムを作りたい時に、
例えば、
◇-- は集約の関連 を表すとして、
受付 ◇-- 時刻表 ◇-- 列車
という部分を持つクラス図を作ったとします。時刻表は列車の発車時刻などが書かれています。(例えばなので、これは集約にすべきじゃない!とかは無しの方向で)
これをソースに書き出してやる際に、
受付クラスは フィールドとして時刻表への参照配列をもち、時刻表クラスはフィールドとして列車への参照配列をもつとします。
時刻表 timetable[];
列車 train[]
それで、列車にあるメソッド(hogehoge())を受付のあるメソッドで使いたいというときに、おそらく、
this.timetable[x].train[y].hogehoge();
としますよね。
でも、複雑なクラス図になっていくにつれてもし使いたい場所とメソッドとの間が激しく離れている場合は、
aaa.bbb.ccc.ddd.eee.….zzz();
とかなっちゃいますよね。そうならないように設計しろと言われればそれまでなのですが、実際にクラス図→ソースの段階でこういうこと(設計ミス?)が起きてしまうことってよくあるのでしょうか?
また、この例であれば時刻表クラスに列車オブジェクトを取り出すような
Train getTrain()
とかいうメソッドを用意し、受付クラス中のメソッドで、
Train t = timetable.getTrain();
t.hogehoge();
等する方が一般的でしょうか?なにやらうまく説明できないですが、不明な点があればご指摘ください。
No.1ベストアンサー
- 回答日時:
図のような関連になる場合は,受付と列車が関連を持たないということが重要です.設計では関連を持つかどうかも重要ですが,関連を持たないかどうかも重要ですよね.なので,受付から列車を直接扱う必要がある場合は設計ミスということです.一応.
そもそも設計で考えるレベルと実装で考えるレベルが違うので(実装に近づくにつれて,より詳細になっていくもの),設計の時には気付かなかった関連が実装時に判明することは良くあることだと思います.そうかといって,良くあっては困るのですが・・・
クラス図が設計を表しているのか,それとも単に概念を表しているのかに注意する必要があると思います.実装する時は割り切ってソースコードを大切にして実装することもありでしょう.どんなに細かくクラス図を書いたところで動くわけじゃありません.
最終的に完成したソースコードを基にクラス図を生成して,設計にフィードバックして成果物とすることも大切です.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 別シートに毎回異なるデータをコピーする 7 2022/06/24 09:02
- iPhone(アイフォーン) AirPodsってGPS機能はなくて最後に接続してた場所で居場所を表示するみたいですが、列車に忘れた 2 2023/04/07 02:30
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- 心理学 急いでる時は間違いに気づかないのはなぜですか? 時間がなくて列車を取ったら1つ前を取ってて発車後でし 3 2023/05/26 20:32
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- 電車・路線・地下鉄 近鉄南大阪線&吉野線側の橿原神宮前駅に関しましての質問です 2 2022/11/05 20:47
- 電車・路線・地下鉄 品川駅の接続について 1 2022/05/14 10:50
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
下記のリストならno002が含まれ...
-
レコード件数の表示
-
String.containsの反対機能はあ...
-
readLine()ではじめから読み直...
-
Android 別javaファイルのメソ...
-
Java初級 引数に適用できません
-
abstract と static を一緒に付...
-
クラスを作るとメソッドの数が...
-
C# でメソッドに送られてきたOb...
-
C# の ByVal と ByRef について
-
なぜprotected overrideなのか
-
メソッド宣言の戻り値の型にク...
-
呼び元のファイル名、行数を取...
-
StringBufferからStringへキャ...
-
AWTでウィンドウを閉じる仕組み
-
VB.netでフォームを継承して新...
-
__interfaceに定義するメソッド...
-
C# 点の描き方をおしえてくだ...
-
Java初心者です。例外のキャッ...
-
JAVAコンパイルができない。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レコード件数の表示
-
Java初級 引数に適用できません
-
String.containsの反対機能はあ...
-
public static void main (Stri...
-
abstract と static を一緒に付...
-
Google Apps Script で getRang...
-
StringBufferからStringへキャ...
-
メソッド宣言の戻り値の型にク...
-
javaに"search"という関数 or ...
-
C# 点の描き方をおしえてくだ...
-
Java初心者です、エラーの意味...
-
なぜprotected overrideなのか
-
親の親のメソッドを呼ぶには?
-
C# でメソッドに送られてきたOb...
-
Javaの関数名が長い?
-
別クラスのmainメソッドの実行
-
[クラス名].[メソッド名].[メソ...
-
コマンドライン引数のチェック
-
contextってなんですか?
-
説明文書でのメソッド・変数の...
おすすめ情報