• 締切済み

UMLモデリング:抽象クラスを導入すべきかどうか

オブジェクト指向設計に詳しい方,UMTP L3合格者の方,下記のような状況でクラスA1とクラスA2に抽象クラスAを導入するべきかしないべきかについて教えてください。 1 A1とA2に共通の属性は少ない。 2 ある抽象クラスBのサブクラスB1がA1に対する関連を持ち,B2がA2に対する関連を持つ。  また,これらの関連のロール名は同じ。 3 他の複数のクラスがサブクラスA1またはA2に対して関連を持っている。 1に関して:共通化できる箇所が少ないので抽象クラスを導入するメリットはないと思います。 2に関して:抽象クラスを導入することで,A1→B1とA2→B2の関連をA→Bの関連に纏められます。 3に関して:個々のサブクラスを意識する必要があるので抽象クラスを導入するメリットはないと思います。 抽象クラスを導入するメリットは,2に記載の関連を纏められるという点だけだと思いますが,まとめて良いかどうか疑問に思っています。A1->B2やA2->B1が許されないので,A->Bに纏めてしまうとモデルの意味が曖昧になりますし,コンパイル段階でA1->B2のような不正な組み合わせを検出できなくなります。しかし,Factoryとかを使って正しい組み合わせだけが生成されるようにすればよいので纏めるべきでしょうか。ロール名が同じなので,生成時だけ気をつければ同じ型で扱える方が良いようにも思います。 ちなみにこれはUMTP L3で出題された問題なのですが,細かい条件が提示されてなくて,Factoryの使用を前提にしてよいかは記載されていませんでした。記載がないということは前提にしない方が良いといことだと理解しています。 A1とA2はBから同じロール名で誘導されるという点を除けば,A1とA2は違う概念を表していると思います。A1とA2を独立したクラスにしておくべきか,抽象クラスで纏めるべきか教えてください。 宜しくお願いします。

みんなの回答

  • annyg2
  • ベストアンサー率50% (8/16)
回答No.1

すみません、回答じゃないです。 UMTPってこんな問題が出るんですか。信じられないですねー。 こんなのケースバイケースに決まってるじゃないですか。ねぇ? 少なくとも、この問題には「正解」はないと思いますし、そういう問題を出さないでほしいですよね。 まだ、A1、A2とかじゃなくて、営業部員、技術部員、とかだったら見当もつきますが。 個人的な感想として言うなら、 ロール名が同じだということは、A1とA2はかなり似ているクラスのはずです。 にもかかわらず、共通の属性が少ない。 (この時点で出題自体がなんかおかしい気がするんですが、それはそれとして) であれば、という前提に立てば、共通の抽象クラスは作りません。 ロール名が同じなのは「たまたまである」という推測です。 お役に立ちましたでしょうか。 立ちませんよね。 すみませんでした。