Aracılığıyla paylaş


UML Modelleri için Doğrulama Kısıtlamaları Nasıl Tanımlanır

Visual Studio Ultimate'ta, modelin belirttiğiniz koşulu karşılayp karşılamadığını test eden doğrulama kısıtlamalarını tanımlayabilirsiniz.Örneğin, kullanıcının kalıtım ilişkileri döngüsünü oluşturmadığından emin olmak için bir kısıtlama tanımlayabilirsiniz.Kısıtlama, kullanıcı modeli açmaya veya kaydetmeye çalıştığı zaman çağrılır ve ayrıca el ile çağrılabilir.Eğer kısıtlama başarısız olursa, tanımladığınız bir hata iletisi hata penceresine eklenir.Bu kısıtlamaları Visual Studio Tümleştirme Uzantısı (VSIX) olarak paketleyebilir ve bu uzantıyı diğer Visual Studio Ultimate kullanıcılarına dağıtabilirsiniz.

Ayrıca, modeli veritabanları gibi dış kaynaklara karşı da doğrulayan kısıtlamalar tanımlayabilirsiniz.

[!NOT]

Program kodunu katman diyagramına karşı doğrulamak istiyorsanız, bkz: Özel mimari doğrulama katmanı Diyagram ekleme.

Gereksinimler

Doğrulama Kısıtlamalarını Uygulama

Doğrulama kısıtlamaları üç durumda uygulanır: Bir modeli kaydettiğinizde; bir modeli açtığınızda ve Mimari menüsündeki UML Modeli Doğrula'yı tıklattığınızda.Her durumda, genellikle her kısıtlamayı birden çok duruma uygulamak için tanımlamanıza rağmen sadece o durum için tanımlanmış kısıtlamalar uygulanacaktır.

Doğrulama hataları Visual Studio hatalar penceresinde bildirilir ve hatalı model öğelerini seçmek için hataya çift tıklayabilirsiniz.

Doğrulama uygulama hakkında daha fazla bilgi için bkz. UML Modelini Doğrulama.

Geçerlilik Uzatma Tanımlama

Bir UML tasarımcısı için bir doğrulama uzantısı oluşturmak için doğrulama sınırlamalarının davranışını belirleyen bir sınıf oluşturmanız ve sınıfı bir Visual Studio Tümleştirme Uzantısı'na (VSIX) katıştırmanız gerekir.VSIX kısıtlamayı yükleyebilecek bir kapsayıcı gibi davranır.Bir doğrulama uzantısı tanımlamanın iki farklı yöntemi var:

  • Proje şablonunu kullanarak kendi VSIX paketi içerisinde bir doğrulama uzantısı oluşturun. Bu daha hızlı yöntemdir.Doğrulama sınırlamalarınızı menü komutları, özel araç kutusu öğeleri veya hareket işleyicileri gibi diğer tür uzantılarla birleştirmek istemiyorsanız, bunu kullanın.Tek bir sınıfta çeşitli kısıtlamalar tanımlayabilirsiniz.

  • Ayrı doğrulama sınıfı ve VSIX projeleri oluşturun. Aynı VSIX içinde bir kaç tür uzantıyı birleştirmek istiyorsanız bu yöntemi kullanın.Örneğin, menü komutunuz modelin belirli kısıtlamalar ortaya koyacağını ön görüyorsa, bunu bir doğrulama yöntemi olarak aynı VSIX içine katıştırabilirsiniz.

Kendi VSIX'inde bir doğrulama uzantısı oluşturmak için

  1. Yeni proje iletişim kutusunda, Modelleme Projeleri'nin altında, Doğrulama Uzantısı'nı tıklatın.

  2. Yeni projede .cs dosyasını açın ve doğrulama kısıtlamanızı uygulamak için sınıfı değiştirin.

    Daha fazla bilgi için bkz. Doğrulama Kısıtlamasını Uygulama.

    Önemli notÖnemli

    Emin olun, .cs dosyalarını içeren aşağıdaki using ifadesi:

    using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Uml;

  3. Yeni yöntemler tanımlayarak ek sınırlamalar ekleyebilirsiniz.Bir yöntemi bir doğrulama yöntemi olarak tanımlamak için yöntem aynı ilk doğrulama yönteminde olduğu gibi özniteliklerle etiketlenmiş olmalıdır.

  4. F5 tuşuna basarak kısıtlamaları sınayın.Daha fazla bilgi için bkz. Doğrulamayı Yürütme.

  5. Menü komutunu projeniz tarafından oluşturulan bin\*\*.vsix dosyasını kopyalayarak başka bir bilgisayara yükleyin.Daha fazla bilgi için bkz. Doğrulama Kısıtlamalarını Yükleme.

