• 締切済み

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

annyg2の回答

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

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

関連するQ&A

  • インターフェイスと抽象クラス

    なかなか理解が難しくて苦しんでいます。 で自分なりに理解したのですが、 抽象クラス→内容に決まっているメソッドと決まっていないメソッドがある場合に決まっていないメソッドを あとからオーバーライドするだけでスーパークラスで定義したすべてのメソッドを利用できる。 これでただしいでしょうか? で、インターフェイスなのですが、この抽象クラスとそっくりなんですが、 (1)変数は定数になる(強制static)(2)メソッドは名前のみの宣言(内容は記述できない) と言うことで、かなり???なのです。 何のために・・・???記述するんでしょうか?? ただひとつメリットがあるとしたら、インターフェイスを実装すると、インターフェイスの配列でインスタンスを 生成出来るということぐらいでしょうか。 そこでちょっとお門違いの疑問かもしれないんですが、 Runnable、やMouselistenerはメソッドの内容が書かれていないのに、 なぜ機能を持たせることが出来るのでしょう??? 認識違い、間違い等ありましたら、教えてください よろしくお願いいたします。

    • ベストアンサー
    • Java
  • 別クラスからのスレッド停止のさせ方について

    親クラス サブクラスA サブクラスB サブクラスD とあって、サブクラスDからA,Bで実行中のスレッドを止めてやりたいのですが、どのようにすればいいでしょうか?

  • クラス間の変数について

    よろしくお願いします。 VC++のウィザードが自動生成するChildFrm.cpp内のクラスAとMainFrm.cpp内のクラスBの間で共通の変数int xxxを使いたいのですが、どこに宣言すれば良いのでしょうか? それともクラス間では、そのようなことは出来ないのでしょうか? ご存知の方教えてください。

  • 「インタフェースを実装してそれが持つ抽象メソッドをオーバーライドする」

    「インタフェースを実装してそれが持つ抽象メソッドをオーバーライドする」は正しい? はじめまして。Javaのインタフェースに関する質問です。 私はこれまで、インタフェースを使うときは、インタフェースを実装してクラスを宣言し、そのクラス、またはサブクラスでインタフェースがもつすべての抽象メソッドを定義する、と理解していました。 しかし、下の例をみてください。抽象メソッドの定義を、インタフェースの実装の以前で与えています。問題無くコンパイルでき、実行できます。実行結果も以下の通りです。 インタフェースの抽象メソッドへの定義の与え方やその実行のされ方は、メソッドのオーバーライドと同様と思っていましたので、下記のコードでは「クラスBが抽象クラスではありません」や、「インタフェースの抽象メソッドがオーバーライドされていません」などの文法エラーがでると思っていました。 そこで、質問です。 インタフェースが持つ抽象メソッドの定義を与える場所について、または、これに関する説明のあるページなど、何かご存知でしたら教えてください。 ★コード★ interface X{   void show(); } class A{   public void show(){     System.out.println("A");   } } class B extends A implements X{ } public class Main{   public static void main(String[] args){     X x=new B();     x.show();   } } ★実行結果★ >java Main A ★Java環境★ java 1.6.0_21 javac 1.6.0_16

    • ベストアンサー
    • Java
  • スーパークラスのコンストラクタの呼び出し

    こんにちは。 スーパークラスに引数のあるコンストラクタと引数のないコンストラクタをサブクラスで継承する際の質問です。 具体的に書くと下記になります。 class A { A () {} A (int i) {} } class B extends A { } 何がわからないかというと 『スーパークラスのA()は、サブクラスのBでわざわざ明示的にスーパークラスのコンストラクタ呼び出しをしなくても問題ないというのはわかるのですが、なぜスーパークラスのA(int)は、呼び出さなくても良いのかということです。』 もしかしたら基礎中の基礎かもしれませんが、ご教授よろしくお願いいたします。

    • ベストアンサー
    • Java
  • templateメソッドパターンで抽象メソッドを定義する意義

    こんにちは。 テンプレートメソッドパターンで、例えば、 class oge { abstract function a(); abstract function b($param); final function tempMethod() { $this->a(); $this->b($param); } } とした場合、抽象メソッドの定義は意味があるのでしょうか? なぜなら、tempMethod()中でa()もb($param)も呼び出してますんで、 わざわざ抽象メソッドとして定義しなくてもサブクラスで実装しないとどっちみち動きません。 抽象メソッドの定義の意義を教えてください。

    • 締切済み
    • PHP
  • 親クラスのポインタ、クラスを指定しないポインタ

    親クラス A (抽象メソッドX、Yの2つを持つ) と 子クラス B-1 (親はA、抽象メソッドX、Y、Zの3つを持つ) 子クラス B-2 (親はA、抽象メソッドX、Y、Wの3つを持つ) のように、子クラスでポリモーフィズムを実現しているとき、 クラスC   「実行時に、iniファイルに(1)と書かれていたら、B-1のクラスで実体化し、   iniファイルに(2)と書かれていたら、B-2のクラスで実体化する」  というクラスを作りたいです。 //////////////////////////////////////////////////////////////// 質問(1) その際、クラスCは、どうやってもZのメソッドや、Wのメソッドは書けない認識です。 (メソッド名もiniファイルから取るようにすれば別でしょうが。) この認識であっていますでしょうか? 質問(2) 逆に、XとYについては、それぞれ挙動の違う処理を行わせることができる認識です。 (クラスCで、親クラスAのポインタ型の変数を用意しておき、  そのポインタに、DLLのインスタンス化したものをいれておけば、  メソッドXとYについては実行可能という認識です)

  • クラスのメモリ管理でこんがらがっています

    以下の条件があります。 (1)あるメンバ関数Aが、ライブラリの関数Bを呼ぶ (2)AがBを呼ぶ前に、AはBが使うオブジェクトCを生成する (3)AはBから応答が帰ってきた後、Cを削除する (4)AはCの詳細を知らないので、前方参照を使ってCのポインタを作ってそれを引数で渡す (5)BはAから渡されたCに、いろんなデータをつめていって、最後はAにCを引数で返す (6)Bが知っているCの構造は、一つのクラスにたくさんのクラスが集約されているもの この場合、Cのメモリ管理はAが行うことになると思いますが、実際にCに集約されているたくさんのクラスを生成するのは、Bになります。BがAにCを返すときに、Bが生成したたくさんのクラスは、Bの中できちんと消滅させなければいけないのでしょうか?でもそうすると、肝心のCの中身(データ)が消えてしまうので、意味が無いようにも思えます。それとも、Bではたくさんのクラスを生成しっぱなしでもよくて、Aが最後にきちんと全部消去してしまえばよいのでしょうか?でもそれだと、AはCの構造を知らないので、きちんと消去できない気がします。 こんな感じで、こんがらがっているのですが、どなたか問題なく動作させる方法を教えて下さい。結局、「たくさんのクラス」たちは、Bで消すべきか、Aで消すべきか、どちらでも大丈夫なのか、また、「たくさんのクラス」の中では、Aで消すものも、Bで消すものもあってよいのでしょうか?(実際には、Bの中だけで使用するクラスもあるので、そういうクラスはできればBで消去したいです)

  • 現在のクラスを生成したクラスに渡したい

    親クラスで生成した子クラス(ダイアログ)から親クラス(ダイアログ)の関数などを使えるようにしたいと思っております。 ちなみに継承クラスで親クラスの関数を使うのではなく、親クラスそのもの(ダイアログ表示)を子クラスから変更できるようにしたいです。 (簡単になりますが…)プログラムの構成は以下のようになっており、thisポインタを渡すか所でエラーが起こってしまいます。 ------------------------------------------------ class AAA { BBB *b; void classBBB{ b = new BBB(this); // こういうことがしたいが、できない void fun( int a ); // ダイアログの表示が変更する(予定) }; class BBB { AAA *a; BBB(AAA *pDlg){ a==pDlg; } void fun(){ int b; a->fun(b); } // 親クラスの関数を呼び出したい }; ------------------------------------------------ ただし、class Aとclass Bを生成する上位階層のプログラム構築をすることはなしとします。 ------------------------------------------------ こんな感じ AAA *a = new AAA(); BBB *b = new BBB(a); ------------------------------------------------ どうしてもclass AAAからclass BBB呼び出したいと思ってます。 何か良い解決法があれば、教えていただきたいです。 宜しくお願い致します。

  • javaで、オブジェクトを生成しないとメソッドは使えないんですか?

    javaで、オブジェクトを生成しないとメソッドは使えないんですか? そのように習ったのですが、サブクラスのメソッド定義の中で、オブジェクトを生成せずにスーパークラスのメソッドを使える例(下に簡単に書きました)をみて、分からなくなってしまいました。 おしえてください、よろしくおねがいします。 ------------------------------- class superclass { method_a(){ ~~~~ } } --------------------------- class subclass { method_b(){ super.method_a(); }

    • ベストアンサー
    • Java