• ベストアンサー

UMLの関連・依存

現在UMLの勉強をしてます。 JAVAの時に使用するつもりでいます。 質問は2つあります。 1つ目は 依存の説明は、引数・ローカル変数・グローバル変数として参照する時とありました。 グローバル変数というのは、メソッド内で、別クラスの静的なメソッド等の呼び出しのことでしょうか? 2つ目は 実装段階でクラス図を描く時に、メソッド内の一時的な参照は実現にして、フィールドは集約とコンポジションで表すことができると思います。 なので、関連は実装段階では必要ないと思うのですがこれで合ってるでしょうか?

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

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.1

> 1つ目は > 依存の説明は、引数・ローカル変数・グローバル変数として参照する時とありました。 > グローバル変数というのは、メソッド内で、別クラスの静的なメソッド等の呼び出しのことでしょうか? Javaでは厳密な意味でのグローバル変数はありませんが、publicで静的(static)なフィールドはどこからで参照できますのでグローバル変数に該当するものと言って良いでしょう。 その説明では、引数やローカル変数として宣言したもの以外を指しているようですので、別クラスのフィールドを参照すること全般に該当するでしょう。同一パッケージ内では、protectedやデフォルトの可視性でもアクセスできますが、それなども含まれるかと。 場所は、フィールドの宣言部や初期化ブロックなど、メソッドでなくてもクラス内であれば依存性が生じます。 例) --------------------------------------------------------------- public class A { public static String hoge = "hoge"; } class B { String aaa = A.hoge; // フィールド宣言で依存 void name() { System.out.println(A.hoge); // メソッド内でも依存 } } ------------------------------------------------------------------- > 2つ目は > 実装段階でクラス図を描く時に、メソッド内の一時的な参照は実現にして、フィールドは集約とコンポジションで表すことができると思います。 > なので、関連は実装段階では必要ないと思うのですがこれで合ってるでしょうか? 集約とコンポジションは、関連の一種と考えられます。 ただし、集約の方は通常の関連との違いが分かりにくいので、可能であれば通常の関連として表した方が読者を混乱させなくて良いかもしれません。 http://capsctrl.que.jp/kdmsnr/wiki/bliki/?cmd=view&p=AggregationAndComposition&key=%A5%B3%A5%F3%A5%DD%A5%B8%A5%B7%A5%E7%A5%F3

関連するQ&A

  • インターフェイスの使い方がわかりません(初心者です)

    Javaを始めたばかりの初心者です。 「やさしいJava」を買って一通り学んだのですが、 インターフェイスの使い方がよくわからず、困っています。 インターフェイスを実装することでインターフェイスが持つメソッドがすべて定義されてることが保障される、 というのはわかるんですが、そのことがどうして有用なのでしょう? また、具体的にはスレッドを扱うときにRunnableインターフェイスを実装する理由がわかりません。 Threadクラスのオブジェクトを作成するときに、 Runnableを実装したクラスのオブジェクトの変数を 引数にしないといけないんですよね? このとき、Runnableインターフェイスが 「runメソッドが定義されていなければならない」 とだけいうものだったとしたら、 Runnableを実装してなくてもrunメソッドさえ定義してあれば 実行できそうな気がするんですが・・・

    • ベストアンサー
    • Java
  • サブクラス型オブジェクトをスーパークラス方に代入

    ある所で下記のような継承についての記述をみつけました。 ----------------------------------------------------------------------------- 継承の目的は、あるクラスで実装したメソッドなどの機能を利用して、 さらに実装を追加する差分コーディングです。 一つのクラスから複数のサブクラスを作ることも良くあります。 このような時、それらのサブクラス型オブジェクトの参照を代入できる変数として、 スーパークラス型変数を使うことがしばしばあります。 ----------------------------------------------------------------------------- サブクラス型オブジェクトの参照を代入できる変数として、 スーパークラス型変数を使うことがある、と いうのはどういった場合に使うのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Java
  • インターフェイス実装クラスの表示について

    /* インタフェースPlanetを実装したクラスEarth、Marsがあります。  以下の実行結果になるようにクラスAggregateへshowメソッドを  追加してください。 [実行結果] 地球 太陽系にある惑星の1つで、太陽から3番目に近い。・・・ 火星 太陽系の太陽に近い方から4番目の惑星である。・・・ */ // [Planet.java] // 実装したいPlanetクラス interface Planet {   public String getName();   public String getOutline(); } // Planetを実装したEarthクラス // [Earth.java] class Earth implements Planet {   private final String name="地球";   // getNameメソッド:戻り値String、引数無し   public String getName(){    return name;   }   // getOutlineメソッド:戻り値String、引数無し    public String getOutline(){      return "太陽系にある惑星の1つで、太陽から3番目に近い。・・・";    } } // Planetを実装したMarsクラス // [Mars.java] class Mars implements Planet {   private final String name="火星";   // getNameメソッド:戻り値String、引数無し   public String getName(){     return name;   }   // getOutlineメソッド:戻り値String、引数無し   public String getOutline(){     return "太陽系の太陽に近い方から4番目の惑星である。・・・";   } } // メインクラス // [Main.java] class Main{   public static void main(String[] args){   // Earth&Marsクラスのインスタンス化    Earth earth = new Earth();     Mars mars = new Mars();   // Aggregateクラスのインスタンス化   Aggregate aggregation = new Aggregate();   // showメソッド呼び出し:戻り値無し、引数earth・mars    aggregation.show(earth);    aggregation.show(mars); } } // [Aggregate.java] class Aggregate { // ここにshowメソッドを追加   public void show(Earth planet){     System.out.println();   }   public void show(Mars planet){     System.out.println();   }  } showメソッドに引数としてEarth planet,Mars planetを渡すというところまでは理解しています。後は星の名前と概要を表示するのですが、例えば、 showメソッド内 // ここにshowメソッドを追加 public void show(Earth planet){ String str = earth.getName(); System.out.println(str); } public void show(Mars planet){ String str2 = mars.getOutline(); System.out.println(str2); } } とすると、erathとmarsの部分が「シンボルがありません」のエラーになります。自分の認識としては、EarthクラスとMarsクラスでフィールド変数を宣言しているので使えるのでは?と思っていたのですが、全然違うようです。どなたかどちらかのコード例を表記して頂けないでしょうか?よろしくお願い致します。

    • ベストアンサー
    • Java
  • Javaのプログラミングにおいて、暗黙的にオブジェクトが生成される場合はどんな場合ですか?

    Javaアソシエイツの資格取得ため、勉強しています。詳しい解説を求めています。 ■問題 次のプログラムを実行すると、出力結果はどのようになりますか。1つ選択してください。 http://d.hatena.ne.jp/motoi20/20081210 ■解説 正解は選択肢Aです。func(s)では、変数sが参照しているStringオブジェクトを「func(Stirng s)」の引数sに渡しています。func()メソッドの処理で「s+"Hello"」という処理をしたとき、内部では暗黙的に新しいStringオブジェクトが生成されます(変数sに文字列を追加しているわけではありません。)func()メソッドの呼び出しが「s=func(s)」となっていた場合、main()メソッド内の変数sが新しくできたオブジェクトを参照するため、結果の出力は「JavaHello」になりますが、「func(s)」の呼び出しでは戻り値を再代入していないため、変数sは文字列「Java」を保持したオブジェクトを参照します。Stringクラスは読み取り専用オブジェクトであることに注意しましょう。 ■疑問 通常、オブジェクトを作成するのは、「new」を使って行うわけですよね?暗黙的にオブジェクトが生成されるのは、どういう場合でしょうか?読み取り専用オブジェクトだから何に気をつければいいのでしょうか?

  • メソッドの引数としてのthisの意味

    java初心者です。教えてください。 メソッドの引数としてのthisは何を表しているのですか? いろいろ調べてみてthisには以下の2つの使用法があることがわかりました。 1.インスタンス変数の名前とインスタンスメソッド内のローカル変数名がかぶったときに、メソッド内でインスタンス変数を表すときにthis.変数名とする。 2.あるクラスのコンストラクタ内で、同じクラスの別のコンストラクタを呼ぶときに使う。 しかし、引数としてのthisの意味がわかりません。 具体的には、addMouseListener(this);や、g.drawImage(img,10,10,this);のthisです。 後者の場合はオブジェクトgのインスタンスメソッドなので、thisはオブジェクトgへの参照を表しているのでしょうか?

    • ベストアンサー
    • Java
  • 変数とフィールドの使い分け

    Javaを勉強し始めて半年くらいの者です。最近、プログラムを作成する際に変数とフィールドの使い分けがあいまいになってきました。フィールドとして定義すれば、そのクラス全体で使う事が出来ますよね?しかし、これは変数として最初に適用範囲が全体になるように(要はメソッドの中とかではないところに)定義すればそのクラス全体で使う事が出来ますよね?そうすると、何を変数にして、何をフィールドにすれば良いかがこんがらがってしまうのです。極端な話。。そのクラスで使う変数を全てフィールドで定義してしまえば、変数なんていらないのではないでしょうか?逆に、フィールドをなくして、全て変数で定義することもできるのではないか等と考えてしまうのです。この2つの明確な違いはなんなのでしょうか?みなさんはどういう風に使い分けていますか?

    • ベストアンサー
    • Java
  • staticメソッドにするかどうかの判断

    staticメソッドの使いどころについて質問させてください。 まず、メソッドの内部で、そのメソッドが定義されているクラスのイ ンスタンス変数を使用している場合は、そのメソッドはインスタンス に依存するので、インスタンスメソッドにしかできないのはわかり ます。疑問なのは、「じゃあこのメソッド内でインスタンス変数を使 わないで引数で渡せるように作れば、インスタンスに依存しないの でstaticにしていいの?」(※)ということです。 さらにこうも思います。 なんとなくですが、※のようなことをしたらオブジェクト指向の意味 がない気がします。理由ははっきりわかりません。ほんとになんとなく です。(奇跡的にあたっていたとしても、理由を教えて下さいm(_ _)m) そして、さらに混乱するのが、ユーティリティの関数などでstaticメ ソッドになっているのを見ました。この場合はどうしてメソッドの引 数を指定するようにしていて、クラスのインスタンス変数を使うこと はしないのか。 以上、大変下手な文章ですが、混乱しているポイントが伝わったでし ょうか? よろしくお願いします。

  • 配列変数のlengthプロパティは、どうしてそのまま参照できるのですか?

    Javaの基礎を学んでいるのですが、ちょっと仕様に疑問があるのでお伺いしたいと思います。 昔、カプセル化について教わった事があったのですが、それによると、オブジェクトの持つ属性(プロパティ、フィールド)は、操作(振る舞い、メソッド)を介してアクセス出来るというのが望ましいはずです。 でも、例えばmainメソッドのコマンドライン引数であるargsという変数は、配列変数です。lengthというプロパティで要素の数を取り出せます。 lengthはプロパティであり、もちろんメソッドじゃないです。 どうしてわざわざこんな仕様になっているのでしょうか? J2SEのAPI仕様書が以下のURLにありましたので、ちょっと調べてみました。 http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/index.html それによると、Arrayクラスなどは、ちゃんとgetLengthメソッド等を使用しています。 何か理由があったのだと思うのですが、予想がつきません。 どなたかご存じないでしょうか?

  • javaのメソッドの引数で、クラスの配列を指定する

    javaのメソッドの引数で、クラスの配列を指定する事は可能なのでしょうか? 受け取るメソッドでは引数の所に何と書けば良いのでしょうか? 教えてください!

    • ベストアンサー
    • Java
  • System.out.print

    System.out.print()の outは Systemクラスのoutフィールドだそうです。 しかし、out.print(~)の形は意味がわかりません。 つまり、「フィールド.メソッド()」の意味がわからないのです。 普通は A a = new A(); とやって 「a.メソッド」つまり 「参照型変数.メソッド()」とやるはずです。 「フィールド.メソッド」の意味がよくわかりません。 よろしくお願いいたします。

専門家に質問してみよう