Eklediğinizde, diğer .cs dosyaları, genellikle aşağıdaki gerektirecektir using deyimleri:

using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Linq;
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Uml;
using Microsoft.VisualStudio.Modeling.Validation;
using Microsoft.VisualStudio.Uml.Classes;

Alternatif yordam aşağıdaki gibidir:

Bir sınıf kitaplığında ayrı bir doğrulama kısıtlaması oluşturmak için

  1. Varolan bir VSIX çözümüne ekleyerek veya yeni bir çözüm oluşturarak, bir sınıf kitaplığı projesi oluşturun.

    1. Üzerinde dosyasını menüsünden seçin Yeni, Proje.

    2. Altında Yüklü şablonlar, genişletme Visual C# veya Visual Basicve ardından Orta sütunda seçin Class Library.

  2. Çözümünüzü zaten yoksa, VSIX proje oluşturun:

    1. İçinde Solution Explorer'da, çözüm kısayol menüsünden seçim Ekle, Yeni bir proje.

    2. Altında Yüklü şablonlar, genişletme Visual C# veya Visual Basic, sonra seçim genişletilebilirlik.Orta sütundaki VSIX Projesi'ni tıklatın.

  3. Çözümün başlangıç projesi olarak VSIX projesini ayarlayın.

    • Solution Explorer'da, VSIX project kısayol menüsünden seçim baþlangýç projesi olarak ayarlanmış.
  4. De source.extension.vsixmanifest, altında İçerik, sýnýf kitaplýðý projesine mef bileşeni olarak ekleyin:

    1. Üzerinde meta verileri sekmesinde, adı VSIX için ayarlayın.

    2. Üzerinde Yükleme hedefleri sekmesinde, Visual Studio Ultimate ve Premium hedefleri ayarlayın.

    3. Üzerinde varlıklarını sekmesinde, seçim bir Yenive iletişim kutusunda ayarlayın:

      Type = mef bileşen

      Kaynak = bir projedeki geçerli çözümü

      Proje = class library projesi

Doğrulama sınıfını tanımlamak için

  1. Kendi VSIX doğrulama proje şablonu olan bir doğrulama sınıfı oluşturduysanız, bu yordama ihtiyacınız yoktur.

  2. Doğrulama sınıfı projesinde, aşağıdaki .NET derlemelerine başvurular ekleyin:

    Microsoft.VisualStudio.Modeling.Sdk.11.0

    Microsoft.VisualStudio.ArchitectureTools.Extensibility.Uml

    Microsoft.VisualStudio.Uml.Interfaces

    System.ComponentModel.Composition

  3. Aşağıdaki örneğe benzer bir kod içeren sınıf kitaplığı projesine bir dosya ekleyin.

    • Her doğrulama kısıtlaması belirli bir öznitelikle işaretlenmiş bir yöntem içerisinde yer alır.Yöntem, bir model öğe türünün parametresini kabul eder.Doğrulama çağrıldığında doğrulama framework'ü her doğrulama yöntemini, parametre türüne uyan her model öğe üzerinde uygulayacaktır.

    • Bu yöntemleri tüm sınıflara ve ad alanlarına yerleştirebilirsiniz.Bunları tercihinize uygun olarak değiştirin.

    using System.Collections.Generic;
    using System.ComponentModel.Composition;
    using System.Linq;
    using Microsoft.VisualStudio.Modeling.Validation;
    using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Uml;
    using Microsoft.VisualStudio.Uml.Classes;
    // You might also need the other Microsoft.VisualStudio.Uml namespaces.
    
    namespace Validation
    {
      public class MyValidationExtensions
      {
        // SAMPLE VALIDATION METHOD.
        // All validation methods have the following attributes.
        [Export(typeof(System.Action<ValidationContext, object>))]
        [ValidationMethod(
           ValidationCategories.Save
         | ValidationCategories.Open
         | ValidationCategories.Menu)]
        public void ValidateClassNames
          (ValidationContext context, 
           // This type determines what elements 
           // will be validated by this method:
           IClass elementToValidate)
        {
          // A validation method should not change the model.
    
          List<string> attributeNames = new List<string>();
          foreach (IProperty attribute in elementToValidate.OwnedAttributes)
          {
            string name = attribute.Name;
            if (!string.IsNullOrEmpty(name) && attributeNames.Contains(name))
            {
              context.LogError(
                string.Format("Duplicate attribute name '{0}' in class {1}", name, elementToValidate.Name),
                "001", elementToValidate);
            }
            attributeNames.Add(name);
          }
    
        }
        // Add more validation methods for different element types.
      }
    }
    

