Javaクラスのモデリング
このOBEチュートリアルでは、JDeveloperを使用してシステム
の不可欠な情報要件を捉えるためのダイアグラム作成方法を説明します。
このチュートリアルの内容は次のとおりです。
45分
このアイコンの上にカーソル
を置くと、すべてのスクリーンショットが表示されます。
各手順に関連するスクリーンショットのみを表示する場合は、それぞれの手順のアイコンの上にカーソルを置いてください。
モデリングにより、システムの構造、プロパティおよび動作に関する情報を
捉えることができます。
クラス図は、システムを構成するインタフェースとクラス、およびインタフェースとクラス間の対応付け、実装および一般化を視覚化します。
ダイアグラムの要素は、UML表記法を使用して表現します。
このチュートリアルでは、システムの基本データ要件をモデリングした
Javaクラスの形式で捉えるためのダイアグラム 作成方法を学びます。
また、既存のクラスを追加してダイアグラムを拡張する方法も学びます。
JDeveloperはダイアグラムの各要素を基盤となるJavaコードと自動的に同期化するため、モデリングを使用して視覚的にシステムを設計できま
す。
作成するダイアグラムは、次のようになります。
トピック・リス
トに戻る
注文入力システムの一部を管理するJavaアプリケーションを設計し、そ
の設計を必要なJavaクラスのクラス図として提示することが求められました。 既存のJavaクラスを設計に組み込む必要もあります。
トピック・リス
トに戻る
このレッスンを始める前に、次のことを実行しておく必要があります。
Oracle JDeveloper 10g のインス
トール
トピック・リス
トに戻る
このトピックでは、JDeveloperからJavaダイアグラムを作成
する手順を説明します。 まずワークスペースと作業のプロジェクトを作成し、次に、Javaダイアグラムとダイアグラム要素を作成します。
1.
新しいワークスペースに、新しい空のプロジェク
トを作成します。
アプリケーション・ナビゲータで、「アプ
リケーション 」を右クリックし、コンテキスト・メニューから「新規 」を選択します。
「カテゴリ 」リストから「General 」
を、「項目 」リストから「ワークスペース 」を選択して、「OK 」をクリックします。
「ワークスペース作成」ダイアログ・ボックスで、ワークスペースにClassModeling と名前を付けます。 「新規の空プロ
ジェクトを追加 」がチェックされていることを確認し、「OK 」をクリックします。
「プロジェクトの作成」ダイアログ・ボックスで、プロジェクトにOrderEntry と
名前を付け、「OK 」をクリックします。
2.
ダイアグラムの色とフォントをオプションで選択できます。 メイン・メニューで「ツール 」
→「設定 」を選択して「設定」ダイアログ・ボックスを開き、次に「ダイアグラム 」→「ダイアグラム 」→「Java
クラス 」→「Java Class 」ツリー構造を開きます。
ここでダイアグラム要素のデフォルトのフォントと色の設定を選択できます。 終了後、「OK 」をクリックします。
この例では、Javaクラスの表示を薄紫色に変更します。
3.
ナビゲータで「OrderEntry 」を選択し、メニューから「ファイル 」
→「新規 」を選択してクラス図を作成します。
「新規ギャラリ」ページの「カテゴリ 」ペインで「General 」
→「Diagrams 」を、「項目 」ペインで「Java Class Diagram 」を選択します。 「OK 」
をクリックします。
4.
「Java Class Diagramの作成」ダイアログ・ボックスで、「名前」をOEClassDiagram に、
パッケージ名をorderEntry に変更します。
5.
コンポーネント・パレットはアイコンのみ表示するか、アイコンと記述を表示するかを選択できま
す。 コンポーネント・パレットのコンテキスト・メニューから「アイコンで表示 」か「一覧で表示 」を選択すると切り替えられ
ます。
6.
「構造」ペインに、クラス図のコンテンツに関する情報が表示されます。
ダイアグラムにあるクラスの数や名前を素速く確認したい場合などに便利です。
「構造」ペインを使用すると、ダイアグラムへの要素の作成後に、特定の要素を中心にしたダイアグ
ラム表示することもできます。 ダイアグラムの「構造」ペインにある要素を右クリックして、コンテキスト・メニューから「ダイアグラムでこの要素を
検索 」を選択します。
トピック・リス
トに戻る
このセクションでは、コンポーネント・パレットを使用してダ
イアグラムを構築し、新しいJavaインタフェースとクラスをダイアグラムに作成します。 これらの要素をモデリングするために、次の手順を実行します。
1.
コンポーネント・パレットのドロップダウン・リストから「Java」を選択します。
2.
次に、クラス図にインタフェースをモデリングします。 コンポーネント・パレットの「Java
Interface」アイコン をクリックして選択し、クラス図の左上をクリックします。
ダイアグラム要素は、作成するとデフォルト・サイズで表示されます。
サイズを変更するには、オブジェクトをクリックしてハンドルの1つをドラッグします。
位置を移動するには、選択した要素をクリックし新しい位置にドラッグします。
3.
インタフェース名としてOrderObservable と入力し、[Enter ]
を押します。
ダイアグラムにインタフェースを作成すると、.java ファイルが自動的に作成されます。
ダイアグラム要素と.java ファイルは異なる表示形
式の同一のオブジェクトであるため、作業は同期します。
クラス図で作業する場合は、クラスなどのダイアグラム要素に省略記号(...)が表示される場合
があります。 これは、要素サイズが小さすぎることにより表示されていない情報があることを意味します。
この情報を表示するには、要素をサイズ変更します。
4.
次に、このインタフェースの操作を作成します。
カーソルをインタフェースの操作コンパートメント(2番目の横線の下)に移動しクリックします。 選択された領域で、observeOrder と
入力し、[Enter ]を押します。
5.
「Java Class」アイコン 、クラス図の
OrderObservableインタフェースの下を順にクリックし、ダイアグラムにクラスをモデリングします。
クラス名としてOrder と入力します。 属性orderRef とcustomerContact を
属性コンパートメント(1番目の線の下)に、操作doInvoice とdoShip を操作コンパートメント(2番目の線の
下)に追加します。
6.
JavaクラスMyOrder を、前のクラスと同じ方法でモデリングします。
MyOrderクラスをOrderクラスの右に少しだけ間隔をあけて配置します。
モデリングされたJavaクラスに属性や操作を追加する方法として、クラスをダブルクリックして
属性をコード・エディタに入力することもできます。
クラス図でMyOrderクラスをダブルクリックします。 コード・エディタの最下部にある「ク
ラス 」タブをクリックしてから、最上部の「メソッド 」タブを選択します。
「追加」ボタン をクリックし、「メソッド設定」ダイ
アログ・ボックスにメソッドoverrideMethod を入力します。 「スコープ」のドロップダウン・リストから「public 」
を選択し「OK 」をクリックします。
クリックしてクラス図に戻ると、ダイアグラムのMyOrderクラスがコード・エディタで行った
変更と同期していることを確認できます。 MyOrderクラスは、overrideMethod操作を示しています。
7.
同様に、次のインタフェースとクラスをorderEntryパッケージとしてダイアグラムに追加
し、下図のとおりに配置します(表示されている属性や操作をオプションで追加することもできます)。
型
名前
属性
操作
インタフェース
OrderListener
+ orderChanged(): int
クラス
OrderEntrySystem
クラス
OrderState
+ getNextState():
OrderState
getStateLocalizedName(Locale local)
- fetchInternalStateDetails(): Object
インタフェース
OrderFactory
+ OrderEntry(int
type): Order
クラス
BusinessOrderFactory
クラス
HomeOrderFactory
8.
「OrderState 」クラスをダブルクリックしてエディタで開きます。 「ソー
ス 」タブをクリックします。 1行目のすぐ後に次のコードがない場合、これを追加します。
import
java.util.Locale;
9 .
アプリケーション・ナビゲータで「OrderEntry 」プロジェクトを右クリッ
クし、コンテキスト・メニューから「メイク 」を選択します。 プロジェクトがコンパイルされます。
トピック・リス
トに戻る
注文入力システムを構成するインタフェースとクラスを表示す
る基本モデルが作成されました。次に、インタフェースとクラスの相互関連付けを定義する要素を追加します。
リレーションシップと対応付けをモデリングするには、次の手順を実行します。
1.
OrderとOrderObservableとの間に実装の関係をモデリングします。
「コンポーネント・パレット」で、「Implements 」アイコン をクリックします。次に、ダイアグラムで「Order 」
クラス、「OrderObservable 」インタフェースを順にクリックします。
このインタフェースを追加した後に、Order.java ファ
イルを確認すると、コードが変更されて
いることが分かります。 アプリケーション・ナビゲータで「Order.java 」
をダブルクリックして、コード・エディタを開き変更を確認します。
2.
OrderとMyOrderとの間に拡張の関係をモデリングします。 「Extends 」
アイコン を
クリックします。次に、「MyOrder 」、「Order 」と順にクリックします。
2つのクラス間に線を描く際に、曲げたい位置でクリックすると線を曲げて描くことができます。
3.
OrderEntrySystemをOrderに関連付けます。 「Directed
1 to 1 Association 」アイコン をクリックします。次に「OrderEntrySystem 」、「Order 」と順にクリックしま
す。
4.
OrderとOrderListenerの間の弱い集約の関連をモデリングします。
弱い集約の関連のアイコンはありませんが、JDeveloperでは事前定義された関連を使用して関連プロパティを変更することができるため、必要に応じ
て集約単位または多重度を変更できます。
「Directed 1 to 1 Association 」アイコン をクリックしま
す。次に、「Order 」、「OrderListener 」と順にクリックします。
ダイアグラムで関連をダブルクリックし、「アソシエーション・プロパティ」ダイアログ・ボックス
を表示します。 「集約」ドロップダウン・リストから「集約(弱い) 」を選択し、「OK 」をクリックします。
これで関連の始点が弱い集約として定義されます。
注意 :
ダイアグラム要素の「アソシエーション・プロパティ」ダイアログ・ボックスは、ダイアグラムで対応付けを右クリックし、コンテキスト・メニューから「プ
ロパティ 」を選択して表示することもできます。
5.
HomeOrderFactory とOrderFactory 、お
よびBusinessOrderFactory とOrderFactory の間に実装 の関係をモデリングしま
す。
6.
OrderEntrySystem とOrderFactory との
間にDirected 1 to * Association をモデリングします。
図のように線を曲げるには、最初に「OrderEntrySystem」をクリックし、次に曲げる位置、
「OrderFactory」の順にクリックします。
7.
「Dependency 」アイコン を使用し、OrderFactory とMyOrder 間
の依存関係をモデリングします。 任意で依存関係のデフォルト・ラベルに別の値を上書きすると、より分かりやすい名前に変更できます。
8.
ダイアグラムや任意の要素には、注を付けることができます。 「Note 」アイコ
ン をクリック
し、ダイアグラムをクリックして注を作成します。この注に、OrderFactoryがMyOrderを作成することを記述します。 「Attach 」
アイコン を
クリックして依存関係に注を付けます。まず注をクリックし、次に依存関係をクリックします。
9.
アプリケーション・ナビゲータで「OrderEntry 」プロジェクトを右クリッ
クし、コンテキスト・メニューから「メイク 」を選択して、プロジェクトのコンパイルを試行します。
ログ・ウィンドウには次のコンパイル・エラーが表示されます。
Error(3,8):
class orderEntry.BusinessOrderFactory should be declared abstract; it
does not define method OrderEntry(int) in interface
orderEntry.OrderFactory
実装するインタフェースのメソッドでクラスに定義されていないものがあるため、これらのエラーが
生じます。
10.
エラーを修正するには、OrderFactory インタフェースのOrderEntry メ
ソッド・ラインをクリックします。再度クリックしてメソッドを選択します。 [Ctrl-C] を押してメソッドをクリップボードにコピー
します。 HomeOrderFactory クラスのメソッド・ラインをクリックします。再度クリックしてデフォルトのメソッドを追加し
ます。 [Ctrl-V ]を押してOrderEntry メソッドを貼り付け、デフォルトのメソッドを上書きし、[Enter ]
を押します。
同様に、OrderEntry メソッドをBusinessOrderFactory ク
ラスに貼り付けます。
11 .
OrderクラスにOrderObservableインタフェースのメソッドが定義されていない
という問題は、メソッドをコピーして貼り付ける以外の方法でも解決できます。
クラス図で「Order 」クラスを選択し、メニューから「ツール 」
→「インタフェースの実装 」を選択します。
「インタフェースの実装」ダイアログ・ボックスの「使用可能なインタフェース 」領
域で、「orderEntry 」パッケージを開いて「OrderObservable 」を選択します。 「OK 」
をクリックします。 OrderクラスにobserveOrderメソッドが追加されます。
12.
前述の手順9を終えたら、再度プロジェクト
のコンパイルを試行します。 ここではプロジェクトが適切にコンパイルされます。
トピック・リス
トに戻る
JDeveloperのクラス図では、インナー・クラスをモ
デリングすることもできます。 インナー・クラスをモデリングするには、次の手順を実行します。
1.
「OrderState 」を右クリックして「表示モード 」→「拡
張済 」を選択します。
2.
拡張されたOrderStateクラス内に、JavaクラスCleared 、Packed 、Shipped お
よびInvoiced をモデリングします。 これらのクラスは、OrderStateのインナー・クラスとして作成します。
(これはインナー・クラスの一般的使用法ではありませんが、インナー・クラスをクラス図に作成する方法として示します。)
3.
アプリケーション・ナビゲータでファイル名をダブルクリックして、OrderState.java をコード・エディタで開
きます。 4つのインナー・クラスのコードが自動的に追加されたことが確認できます。
4.
「Directed Strong Aggregation 」アイコ
ンをクリックします。次に「Order 」、「OrderState 」と順にクリックして強い集約の関連をモデリングします。
5.
関連をダブルクリックします。 「アソシエーション・プロパティ」ダイアログ・ボックスの「多
重度 」ドロップダウン・リストから「1 」を選択します。 「OK 」をクリックします。
トピック・リス
トに戻る
このタスクでは既存のクラスとパッケージをプロジェクトに追
加し、次にこれらをダイアグラムに追加してダイアグラムを拡張する方法を学びます。
既存のクラスをモデリングする機能により、既存のシステムのダイアグラムを作成したり、既存のクラスを新しいシステム設計にマージすることができます。
クラス・モデルを拡張するには、次の手順を実行します。
1.
「ナビゲータ」ペインでプロジェクト・ノードを右クリックし「新規 」を選択し、次
に「新規ギャラリ」の「General 」カテゴリから「Javaクラス 」を選択します。 「OK 」をクリック
します。
2.
クラスの「名前 」にOrderItem と入力します。 「パッ
ケージ 」にorderEntry と入力します。
「デフォルトのコンストラクタを生成 」チェック・ボックスのチェックを外します。
「OK 」をクリックします。
コード・エディタに新しいOrderItemクラスが開きます。
3.
ツールバーの「保存」アイコン をクリックするか、「ファイル 」→
「保存 」を選択してOrderItem.java へ
の変更を保存します。
4.
エディタ・ウィンドウ最上部のタブにあるダイアグラム名をクリックします。
アプリケーション・ナビゲータからOrderItem クラスをドラッグし、ダイアグラムにドロップします。
5.
Order とOrderItem の間の強い集約の関連をモデリング
します。
6.
Order.java の
Javaソース・コードで表示される変更を確認します。
7.
「ナビゲータ」ペインでプロジェクト・ノードを右クリックして「新規 」を選択し、
次に「新規ギャラリ」の「General 」カテゴリから「Javaクラス 」を選択します。 「OK 」をクリッ
クします。
8.
クラスの「名前 」をReport1 と入力します。 「パッ
ケージ 」をmonthEnd と入力します。
「デフォルトのコンストラクタを生成 」チェック・ボックスのチェックを外します。
「OK 」をクリックします。
コード・エディタに新しいReport1クラスが開きます。
9.
同様に、Report2 クラスをmonthEnd パッケージに作成
します。
10.
ダイアグラマの「OEClassDiagram 」タブをクリックします。
アプリケーション・ナビゲータから、monthEnd パッケージをクラス図にドラッグします。
11.
ダイアグラム内のmonthEnd パッケージを右クリックし、コンテキスト・メ
ニューから「ドリルダウン 」選択して、パッケージの内容を表示します。
monthEndパッケージのクラス図が開きます。
12.
すでにダイアグラム上にあるクラスに関連する既存のクラスを追加できます。
これを図に示すため、ダイアグラムの「OEClassDiagram 」をクリックします。 ダイアグラムで「MyOrder 」
クラスを選択し、[Delete ]を押します。
MyOrderクラスはダイアグラムから削除されますが、MyOrder.java ファイルはアプリケーション・ナビゲー
タに残ります。
13.
Orderクラスは、継承によってMyOrderクラスに関連付けられます。 ダイアグラムで「Order 」
クラスを右クリックし、コンテキスト・メニューから「表示w 」→「関連する要素 」を選択します。
MyOrderクラスがダイアグラムに追加され、ダイアグラム上にあるOrderに関連するすべ
ての要素が強調表示されます。 MyOrder要素をダイアグラム上の前の位置に移動できます。
注意 :
クラスがプロジェクトのソース・パスからダイアグラムに追加されると、それらのクラスがすでに現在のプロジェクトに組み込まれていない場合、自動的に追加
されます。
トピック・リス
トに戻る
クラス図のサイズが増し、複雑化すると、読取りや管理が難し
くなる場合があります。 この最後のタスクでは、クラス図のレイアウトを変更する方法を示します。
ダイアグラムのレイアウトを変更するには、次の手順を実行し
ます。
1.
OEClassDiagramで空白の部分を右クリックし、コンテキスト・メニューから「図
形をレイアウト 」→「階層(上から下) 」を選択します。
ダイアグラム要素は継承構造に基づいたトップダウン階層でレイアウトされ、他のコネクタは定義さ
れた方向でレイアウトされます。 ノード間のコネクタは、最も直接的なルートでレイアウトされます。
この例で示すmonthEndパッケージなど他のノードに接続されていないダイアグラム上のノードは、グリッド・レイアウトで表示されます。
2.
エディタの右下隅の「ズーム・アウト 」ツール をクリックして、スクロールせずにダイアグラムのより広い部分を表示します。
「図形をレイアウト」の他の型を試す場合、前述のようにダイアグラム全体
に適用したり、選択した要素のみに適用することもできます。
トピック・リス
トに戻る
このレッスンでは、新しいJavaクラス図を作成し、Javaクラスとイ
ンタフェース、およびその関連をモデリングする方法を学びました。 次のタスクを行いました。
Java クラス図の作成
コンポーネント・パレットを使用した新しいJavaインタフェースとクラスのクラス図への作成
属性と操作のクラス図への直接追加
ダイアグラムでの変更とJavaコードの自動的な同期の確認
コンポーネント・パレットを使用したインタフェースとクラスのリレーションシップと対応付けのク
ラス図への作成
対応付けのプロパティの変更による集約度と多重性の変更
注の追加と依存関係への貼り付け
クラスのビューの拡張およびコンポーネント・パレットを使用したクラス内へのJavaクラス作成
によるインナー・クラスの作成
既存のクラスとパッケージのダイアグラムへの追加
クラス図のレイアウトの変更
このアイコンの上にカーソルを置くと、すべてのスクリーンショットが非表示になります。