SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

分析設計モデルをわがままに活用しよう
JUDE API入門

JUDE APIの概要と使い方

  • X ポスト
  • このエントリーをはてなブックマークに追加

サンプルプログラム2

ReadingPackagesAndClassess.java
  1  import com.change_vision.jude.api.inf.exception.ProjectLockedException;
  2  import com.change_vision.jude.api.inf.model.IAttribute;
  3  import com.change_vision.jude.api.inf.model.IClass;
  4  import com.change_vision.jude.api.inf.model.IModel;
  5  import com.change_vision.jude.api.inf.model.INamedElement;
  6  import com.change_vision.jude.api.inf.model.IOperation;
  7  import com.change_vision.jude.api.inf.model.IPackage;
  8  import com.change_vision.jude.api.inf.model.IParameter;
  9  import com.change_vision.jude.api.inf.project.ProjectAccessor;
 10  import com.change_vision.jude.api.inf.project.ProjectAccessorFactory;
 11  
 12  /**
 13   * APIでJUDEモデルのパッケージ情報およびクラス情報を取得するサンプルコード. 
 14   * パッケージ名やクラス名などをコンソールに出力する。
 15   */
 16  public class ReadingPackagesAndClasses {
 17  
 18      public static void main(String[] args) {
 19          try {
 20              System.out.println("Opening project...");
 21  
 22              ProjectAccessor prjAccessor = ProjectAccessorFactory.getProjectAccessor();
 23  
 24              // プロジェクトを開く。
 25              prjAccessor.open("../SampleModel.jude", true, false, true);
 26  
 27              System.out.println("Printing the elements...");
 28  
 29              // 起点となるモデルを取得する。
 30              IModel project = prjAccessor.getProject();
 31  
 32              // プロジェクトに含まれる全てのパッケージとクラスを取得する。
 33              printPackageInfo(project);
 34  
 35              // プロジェクトを閉じる
 36              prjAccessor.close();
 37  
 38              System.out.println("Finished");
 39  
 40          } catch (ProjectLockedException e) {
 41              e.printStackTrace();
 42          } catch (Throwable e) {
 43              e.printStackTrace();
 44          }
 45      }
 46  
 47      private static void printPackageInfo(IPackage iPackage) {
 48          // パッケージ名を表示
 49          System.out.println("Package name: " + iPackage.getName());
 50          // パッケージの定義を表示
 51          System.out.println("Package definition: " + iPackage.getDefinition());
 52  
 53          // パッケージの要素(クラスやパッケージ)を表示
 54          INamedElement[] iNamedElements = iPackage.getOwnedElements();
 55          for (int i = 0; i < iNamedElements.length; i++) {
 56              if (iNamedElements[i] instanceof IPackage) {
 57                  IPackage subPackage = (IPackage) iNamedElements[i];
 58                  // パッケージを表示
 59                  printPackageInfo(subPackage);
 60              } else if (iNamedElements[i] instanceof IClass) {
 61                  IClass iClass = (IClass) iNamedElements[i];
 62                  // クラスを表示
 63                  printClassInfo(iClass);
 64              }
 65          }
 66      }
 67  
 68      private static void printClassInfo(IClass iClass) {
 69          // クラス名を表示
 70          System.out.println("Class name: " + iClass.getName());
 71          // クラスの定義を表示
 72          System.out.println("Class definition: " + iClass.getDefinition());
 73  
 74          // 全ての属性を表示
 75          IAttribute[] iAttributes = iClass.getAttributes();
 76          for (int i = 0; i < iAttributes.length; i++) {
 77              printAttributeInfo(iAttributes[i]);
 78          }
 79  
 80          // 全ての操作を表示
 81          IOperation[] iOperations = iClass.getOperations();
 82          for (int i = 0; i < iOperations.length; i++) {
 83              printOperationInfo(iOperations[i]);
 84          }
 85  
 86          // インナークラスの情報を表示
 87          IClass[] iClasses = iClass.getNestedClasses();
 88          for (int i = 0; i < iClasses.length; i++) {
 89              printClassInfo(iClasses[i]);
 90          }
 91      }
 92  
 93  
 94          // 属性名を表示
 95          System.out.println("Attribute name: " + iAttribute.getName());
 96          // 属性のタイプを表示
 97          System.out.println("Attribute type: " + iAttribute.getTypeExpression());
 98          // 属性の定義を表示
 99          System.out.println("Attribute definition: " + iAttribute.getDefinition());
100      }
101  
102      private static void printOperationInfo(IOperation iOperation) {
103          // 操作名を表示
104          System.out.println("Operation name: " + iOperation.getName());
105          // 操作の返り値のタイプを表示
106          System.out.println("Operation returnType: " + iOperation.getReturnTypeExpression());
107          // 操作の定義を表示
108          System.out.println("Operation definition: " + iOperation.getDefinition());
109          
110          // 全てのパラメータを表示
111          IParameter[] iParams = iOperation.getParameters();
112          for (int i = 0; i < iParams.length; i++) {
113              printParameterInfo(iParams[i]);
114          }
115      }
116      
117      private static void printParameterInfo(IParameter iParameter) {
118          // パラメータ名を表示
119          System.out.println("Parameter name: " + iParameter.getName());
120          // パラメータの型を表示
121          System.out.println("Parameter type: " + iParameter.getTypeExpression());
122  
123  }
出力例2
出力例2

サンプルプログラム2の内容

 サンプルプログラム2は、JUDEモデルを読み込んで、その中にあるパッケージ名やクラス名などをコンソールに出力します。

 「出力例2」は、「入力となるJUDEモデルの例1」を入力として与えた場合の結果です。ちょっと見づらいですが、パッケージの定義やクラス、クラスの属性、操作の情報などが出力されています。

 JUDE上のモデルとAPIの対応関係さえつかめてくると、理解は難しくないと思いますが、いかがでしょうか?

属性と関連端

 クラスの属性取得についての補足です。

 クラス(IClass)のgetAttributes()で属性(IAttribute)を取得する場合、関連端を含むすべての属性が取得されます。例えば、IClassのgetAttributes()でクラス0の属性を取得する場合、属性0、属性1、クラス1の関連端が取得されます。関連端にあたるものかどうかを判定するには、IAttributeのgetAssociation()で関連の有無を確認します。また、関連(IAssociation)のgetMemberEnds()で関連端だけを取得することもできます。

次のページ
JUDEモデルの作成・編集方法

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

周 翼(シュウ ヨク)

 1999年4月に来日。プログラマの仕事とソフトウェア科学の修士課程を経て、2003年10月にJUDE開発チームに参加。現在は、ブリッジSEとして、中国オフショア開発における"見える化"を実践しつつ、日中開発チーム間の橋渡し役を務める。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

岡村 敏弘(オカムラ トシヒロ)

 オブジェクト指向を中心として、CADやカーナビ関連の開発・コンサルを経験。現在は、JUDE開発部リーダーとして、JUDEのフィードバックを集めつつ、改善案を検討することに従事。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3165 2008/11/07 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング