• ベストアンサー

UML、クラス図について

くだらない質問かもしれません。 列車に、 1:普通車・グリーン車・寝台 2:喫煙・禁煙 という種類がある場合、これはクラス図でどう表現すればいいのでしょう。列車というクラスの属性値に、種類1、種類2というものを入れるにしても、種類1(普通車・グリーン車・寝台)といった要素の限定はどうやって記述すればいいのでしょうか。 また、列車を継承したクラスとして、普通車クラス・グリーン車クラス・寝台クラスをつくる等も考えたのですが、こういう書き方もありでしょうか? うまく説明できないのですが、UML初心者です。

質問者が選んだベストアンサー

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 UML以前の問題だろう。  UMLは、君が決めたクラス図を誰が見ても分かるように表現するためのものだ。列車という概念をクラスにするときにどう分けるかは君が決める事だ。  クラスだけを作ってもしょうがない。最終的にどんなシステムに組み込むクラスなのかが分からなければ、どちらが良いとは言えないな。  なので「~~~~を作ろうと思います。列車を表すクラスを作りたいのですが、AとBとどちらが良いでしょうか。」という質問ならありだろう。  何の情報も無い時点での話だが、私なら、喫煙・禁煙はクラスの変数にして、グリーン車など列車の種類は派生クラスにするな。  禁煙車と喫煙車が列車の「振る舞い」を継承するとは思えない。  例えば別に人間クラスがあったとして、列車クラスは乗る、降りるなどのメソッドを提供できると思うが、普通車やグリーン車はこのメソッドを継承するのに適していると思う。また、寝台車は乗る降りるを継承しさらに寝るというメソッドも追加できそうだ。

arcsin
質問者

お礼

ご解答ありがとうございます。 おっしゃるとおりですね… 間抜けな質問になってしまい、申し訳ありませんでしたm(_ _;)m >なので「~~~~を作ろうと思います。列車を表すクラスを作りたいのですが、AとBとどちらが良いでしょうか。」という質問ならありだろう。 これは、客が申込書を書いて、キップを購入するという(漠然とした)プログラムです。申込書には列車名や乗車駅、降車駅などを記入する欄が含まれ、その列車にはさきほど書いたグリーン車や、喫煙等の種類があります。申込書クラスの属性に列車名やグリーン車などの分類を書くのを大変かなと思い、列車というクラスを作ってそれからの話だけを取り出して質問してしまいました。 >何の情報も無い時点での話だが、私なら、喫煙・禁煙はクラスの変数にして、グリーン車など列車の種類は派生クラスにするな。 ・・・以下略 これも大変参考になりました。anmochiさんのアドバイスを踏まえ、もう少し考えてみようと思います。

その他の回答 (2)

回答No.3

> これは、客が申込書を書いて、キップを購入するという(漠然とした)プログラムです。申込書には列車名や乗車駅、降車駅などを記入する欄が含まれ、その列車にはさきほど書いたグリーン車や、喫煙等の種類があります。 ならばそれらは列車ではなく車両もしくは座席に付与される属性ではないかしら?

arcsin
質問者

お礼

>ならばそれらは列車ではなく車両もしくは座席に付与される属性ではないかしら? なるほど、そういう考えもあるんですね。 参考に致します。 ご回答ありがとうございました。

  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.2

オブジェクト指向の偉い人の書いた本を見ると 「クラスの作成には正解はない。 自分で考えろ」 と書いてあります。 私も、オブジェクト指向を人に教える立場の人間ですが、 「何が正解」かを判断することはできません。 正解はないのです。 その時々の事情によって、クラスの妥当性を判断するしかありません。 今回の問題については、 サブクラスにする方法と、 プロパティにする方法の、どっちも有りでしょう。

arcsin
質問者

お礼

>正解はないのです。 なるほど、たしかに言われてみるとその通りですよね。。 同じ処理をするシステムを作るにあたっても、星の数だけプログラムがあるというように、クラス図も人によって違うものができてしまうものなのですね。大変参考になりました。「答えが無い、自分で考える」というのは(わからない問題にぶつかったときはまっさきに答えを見てから理解する勉強をしてきたせいもあって)私のすごく苦手とすることなのですが、少しずつクラス図をはじめとするUMLに慣れていければと思います。 ご回答ありがとうございました。

関連するQ&A