Doğrulama Kısıtlaması Yürütme

Test amaçları için doğrulama yöntemlerinizi hata ayıklama modunda yürütün.

Doğrulama sınırlamasını test etmek için

  1. Press F5, veya Debug menüsünden seçin Start Debugging komutunu.

    Visual Studio deneysel örneği başlar.

    Sorun giderme: Yeni bir Visual Studio başlamazsa:

    • Birden fazla projeniz varsa, VSIX projesinin çözümün Başlangıç projesi olarak ayarlandığından emin olun.

    • Solution Explorer'da başlangıç ya da yalnızca proje, kısayol menüsünden seçim özelliklerini.Proje Özellikleri Düzenleyicisi'nde seçin Debug sekmesi.Harici program başlat alanındaki dizenin tipik olarak Visual Studio öğesinin tam yol adı olduğunu doğrulayın:

      C:\Program Files\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe

  2. Deneysel Visual Studio üzerinde bir modelleme projesi oluşturun veya açın ve bir modelleme diyagramı oluşturun veya açın.

  3. Önceki bölümde verilen örnek kısıtlama için bir test kurmak için:

    1. Sınıf diyagramı açın.

    2. Bir sınıf oluşturun ve aynı adı taşıyan iki öznitelik ekleyin.

  4. Kısayol menüsünde Diyagram üzerinde herhangi bir yeri seçim Doğrula.

  5. Modeldeki herhangi bir hata, hata penceresinde bildirilecektir.

  6. Hata raporunu çift tıklatın.Raporda belirtilen öğeler ekranda görünür durumdaysa vurgulanacaklardır.

    Sorun giderme: Doğrula komutu menüde görünmüyorsa, şundan emin olun:

    • Doğrulama proje bir mef bileşeni olarak listelenen varlıklarını sekmesinde source.extensions.manifest VSIX projesinde.

    • Doğru Export ve ValidationMethod öznitelikleri doğrulama yöntemlerine eklenir.

    • ValidationCategories.Menu, ValidationMethod özniteliği için bağımsız değişkene eklenmiştir ve Mantıksal OR (|) kullanan diğer değerlerle oluşturulmuştur.

    • Tüm Import ve Export özniteliklerinin parametreleri geçerlidir.

Kısıtlamayı Değerlendirme

Doğrulama yöntemi, uygulamak istediğiniz doğrulama kısıtlamasının doğru veya yanlış olup olmadığını denetlemelidir.Doğru ise, doğrulama yöntemi hiçbirşey yapmamalı.Yanlış ise, ValidationContext parametreleri tarafından sağlanan yöntemleri kullanarak hatayı bildirmelidir.

[!NOT]

Doğrulama yöntemlerinin modeli değiştirmemesi gerekir.Kısıtlamaların ne zaman veya ne sırada yürütüleceğinin garantisi yoktur.Doğrulama çalışması içinde doğrulama yönteminin birbirini izleyen yürütmeleri arasında bilgi geçirmek zorundaysanız, Birden Çok Doğrulamayı Düzenleme'nin altında açıklanan bağlam önbelleğini kullanabilirsiniz.

Örneğin, her türün (sınıf, arayüz, sabit listesi) en az üç karakter uzunluğunda olduğundan emin olmak istiyorsanız, bu yöntemi kullanabilirsiniz:

public void ValidateTypeName(ValidationContext context, IType type)
{
  if (!string.IsNullOrEmpty(type.Name) && type.Name.Length < 3)
  {
    context.LogError(
      string.Format("Type name {0} is too short", type.Name),
               "001", type);
   }
 }

