2 Şubat 2018 Cuma

Enterprise Architect Automation Interface

Enterprise Architect Notlarım
Giriş
Enterprise Architect Bir CASE (Computer Aided Software Engineering, Bilgisayar Destekli Yazılım Mühendisliği) aracıdır.

Bu tür araçların, CMMI sürecinin iyileştirilmesinde kullanılması konulu "akademik (!!)" bir çalışmada kullanılmasını görünce, insanın aklına Excel'in "not tutmak" için kullanılması geliyor.

CASE araçları kimileri tarafından modası geçmiş olarak görülse de, ben yazılım kod üretmek için olmasa bile, "Yazılım Ürün Hattı" konusu içinde bulunan Information Model'i betimlemek için faydalı olduklarını düşünüyorum.

Enterprise Architect Automation Interface İçin Ne Lazım ?
Enterprise Architect Automation Interface kullanabilmek içim eaapi.jar ve SSJavaCOM.dll doslayarı lazım. Her şey COM üzerinde inşa edildiği için EA.exe arka planda çalışmalı. Ayrcıa tüm veri yapıları başlangıç indeksi olarak Java'daki gibi 0 sayısı ile başlıyorlar.

Repository Sınıfı Nedir ?
Bu sınıf ile EA Automation arayüzüne erişim sağlanıyor. Aşağıdaki açıklamada entry point olduğu söyleniyor.

The Repository package contains the high level system objects and entry point into the model itself using the Models collection and the other system level collections.

Şekilden de tüm diğer sınıflara erişim için kullanılabileceği görülebilir.

Örnek:
import org.sparx.*;
Repository repository = new Repository ();
repository.open ("c:\\eatest.eap");
Eğer SQLServer'a bağlanmak istersek bu sefer bağlantı dizisini vermek lazım. Kullanılacak diziyi File/Open Project menüsünden görebiliriz. Örnek:
import org.sparx.*;
Repository repository = new Repository ();
String conn = "Model Ismi - DBType=1;Connect=Provider=SQLOLEDB.1;Password=mypass;Persist Security Info=true;User ID=myuser;Initial Catalog=MyModel;Data Source=MyServer\SQLEXPRESS";
repository.open (conn);
Package Sınıfı Nedir?
Bu sınıf ile paketlerin içindeki diagramlar bulunabilir.
Package1
  | -> Package2
           |->Diagram1
şeklinde bir ağaç yapısı varsa, Diagram1'e şöyle erişişir.

Collection<org.sparx.Package> packages = p.GetPackages();
Package package= packages.GetAt (0);
Collection<org.sparx.Diagram> diagrams= package.GetDiagrams();

Diagram Sınıfı Nedir?
Bu sınıf UML ile tasarlanan herhangi bir diagramı temsil ediyor.Yukarıdaki örnekten devam edersek. Diagram1 sınıfının içindeki nesnelere erişmek için aşağıdaki gibi yapılabilir.

Diagram diagram = diagrams.GetAt(0);
Collection<org.sparx.DiagramObject> diagramObjects = diagram.GetDiagramObjects();

Bir diagramı diske emf dosyası olarak kaydetmek için buradaki koda bakılabilir.

Element Sınıfı Nedir?
Bu sınıf ile diyagram içindeki sınıfın bilgisine erişmek mümkün. Aşağıdaki gibi GetElementByID metodu ile yapılabilir.

DiagramObject diagramObject = diagramObjects.GetAt (0);
int elementID = diagramObject.GetElementID (); //56110 verir
Element element = repository.GetElementByID (elementID);
String stereoType = element.GetStereoType ();//struct verir
String name = element.GetName (); //MyStruct verir
Collection<org.sparx.Attribute> attributes = element.GetAttributes();
Element'e direkt erişmek için GUID kullanılabilir. Örnek:
Element myClass = repository.GetElementbyGuid ("{7AC7AB80-DEE5-4CD1-...}");

Burada dikkat edilmesi gereken konu GetAttributes metodunun döndürdüğü Collection sınıfının java.util paketi içindeki Collection olmadığı. Bu sınıfı bir ArrayList'e çevirmek için aşağaki kod kullanılabilir
ArrayList<Attribute> list = new ArrayList <Attribute> ();
Iterator it = attributes.Iterator ();
while (it.hasNext ()){
  list.add (it.next());
}
C#'ta Attributes için şöyle yaparız.
foreach (EA.Attribute att in currentElement.Attributes)
{
}
C#'ta Methods için şöyle yaparız.
foreach (EA.Method att in currentElement.Methods)
{
}
Attribute Sınıfı Nedir?
Bu sınıf ile class veya struct içindeki alanların bilgisine erişmek mümkün.
Attribute attribute = attributes.GetAt (0);

String name = a.GetName();//m_MyAttributeString type = a.GetType ();//longint attributeID = a.GetElementID () //45789
Attribute'ları sıralama örneği
Collections.sort (list,new Comparator<Attribute> (){
  @Override  public int compare (Attribute left,Attribute right){
    if (left.GetPos () > right.GetPos ()){return 1;}
    if (left.GetPos () < right.GetPos ()){return -1;}
    return 0;
  }
});
Örnekler
EA kurulumunda C:\Program Files (x86)\Sparx Systems\EA\Code\Code Samples\ altında C# ve Java örnek projeleri var.

EA Plugin
EA için plug-in yazmayı gösteren güzel bir yazı burada.

EA'da Kod Üretme
C++
.h ve .cpp doslaları için farklı generator kodları kullanmak gerekir.

Header Kodu Üretmek 
Include path'lerinin ayarlanması gerekir.

Include Guard
Header dosyasının derleme hatası almaması için gerekir

Copyright Bilgisi
Kodun başına yazılır.

Getter Setter Metodları
Eğer attribute primitive ise örneğin int olsun aşağıdaki gibi olabilir.

const int GetAttr () const;
void SetAttr (const int& value)

Eğer attribute başka bir struct ise aşağıdaki gibi olabilir.
MyValue& GetMyValue ();
void SetMyValue (const MyValue& value);



Hiç yorum yok:

Yorum Gönder