CodeZine(コードジン)

特集ページ一覧

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

JUDE APIの概要と使い方

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2008/11/07 14:00
目次

サンプルプログラム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()で関連端だけを取得することもできます。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 周 翼(シュウ ヨク)

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

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

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

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5