Modeli araştırmak ve okumak için kullanabileceğiniz yöntem ve türler hakkında bilgi edinmek için bkz. UML API ile Programlama

Ee329482.collapse_all(tr-tr,VS.110).gifKısıtlama Yöntemlerini Doğrulama Hakkında

Her doğrulama kısıtlaması aşağıdaki formdaki bir yöntem tarafından tanımlanır:

[Export(typeof(System.Action<ValidationContext, object>))]
 [ValidationMethod(ValidationCategories.Save 
  | ValidationCategories.Menu 
  | ValidationCategories.Open)]
public void ValidateSomething
  (ValidationContext context, IClassifier elementToValidate)
{...}

Öznitelikler ve her doğrulama yönteminin parametreleri aşağıdaki gibidir:

[Export(typeof(System.Action <ValidationContext, object>))]

Yöntemi doğrulama kısıtlaması gibi Yönetilen Genişletilebilirlik Çerçevesi (MEF) kullanarak tanımlar.

[ValidationMethod (ValidationCategories.Menu)]

Doğrulamanın gerçekleşeceği zamanı belirtir.Birden fazla seçeneği birleştirmek istiyorsanız bit düzey VEYA'yı (|) kullanın.

Menu = Doğrulama menüsü tarafından çağrılır.

Save = modeli kaydederken çağrılır.

Open = modeli açarken çağrılır.Load = modeli kaydederken, ancak ihlalin modeli tekrar açmanın mümkün olamayabileceği hakkında kullanıcıyı uyarması için çağrılır.Model ayrıştırılmadan önce yüklemede de çağrılır.

public void ValidateSomething

(ValidationContext context,

IElement element)

İkinci parametre olan IElement'i kısıtlamanın uygulamasını istediğiniz türdeki öğe tarafından değiştirin.Kısıtlama yöntemi belirtilen türdeki tüm öğelere çağrılacaktır.

Yöntemin adı önemli değildir.

İkinci parametrede farklı türler ile istediğiniz sayıda doğrulama yöntemi tanımlayabilirsiniz.Doğrulama çağrıldığında her doğrulama yöntemi, parametre türüne uyan her model öğe üzerinde çağrılacaktır.

Ee329482.collapse_all(tr-tr,VS.110).gifDoğrulama Hatalarını Raporlama

Bir hata raporu oluşturmak için ValidationContext tarafından sağlanan yöntemleri kullanın:

context.LogError("error string", errorCode, elementsWithError);

  • "error string", Visual Studio Hata Listesi'nde görünür.

  • errorCode hatanın benzersiz tanımlayıcısı olması gereken dizedir

  • elementsWithError modeldeki öğeleri tanımlar.Kullanıcı hata raporuna çift tıkladığında, bu öğeyi gösteren şekil seçilecektir.

LogError(),LogWarning() ve LogMessage() iletileri hata listesinin farklı bölümlerine yerleştirecektir.

Doğrulama Yöntemleri Nasıl Uygulanır

Doğrulama modeldeki, sınıf öznitelikleri ve işlem parametreleri gibi ilişkileri ve büyük öğelerin parçalarını da içererek her öğeye uygulanır.

Her doğrulama yöntemi, ikinci parametresindeki türe uyan her öğeye uygulanır.Bu şu demektir, örneğin eğer doğrulama yöntemini IUseCase'in ikinci parametresi ile diğerini IElement supertype'ı ile tanımlarsanız, bu yöntemlerin ikisi de modeldeki her kullanım örneğine uygulancaktır.

Türlerin hiyerarşisi Model Öğe Türleri'ta özetlenmiştir.

Ayrıca öğelere ilişkileri takip ederek de erişebilirsiniz.Örneğin, IClass'ta doğrulama yöntemi tanımlamak için, onun kendi özellikleri boyunca döngüye girebilirsiniz:

public void ValidateTypeName(ValidationContext context, IClass c)
{
   foreach (IProperty property in c.OwnedAttributes)
   {
       if (property.Name.Length < 3)
       {
            context.LogError(
                 string.Format(
                        "Property name {0} is too short", 
                        property.Name), 
                 "001", property);
        }
   }
}

Ee329482.collapse_all(tr-tr,VS.110).gifModel üzerinde doğrulama yöntemi oluşturma

Eğer doğrulama yönteminin her doğrulama çalışması esnasında tam olarak bir kez çağrıldığından emin olmak istiyorsanız, IModel'i doğrulayabilirsiniz.

using Microsoft.VisualStudio.Uml.AuxiliaryConstructs; ...
[Export(typeof(System.Action<ValidationContext, object>))]
[ValidationMethod(ValidationCategories.Menu)]
public void ValidateModel(ValidationContext context, IModel model)
{  foreach (IElement element in model.OwnedElements)
   { ...

Ee329482.collapse_all(tr-tr,VS.110).gifŞekil ve diyagramları doğrulama

Doğrulama yöntemleri diyagramlar ve şekiller gibi görüntüleme öğeleri üzerinde çağrılmaz, çünkü doğrulama yöntemlerinin birincil amacı modeli doğrulamaktır.Ancak diyagram bağlamını kullanarak geçerli diyagrama erişebilirsiniz.

Doğrulama sınıfında, DiagramContext'ini içeri aktarılan özellik olarak bildirin:

using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Presentation; 
...
[Import]
public IDiagramContext DiagramContext { get; set; }

Doğrulama yönteminde, eğer varsa, geçerli odak diyagramına erişmek için DiagramContext'i kullanabilirsiniz:

[Export(typeof(System.Action<ValidationContext, object>))]
[ValidationMethod(ValidationCategories.Menu)]
public void ValidateModel(ValidationContext context, IModel model)
{
  IDiagram focusDiagram = DiagramContext.CurrentDiagram;
  if (focusDiagram != null)
  {
    foreach (IShape<IUseCase> useCaseShape in
              focusDiagram.GetChildShapes<IUseCase>())
    { ...

Bir hatayı kaydetmek için şeklin gösterdiği model öğeyi edinmeniz gerekir çünkü şekli LogError'a geçiremezsiniz:

       IUseCase useCase = useCaseShape.Element;
       context.LogError(... , usecase);

Ee329482.collapse_all(tr-tr,VS.110).gifBirden Çok Doğrulamayı Düzenleme

Doğrulama çağrıldığında, örneğin kullanıcı diyagram menüsünden çağırdığında, her doğrulama yöntemi her model öğesine uygulanır.Bu, doğrulama çerçevesinin tek bir çağırmasında aynı yöntemin farklı öğelere birçok kez uygulanabileceği anlamına gelir.

Bu, öğeler arasındaki ilişkilerle ilgilenen doğrulama problemini sunar.Örneğin, kullanım örneğinden başlayan ve döngü olmadığını kanıtlamak için include ilişkilerinden geçen bir doğrulama yazabilirsiniz.Ancak, yöntem birçok include bağlantısı olan modelde her kullanım örneğine uygulandığı zaman, büyük olasılıkla sürekli olarak modelin aynı alanlarını işleyecektir.

Bu durumdan kaçınmak için, doğrulama çalışması esnasında bilgilerin korunduğu bağlam önbelleği vardır.Doğrulama yöntemlerinin yürütmeleri arasında bilgi geçirmek için bağlam önbelleğini kullanabilirsiniz.Örneğin, zaten bu doğrulama çalışmasında ilgili olan öğeler listesini saklayabilirsiniz.Önbellek her doğrulama çalışmasının başlangıcında oluşturulur ve farklı doğrulama çalışmaları arasında bilgi geçirmek için kullanılamaz.

context.SetCacheValue<T> (name, value)

Bir değer saklar

context.TryGetCacheValue<T> (name, out value)

Bir değer alır.Başarılı olursa true döndürür.

context.GetValue<T>(name)

Bir değer alır.

Context.GetValue<T>()

Belirtilen türde bir değer alır.

Bir uzantıyı yükleme ve kaldırma

Visual Studio'yu hem kendi bilgisayarınıza hem de diğer bilgisayarlara yükleyebilirsiniz.

Bir uzantı yüklemek için

  1. Bilgisayarınızda, VSIX projeniz tarafından oluşturulmuş .vsix dosyasını bulun.

    1. İçinde Solution Explorer'da, VSIX project kısayol menüsünden seçim Klasörü Windows Gezgini'nde Aç.

    2. bin\*\Projeniz.vsix dosyasını bulun.

  2. Uzantıyı yüklemek istediğiniz hedef bilgisayara .vsix dosyasını kopyalayın.Bu sizin kendi bilgisayarınız veya başka bir tane olabilir.

    • Hedef bilgisayarda source.extension.vsixmanifest'te belirttiğiniz Visual Studio'nun sürümlerinden biri olmalıdır.
  3. Hedef bilgisayarda açmak .vsix dosyası.

    Visual Studio Uzantı Yükleyicisi uzantıyı açar ve yükler.

  4. Visual Studio'yu başlatın veya yeniden başlatın.

Bir uzantıyı kaldırmak için

  1. Üzerinde araçları menüsünden seçin Extension Manager.

  2. Yüklü Uzantıları genişletin.

  3. Uzantı seçin ve sonra seçin kaldırma.

Nadiren, hatalı bir uzantı yüklemede başarısız olur ve hata penceresinde bir rapor oluşturur, ancak Uzantı Yöneticisi'nde görünmez.Bu durumda uzantıyı dosyayı %LocalAppData% öğesinin DriveName:\Users\UserName\AppData\Local olduğu şu konumdan silerek kaldırabilirsiniz:

%LocalAppData%\Microsoft\VisualStudio\11.0\Extensions

Örnek

Bu örnek, öğeler arasındaki Bağımlılık ilişkisindeki döngüleri bulur.

Hem kaydetme hem de doğrulama menü komutunu doğrulayacaktır.

/// <summary>
/// Verify that there are no loops in the dependency relationsips.
/// In our project, no element should be a dependent of itself.
/// </summary>
/// <param name="context">Validation context for logs.</param>
/// <param name="element">Element to start validation from.</param>
[Export(typeof(System.Action<ValidationContext, object>))]
[ValidationMethod(ValidationCategories.Menu 
     | ValidationCategories.Save | ValidationCategories.Open)]
public void NoDependencyLoops(ValidationContext context, INamedElement element)
{
    // The validation framework will call this method
    // for every element in the model. But when we follow
    // the dependencies from one element, we will validate others.
    // So we keep a list of the elements that we don't need to validate again. 
    // The list is kept in the context cache so that it is passed
    // from one execution of this method to another.
    List<INamedElement> alreadySeen = null;
    if (!context.TryGetCacheValue("No dependency loops", out alreadySeen))
    {
       alreadySeen = new List<INamedElement>();
       context.SetCacheValue("No dependency loops", alreadySeen);
    }

    NoDependencyLoops(context, element, 
                new INamedElement[0], alreadySeen);    
}

/// <summary>
/// Log an error if there is any loop in the dependency relationship.
/// </summary>
/// <param name="context">Validation context for logs.</param>
/// <param name="element">The element to be validated.</param>
/// <param name="dependants">Elements we've followed in this recursion.</param>
/// <param name="alreadySeen">Elements that have already been validated.</param>
/// <returns>true if no error was detected</returns>
private bool NoDependencyLoops(ValidationContext context, 
    INamedElement element, INamedElement[] dependants, 
    List<INamedElement> alreadySeen)
{
    if (dependants.Contains(element))
    {
        context.LogError(string.Format("{0} should not depend on itself", element.Name), 
        "Fabrikam.UML.NoGenLoops", // unique code for this error
        dependants.SkipWhile(e => e != element).ToArray()); 
            // highlight elements that are in the loop
        return false;
    }
    INamedElement[] dependantsPlusElement = 
        new INamedElement[dependants.Length + 1];
    dependants.CopyTo(dependantsPlusElement, 0);
    dependantsPlusElement[dependantsPlusElement.Length - 1] = element;

    if (alreadySeen.Contains(element))
    {
        // We have already validated this when we started 
        // from another element during this validation run.
        return true;
    }
    alreadySeen.Add(element);

    foreach (INamedElement supplier in element.GetDependencySuppliers())
    {
        if (!NoDependencyLoops(context, supplier,
             dependantsPlusElement, alreadySeen))
        return false;
    }
    return true;
}

Ayrıca bkz.

Kavramlar

Nasıl yapılır: Bir Modelleme Uzantısı Tanımlama ve Yükleme

UML API ile Programlama