UML Core::Constructs: Root، Expressions، Classes، Classifiers و Constraints

UML Core::Constructs: Root، Expressions، Classes، Classifiers و Constraints

توسط admin | گروه مهندسی نرم افزار | 1405/05/21

نظرات 0

11 Core::Constructs

این بند package Constructs از InfrastructureLibrary::Core را شرح می‌دهد. package Constructs برای استفاده مجدد توسط Meta-Object Facility طراحی شده است.

شکل 11.1 - package Core در مالکیت package InfrastructureLibrary قرار دارد و چند subpackage را شامل می‌شود.
شکل 11.1 - package Core در مالکیت package InfrastructureLibrary قرار دارد و چند subpackage را شامل می‌شود.

package Constructs با چند diagram مشخص می‌شود که هر کدام در یک زیربند جداگانه در ادامه شرح داده می‌شوند.

package Constructs به چند package دیگر، به‌ویژه Basic و packageهای مختلفی از Abstractions، وابسته است؛ همان‌گونه که در شکل 11.2 نشان داده شده است.

شکل 11.2 - package Constructs به چند package دیگر وابسته است:
شکل 11.2 - package Constructs به چند package دیگر وابسته است:

از جمله Comments، Classifiers، Changeabilities، Constraints، BehavioralFeatures، Ownerships، Basic، Expressions، Super، Multiplicities، Visibilities، Namespaces، TypedElements، StructuralFeatures، Relationships و Redefinitions که با روابط <<merge>> در شکل نمایش داده شده‌اند.

شکل 11.2 روابط میان packageهای Core و نحوه مشارکت آن‌ها در منشأ و تکامل package Constructs را نشان می‌دهد. package Constructs، model elementها را از package PrimitiveTypes import می‌کند. Constructs همچنین metaclassهایی از Basic و metaclassهای مشترکی را که در packageهای Abstractions تعریف شده‌اند شامل می‌شود. این metaclassهای مشترک با copy در Constructs گنجانده می‌شوند. شکل 11.2 از PackageMerge برای نشان‌دادن packageهایی که در تعریف Constructs مشارکت می‌کنند و نحوه این مشارکت استفاده می‌کند. metamodel مربوط به InfrastructureLibrary در عمل این package mergeها را شامل نمی‌شود، زیرا Constructs یک metamodel کامل است که از پیش همه metaclassهای packageهای ارجاع‌شده را در خود دارد. این طراحی اجازه می‌دهد Constructs بدون نیاز به استفاده از PackageMerge درک و استفاده شود.

11.1 نمودار Root

نمودار Root در package Constructs، سازه‌های Element، Relationship، DirectedRelationship و Comment را مشخص می‌کند.

شکل 11.3 - نمودار Root از package Constructs
شکل 11.3 - نمودار Root از package Constructs

11.1.1 Comment

توصیف

تعریف Comment در این بخش مطابق سازه بازاستفاده‌شده از Abstractions است.

Generalizationها

  • Element، صفحه 106

Attributeها

  • body: String - رشته‌ای را مشخص می‌کند که متن comment است.

Associationها

  • annotatedElement: Element[*] - property متناظر در Abstractions را بازتعریف می‌کند.

Constraintها

هیچ constraint اضافی وجود ندارد.

معناشناسی

معناشناسی اضافی وجود ندارد.

نمادگذاری

نمادگذاری اضافی وجود ندارد.

11.1.2 DirectedRelationship

توصیف

Constructs::DirectedRelationship از تعریف DirectedRelationship در Abstractions::Relationships استفاده مجدد می‌کند و یک specialization به Constructs::Relationship می‌افزاید.

Generalizationها

  • Relationship، صفحه 107

Attributeها

هیچ attribute اضافی وجود ندارد.

Associationها

  • /source: Element[1..*] - property متناظر در Abstractions را بازتعریف می‌کند. زیرمجموعه Relationship::relatedElement و derived union است.
  • /target: Element[1..*] - property متناظر در Abstractions را بازتعریف می‌کند. زیرمجموعه Relationship::relatedElement و derived union است.

Constraintها

هیچ constraint اضافی وجود ندارد.

معناشناسی

معناشناسی اضافی وجود ندارد.

نمادگذاری

نمادگذاری اضافی وجود ندارد.

11.1.3 Element

توصیف

Constructs::Element از تعریف Element در Abstractions::Comments استفاده مجدد می‌کند.

Generalizationها

هیچ‌کدام.

Attributeها

هیچ attribute اضافی وجود ندارد.

Associationها

  • /ownedComment: Comment[*] - property متناظر در Abstractions را بازتعریف می‌کند. زیرمجموعه Element::ownedElement است.
  • /ownedElement: Element[*] - property متناظر در Abstractions را بازتعریف می‌کند. derived union است.
  • /owner: Element[0..1] - property متناظر در Abstractions را بازتعریف می‌کند. derived union است.

Constraintها

هیچ constraint اضافی وجود ندارد.

معناشناسی

معناشناسی اضافی وجود ندارد.

نمادگذاری

نمادگذاری اضافی وجود ندارد.

11.1.4 Relationship

توصیف

Constructs::Relationship از تعریف Relationship در Abstractions::Relationships استفاده مجدد می‌کند و یک specialization به Constructs::Element می‌افزاید.

Generalizationها

  • Element، صفحه 106

Attributeها

هیچ attribute اضافی وجود ندارد.

Associationها

  • /relatedElement: Element[1..*] - property متناظر در Abstractions را بازتعریف می‌کند. derived union است.

Constraintها

هیچ constraint اضافی وجود ندارد.

معناشناسی

معناشناسی اضافی وجود ندارد.

نمادگذاری

نمادگذاری اضافی وجود ندارد.

11.2 نمودار Expressions

نمودار Expressions در package Constructs سازه‌های ValueSpecification، Expression و OpaqueExpression را مشخص می‌کند.

شکل 11.4 - نمودار Expressions از package Constructs
شکل 11.4 - نمودار Expressions از package Constructs

11.2.1 Expression

توصیف

Constructs::Expression از تعریف Expression در Abstractions::Expressions استفاده مجدد می‌کند و یک specialization به Constructs::ValueSpecification اضافه می‌کند.

Generalizationها

  • ValueSpecification، صفحه 109

Attributeها

هیچ attribute اضافی وجود ندارد.

Associationها

هیچ association اضافی وجود ندارد.

Constraintها

هیچ constraint اضافی وجود ندارد.

معناشناسی

معناشناسی اضافی وجود ندارد.

نمادگذاری

نمادگذاری اضافی وجود ندارد.

11.2.2 OpaqueExpression

توصیف

Constructs::OpaqueExpression از تعریف OpaqueExpression در Abstractions::Expressions استفاده مجدد می‌کند و یک specialization به Constructs::ValueSpecification اضافه می‌کند.

Generalizationها

  • PackageableElement، صفحه 147
  • TypedElement، صفحه 133

Attributeها

هیچ attribute اضافی وجود ندارد.

Associationها

هیچ association اضافی وجود ندارد.

Constraintها

هیچ constraint اضافی وجود ندارد.

معناشناسی

معناشناسی اضافی وجود ندارد.

نمادگذاری

نمادگذاری اضافی وجود ندارد.

11.2.3 ValueSpecification

توصیف

Constructs::ValueSpecification از تعریف ValueSpecification در Abstractions::Expressions استفاده مجدد می‌کند و یک specialization به Constructs::TypedElement اضافه می‌کند.

Generalizationها

  • Relationship، صفحه 107، مطابق ارجاع درج‌شده در متن مشخصات.

Attributeها

هیچ attribute اضافی وجود ندارد.

Associationها

هیچ association اضافی وجود ندارد.

Constraintها

هیچ constraint اضافی وجود ندارد.

معناشناسی

معناشناسی اضافی وجود ندارد.

نمادگذاری

نمادگذاری اضافی وجود ندارد.

11.3 نمودار Classes

نمودار Classes از package Constructs سازه‌های Association، Class و Property را مشخص می‌کند و featureهایی به سازه‌های Classifier و Operation اضافه می‌کند.

شکل 11.5 - نمودار Classes از package Constructs
شکل 11.5 - نمودار Classes از package Constructs

11.3.1 Association

association مجموعه‌ای از tupleها را توصیف می‌کند که valueهای آن‌ها به typed instanceها ارجاع می‌دهند. instance یک association «link» نامیده می‌شود.

توصیف

association یک رابطه معنایی را مشخص می‌کند که می‌تواند میان typed instanceها رخ دهد. association حداقل دو end دارد که با property نمایش داده می‌شوند و هر کدام به type همان end متصل‌اند. بیش از یک end یک association می‌تواند type یکسانی داشته باشد.

end property مربوط به association که در مالکیت end class باشد یا یک navigable owned end متعلق به خود association باشد، نشان می‌دهد association از endهای مقابل navigable است؛ در غیر این صورت association از endهای مقابل navigable نیست.

Generalizationها

  • Classifier، صفحه 129
  • Relationship، صفحه 107

Attributeها

  • isDerived: Boolean - مشخص می‌کند association از model elementهای دیگر مانند associationها یا constraintها مشتق شده است یا خیر. مقدار پیش‌فرض false است.

Associationها

  • memberEnd: Property[2..*] - هر end مشارکت instanceهای classifier متصل به آن end را در linkهای association نمایش می‌دهد. این association ordered است و زیرمجموعه Namespace::member محسوب می‌شود.
  • ownedEnd: Property[*] - endهایی که در مالکیت خود association هستند. association ordered است و زیرمجموعه Association::memberEnd، Classifier::feature و Namespace::ownedMember است.
  • /endType: Type[1..*] - classifierهایی را که به‌عنوان type endهای association استفاده می‌شوند ارجاع می‌دهد.
  • navigableOwnedEnd: Property[*] - navigable endهایی که در مالکیت خود association هستند. زیرمجموعه Association.ownedEnd است.

Constraintها

[1] associationای که association دیگری را specialization می‌کند باید همان تعداد end را داشته باشد.

self.parents()->forAll(p | p.memberEnd.size() = self.memberEnd.size())

[2] هنگامی که association، association دیگری را specialization می‌کند، هر end از association خاص باید با یک end از association عمومی متناظر باشد و end خاص به همان type یا subtype مربوط به end عمومی‌تر برسد.

[3] endType از typeهای member endها مشتق می‌شود.

self.endType = self.memberEnd->collect(e | e.type)

[4] فقط associationهای binary می‌توانند aggregation باشند.

self.memberEnd->exists(isComposite) implies self.memberEnd->size() = 2

[5] association endهای associationهای دارای بیش از دو end باید در مالکیت خود association باشند.

if memberEnd->size() > 2
then ownedEnd->includesAll(memberEnd)

معناشناسی

association اعلان می‌کند که می‌توان میان instanceهای typeهای مرتبط link وجود داشته باشد. link یک tuple با یک value برای هر end association است که هر value یک instance از type همان end است.

وقتی یک یا چند end association مقدار isUnique=false داشته باشند، ممکن است چند link همان مجموعه instanceها را به یکدیگر مرتبط کنند. در چنین حالتی linkها علاوه بر valueهای end خود یک identifier اضافی نیز حمل می‌کنند.

وقتی یک یا چند end از association ordered باشند، linkها علاوه بر valueهای end خود اطلاعات ordering را نیز حمل می‌کنند.

navigable end یک association به این معناست که در زمان اجرا قرار است از objectهایی که در linkهای end یا endهای دیگر association شرکت دارند، به objectهای شرکت‌کننده در linkهای navigable end پیمایش انجام شود. این موضوع مستقل از ownership همان end است. associationها صرف‌نظر از تعداد endهایشان می‌توانند navigable end داشته باشند. implementationها می‌توانند traversal از non-navigable endها را نیز پشتیبانی کنند، اما الزامی نیست. پس از آنکه object از طریق traversal پیدا شد، می‌توان مانند هر object دیگری message به آن ارسال کرد.

traversal یک association با n end به سمت یک navigable end مستلزم آن است که ابتدا objectهای مربوط به n-1 end باقی‌مانده شناسایی شوند. نتیجه traversal collectionی از objectها برای navigable end است که از linkهایی مشتق می‌شود که n-1 object دیگر در آن‌ها شرکت دارند. برای binary associationها n=2 است؛ در این حالت traversal از یک object در end مقابل به collectionی از objectها در navigable end انجام می‌شود. multiplicity مربوط به association end اندازه این collection را محدود می‌کند. اگر end به‌صورت ordered علامت‌گذاری شده باشد، collection نیز ordered خواهد بود. اگر end unique باشد، collection یک set است؛ در غیر این صورت elementهای تکراری مجازند.

end یک association را می‌توان در شرایط زیر به‌عنوان subset یک end از association دیگر علامت‌گذاری کرد: (الف) هر دو association تعداد end یکسان داشته باشند؛ و (ب) هر یک از مجموعه typeهای متصل به subsetting association با type متناظر متصل به subsetted association conform باشد. در این حالت، برای مجموعه‌ای از instanceهای مشخص در endهای دیگر هر دو association، collection نشان‌داده‌شده توسط subsetting end به‌طور کامل در collection نشان‌داده‌شده توسط subsetted end قرار دارد.

end یک association را می‌توان در شرایط زیر به‌عنوان redefining end یک association دیگر علامت‌گذاری کرد: (الف) هر دو تعداد end یکسان داشته باشند؛ و (ب) هر یک از مجموعه typeهای متصل به redefining association با type متناظر متصل به redefined association conform باشد. در این حالت، برای مجموعه‌ای از instanceهای مشخص در endهای دیگر هر دو association، collectionهای نشان‌داده‌شده توسط redefining و redefined end یکسان‌اند.

associationها می‌توانند specialization شوند. وجود link از association تخصصی‌کننده مستلزم وجود linkای است که همان مجموعه instanceها را در association تخصصی‌شده مرتبط کند.

Subsetting مفهوم آشنای نظریه مجموعه‌ها را نمایش می‌دهد. این مفهوم روی collectionهای نمایش‌داده‌شده توسط association endها اعمال می‌شود، نه روی خود association. معنای آن این است که collection مربوط به subsetting association end یا با collectionی که subset می‌کند برابر است یا proper subset آن collection است. proper subsetting مستلزم آن است که superset تهی نباشد و subset memberهای کمتری داشته باشد. Subsetting رابطه‌ای در حوزه معناشناسی extensional است.

Specialization، برخلاف Subsetting، رابطه‌ای در حوزه معناشناسی intensional است؛ یعنی معیارهایی را مشخص می‌کند که membership در collection بر اساس آن‌ها تعریف می‌شود، نه خود membership را. یک classifier می‌تواند با افزودن یا بازتعریف featureها classifier دیگری را specialization کند؛ یک set نمی‌تواند set دیگری را specialization کند. دیدگاه ساده اما رایج و مفیدی وجود دارد که هرچه classifier تخصصی‌تر شود، extent collection یا collectionهای objectهای طبقه‌بندی‌شده محدودتر می‌شود. در مورد associationها، طبق این دیدگاه subsetting endها با specialization association هم‌بستگی مثبت دارد. این دیدگاه در مورد classifierهایی که به هر دلیل set تهی را نشان می‌دهند شکست می‌خورد؛ افزودن معیارهای جدید membership وقتی classifier از قبل denotation تهی دارد extent را محدودتر نمی‌کند.

Redefinition رابطه‌ای میان featureهای classifierها در یک specialization hierarchy است. redefinition می‌تواند برای تغییر تعریف یک feature استفاده شود و از این طریق classifier تخصصی را به‌جای featuring classifier اصلی معرفی کند، اما این کاربرد جنبی است. تفاوت در domain - اینکه redefinition روی featureها اعمال می‌شود - آن را از specialization متمایز می‌کند.

برای associationهای n-ary، lower multiplicity یک end معمولاً 0 است. lower multiplicity برابر 1 یا بیشتر برای end یک n-ary association به این معناست که برای هر ترکیب ممکن از valueهای endهای دیگر باید دست‌کم یک link وجود داشته باشد.

association می‌تواند یک composite aggregation، یعنی رابطه whole/part، را نمایش دهد. فقط binary associationها می‌توانند aggregation باشند. composite aggregation شکل قوی aggregation است که اقتضا می‌کند یک part instance در هر لحظه حداکثر در یک composite قرار داشته باشد. اگر composite حذف شود، معمولاً همه partهای آن نیز همراه آن حذف می‌شوند. توجه کنید part می‌تواند، هرجا مجاز باشد، پیش از حذف composite از آن جدا شود و در نتیجه به‌عنوان بخشی از composite حذف نشود. compositionها می‌توانند در قالب directed acyclic graph با ویژگی حذف transitive به هم متصل باشند؛ یعنی حذف element در یک بخش graph موجب حذف تمام elementهای subgraph زیر آن element نیز می‌شود. Composition با قرار دادن attribute isComposite=true روی part end association نمایش داده می‌شود.

Navigability به این معناست که instanceهای شرکت‌کننده در linkهای زمان اجرا، یعنی instanceهای association، می‌توانند از instanceهای شرکت‌کننده در linkهای endهای دیگر association به‌طور کارآمد در دسترس قرار گیرند. سازوکار دقیق این access وابسته به implementation است. اگر end navigable نباشد، access از endهای دیگر ممکن است ممکن باشد یا نباشد، و اگر ممکن باشد شاید کارآمد نباشد. توجه کنید toolهایی که روی modelهای UML کار می‌کنند از navigation associationها از non-navigable end منع نمی‌شوند.

نقاط تغییرپذیری معنایی

  • ترتیب و روش ایجاد part instanceها در یک composite تعریف نشده است.
  • رابطه منطقی میان derivation یک association و derivation endهای آن تعریف نشده است.
  • interaction میان association specialization با association end redefinition و subsetting تعریف نشده است.

نمادگذاری

هر association می‌تواند به‌شکل diamond، بزرگ‌تر از terminator روی line، رسم شود که برای هر association end یک solid line از diamond به classifierی که type آن end است متصل می‌شود. association با بیش از دو end فقط به این شکل قابل رسم است.

binary association معمولاً به‌صورت solid line بین دو classifier یا solid line از یک classifier به خودش، با دو end متمایز، رسم می‌شود. line می‌تواند از یک یا چند segment متصل تشکیل شده باشد. segmentهای line به‌خودی‌خود significance معنایی ندارند، اما ممکن است هنگام drag یا resize کردن association symbol برای tool معنای گرافیکی داشته باشند.

association symbol می‌تواند با موارد زیر adorn شود:

  • name association به‌صورت name string نزدیک association symbol نمایش داده می‌شود، اما نباید آن‌قدر نزدیک end باشد که با نام end اشتباه شود.
  • slash (/) پیش از name association، یا به‌جای name اگر name نمایش داده نشده باشد، نشان می‌دهد association derived است.
  • property string می‌تواند نزدیک association symbol قرار گیرد، اما باید آن‌قدر از endها فاصله داشته باشد که با property string متعلق به end اشتباه نشود. property string فهرستی comma-delimited از property expressionها درون brace است. property expression در ساده‌ترین حالت nameای مانند redefines یا subsets است.
  • در binary association رسم‌شده به‌صورت solid line، یک solid triangular arrowhead کنار name association یا به‌جای آن و در راستای line به سمت یک end، نشان می‌دهد آن end آخرین end در ordering association است. arrow نشان می‌دهد association باید به این شکل خوانده شود که end دور از جهت arrow با endی که arrow به آن اشاره می‌کند association دارد؛ شکل 11.6 را ببینید. این notation فقط برای documentation است و تفسیر معنایی عمومی ندارد و برای ثبت جزئیات application-specific رابطه میان classifierهای associated به کار می‌رود.
  • generalization میان associationها می‌تواند با generalization arrow میان association symbolها نمایش داده شود.

association end محل اتصال line نمایش‌دهنده association به icon، معمولاً box، classifier متصل است. یک name string می‌تواند نزدیک end line قرار گیرد تا name association end را نشان دهد. name اختیاری و suppressible است.

notationهای دیگری نیز می‌توانند نزدیک end line قرار گیرند:

  • multiplicity؛
  • BNF مربوط به property string روی association end به‌شکل زیر است:
<property-string> ::= '{' <end-property> [ ',' <end-property> ]* '}'
<end-property> ::= ('subsets' <property-name> | 'redefines' <end-name>)

که در آن <property-name> و <end-name> نام propertyها و association endهایی هستند که کاربر در model context تعریف کرده است. اگر association end navigable باشد، attribute-propertyهای تعریف‌شده برای attributeها نیز به‌عنوان end-property در property string آن association end مجازند.

توجه کنید association end به‌طور پیش‌فرض یک set را نمایش می‌دهد.

stick arrowhead روی end association نشان می‌دهد end navigable است. علامت کوچک x روی end association نشان می‌دهد end navigable نیست. visibility symbol می‌تواند روی navigable end اضافه شود تا visibility آن end را به‌عنوان attribute featuring classifier نشان دهد.

اگر association end derived باشد، می‌توان با قرار دادن slash پیش از name، یا به‌جای name اگر name نمایش داده نشده باشد، آن را نشان داد.

notation مربوط به attribute می‌تواند مطابق زیربند Notation بخش Property در صفحه 124 روی navigable end name اعمال شود.

composite aggregation همان notation binary association را دارد، اما در aggregate end یک diamond پر و solid قرار می‌گیرد.

گزینه‌های ارائه

هنگامی که دو line از یکدیگر عبور می‌کنند، crossing می‌تواند به‌صورت اختیاری با یک jog نیم‌دایره‌ای کوچک نشان داده شود تا مشخص شود lineها یکدیگر را قطع معنایی نمی‌کنند، مشابه diagramهای مدار الکتریکی.

برای نمایش navigation arrowها روی diagram می‌توان گزینه‌های مختلفی انتخاب کرد. در عمل معمولاً مخفی‌کردن برخی arrowها و crossها و نمایش فقط وضعیت‌های استثنایی مناسب است:

  • نمایش همه arrowها و xها؛ وجود و نبود navigation کاملاً صریح می‌شود.
  • مخفی‌کردن همه arrowها و xها؛ درباره navigation نمی‌توان نتیجه‌ای گرفت. این حالت مشابه هر موقعیتی است که information از view حذف شده باشد.
  • مخفی‌کردن arrow برای associationهای با navigability دوطرفه و نمایش arrow فقط برای associationهای one-way. در این حالت navigability دوطرفه از وضعیت نبود کامل navigation قابل تفکیک نیست، هرچند حالت دوم در عمل به‌ندرت رخ می‌دهد.

اگر دو یا چند aggregation به aggregate یکسانی برسند، می‌توان آن‌ها را به‌صورت tree رسم کرد و aggregation endها را در یک segment واحد merge نمود. هر adornment روی آن segment واحد روی همه aggregation endها اعمال می‌شود.

رهنمودهای سبک

lineها می‌توانند با سبک‌های مختلف، از جمله segmentهای orthogonal، oblique و curved، رسم شوند. انتخاب مجموعه مشخص line style بر عهده user است.

generalizationهای میان associationها بهتر است با color یا line width متفاوت از associationها رسم شوند.

مثال‌ها

شکل 11.6 - binary و ternary association:
شکل 11.6 - binary و ternary association:

یک binary association از Player به Year با نام PlayedInYear نمایش داده شده است. solid triangle ترتیب خواندن Player PlayedInYear Year را نشان می‌دهد. شکل همچنین ternary association میان Team، Year و Player را با endهای team، season و goalie نشان می‌دهد.

شکل 11.7 - association endها با adornmentهای مختلف:
شکل 11.7 - association endها با adornmentهای مختلف:

endهای a، b و d دارای name هستند؛ multiplicityها به‌ترتیب 0..1 روی a، * روی b، 1 روی end بدون name و 0..1 روی d هستند؛ b به‌صورت ordered مشخص شده و d با {subsets b} زیرمجموعه b است. برای instance کلاس C، collection d زیرمجموعه collection b است و معادل constraint زیر است:

context C inv: b->includesAll(d)
شکل 11.8 - نمونه‌های navigable end:
شکل 11.8 - نمونه‌های navigable end:
  • زوج بالایی AB یک binary association با دو navigable end را نشان می‌دهد.
  • زوج دوم CD binary association با دو non-navigable end است.
  • زوج سوم EF binary association با navigability نامشخص است.
  • زوج چهارم GH binary association با یک end navigable و end دیگر non-navigable است.
  • زوج پنجم IJ binary association با یک end navigable و end دیگر با navigability نامشخص است.

شکل 11.9 نشان می‌دهد notation مربوط به attribute را می‌توان برای association end در مالکیت class استفاده کرد، زیرا association end در مالکیت class خود یک attribute نیز هست. این notation می‌تواند همراه با line-arrow notation به کار رود تا کاملاً روشن شود attribute هم‌زمان association end نیز هست.

شکل 11.9 - نمونه notation مربوط به attribute برای navigable end در مالکیت end class:
شکل 11.9 - نمونه notation مربوط به attribute برای navigable end در مالکیت end class:

class A دارای b: B[*] است.

شکل 11.10 notation یک derived union را نشان می‌دهد. attribute با نام A::b به‌صورت strict union همه attributeهایی که آن را subset می‌کنند مشتق می‌شود. در این مورد فقط A1::b1 وجود دارد. بنابراین برای instance class A1، b1 زیرمجموعه b است و b از b1 مشتق می‌شود.

شکل 11.10 - نمونه derived union:
شکل 11.10 - نمونه derived union:

A::b با {union} و A1::b1 با {subsets b} نشان داده شده‌اند.

شکل 11.11 notation diamond سیاه برای composite aggregation را نشان می‌دهد.

شکل 11.11 - composite aggregation به‌صورت diamond سیاه نمایش داده می‌شود:
شکل 11.11 - composite aggregation به‌صورت diamond سیاه نمایش داده می‌شود:

Window composite اصلی است و اجزایی مانند Slider، Header و Panel با نقش‌های scrollbar، title و body به آن متصل‌اند.

11.3.2 Class

class مجموعه‌ای از objectها را توصیف می‌کند که specificationهای یکسانی از featureها، constraintها و معناشناسی را به اشتراک می‌گذارند. Constructs::Class تعریف Basic::Class را با Constructs::Classifier merge می‌کند.

توصیف

Class نوعی classifier است که featureهای آن attribute و operation هستند. attributeهای class با instanceهای Property که در مالکیت class قرار دارند نمایش داده می‌شوند. برخی از این attributeها ممکن است navigable endهای binary associationها را نمایش دهند.

Generalizationها

  • Classifier، صفحه 129

Attributeها

  • isAbstract: Boolean - attributeهای متناظر در Basic::Class و Abstractions::Classifier را بازتعریف می‌کند.

Associationها

  • ownedAttribute: Property[*] - attributeها، یعنی propertyهایی که در مالکیت class هستند. association ordered است و زیرمجموعه Classifier::attribute و Namespace::ownedMember محسوب می‌شود.
  • ownedOperation: Operation[*] - operationهای در مالکیت class. association ordered است و زیرمجموعه Classifier::feature و Namespace::ownedMember است.
  • superClass: Class[*] - superclassهای class را مشخص می‌کند و Classifier::general را بازتعریف می‌کند.

Constraintها

هیچ constraint اضافی وجود ندارد.

Operationهای اضافی

[1] operation با نام inherit override می‌شود تا propertyهای بازتعریف‌شده حذف شوند.

Class::inherit(inhs: Set(NamedElement)) : Set(NamedElement);
inherit = inhs->excluding(inh |
    ownedMember->select(oclIsKindOf(RedefinableElement))->select(redefinedElement->includes(inh)))

معناشناسی

هدف class مشخص‌کردن classification objectها و featureهایی است که ساختار و رفتار آن objectها را مشخص می‌کنند.

objectهای یک class باید برای هر attribute که member آن class است value داشته باشند، مطابق characteristics attribute مانند type و multiplicity.

هنگامی که object در class instantiate می‌شود، برای هر attribute class که default مشخصی دارد، اگر initial value attribute برای instantiation به‌طور صریح مشخص نشده باشد، default value specification ارزیابی می‌شود تا initial value آن attribute برای object تنظیم شود.

operationهای class را می‌توان روی object و با مجموعه مشخصی از substitutionها برای parameterهای operation فراخوانی کرد. operation invocation ممکن است value attributeهای همان object را تغییر دهد. همچنین اگر result type برای operation تعریف شده باشد، ممکن است valueای را به‌عنوان result برگرداند. operation invocation همچنین می‌تواند value attributeهای objectهای دیگری را تغییر دهد که مستقیم یا غیرمستقیم از object مورد invocation قابل navigation هستند، یا از output parameterهای آن، objectهای navigable از parameterهای آن، یا دیگر objectهای در scope اجرای operation قابل دسترسی‌اند. operation invocation همچنین ممکن است موجب creation و deletion objectها شود.

نمادگذاری

class با classifier symbol نمایش داده می‌شود. چون class پرکاربردترین classifier است، لازم نیست واژه class در guillemet بالای name نمایش داده شود. classifier symbol بدون metaclass نمایش‌داده‌شده در guillemet نشان‌دهنده class است.

گزینه‌های ارائه

class اغلب با سه compartment نمایش داده می‌شود. compartment میانی فهرست attributeها و compartment پایینی فهرست operationها را نگه می‌دارد.

attributeها یا operationها می‌توانند بر اساس visibility گروه‌بندی شوند. در این صورت visibility keyword یا symbol می‌تواند برای چند feature با visibility یکسان فقط یک بار نمایش داده شود.

برای نمایش جزئیات دیگر مانند constraintها یا تقسیم featureها می‌توان compartmentهای اضافی افزود.

رهنمودهای سبک

  • name class را centered و bold نمایش دهید.
  • حرف اول name class را، اگر character set از uppercase پشتیبانی می‌کند، uppercase کنید.
  • attributeها و operationها را left-justified و با font عادی نمایش دهید.
  • name attribute و operation را با lowercase آغاز کنید.
  • اگر class abstract است name آن را italic نمایش دهید.
  • هرجا لازم است attribute و operation کامل را نشان دهید و در contextهای دیگر یا صرفاً هنگام اشاره به class آن‌ها را suppress کنید.

مثال‌ها

شکل 11.12 - notation کلاس با سطوح مختلف جزئیات:
شکل 11.12 - notation کلاس با سطوح مختلف جزئیات:

سه نمایش از class Window ارائه شده است: جزئیات suppress‌شده، جزئیات سطح تحلیل و جزئیات سطح implementation. در نمونه مفصل featureهایی مانند size: Area = (100, 100)، visibility: Boolean = true، defaultSize: Rectangle، xWin: XWindow و operationهای display()، hide() و attachX(xWin: XWindow) نمایش داده شده‌اند.

شکل 11.13 - notation کلاس با attributeها و operationهای گروه‌بندی‌شده بر اساس visibility:
شکل 11.13 - notation کلاس با attributeها و operationهای گروه‌بندی‌شده بر اساس visibility:

در class Window بخش‌های public، protected و private به‌صورت جداگانه featureهای مربوطه را نمایش می‌دهند.

11.3.3 Classifier

یادداشت: برای propertyهای اضافی به Classifier در صفحه 129 مراجعه کنید.

توصیف

Constructs::Classifier در نمودار Classifiers تعریف شده است. Classifier یک Type است. نمودار Classes association میان Classifier و Property را اضافه می‌کند که attributeهای classifier را نمایش می‌دهد.

Generalizationها

  • Type، صفحه 133
  • Namespace، صفحه 146

Attributeها

هیچ attribute اضافی وجود ندارد.

Associationها

  • attribute: Property[*] - به همه Propertyهایی ارجاع می‌دهد که attribute مستقیم، یعنی نه inherited و نه imported، classifier هستند. زیرمجموعه Classifier::feature و derived union است.

Constraintها

هیچ constraint اضافی وجود ندارد.

معناشناسی

همه instanceهای classifier valueهایی متناظر با attributeهای classifier دارند.

نقاط تغییرپذیری معنایی

معناشناسی دقیق lifecycle مربوط به aggregation یک semantic variation point است.

نمادگذاری

attribute می‌تواند به‌صورت رشته متنی نمایش داده شود. قالب این رشته در زیربند Notation بخش Property در صفحه 124 مشخص شده است.

همه redefinitionها بهتر است با property string به‌شکل {redefines <x>} به‌صراحت نمایش داده شوند. featureهای matching در subclassها بدون redefinition صریح، redefinitionای ایجاد می‌کنند که لازم نیست در notation نشان داده شود. Redefinition مانع inheritance element بازتعریف‌شده به redefinition context می‌شود و از این طریق name element بازتعریف‌شده را برای استفاده مجدد، چه توسط element بازتعریف‌کننده و چه توسط element دیگر، آزاد می‌کند.

گزینه‌های ارائه

نمایش type، visibility، default، multiplicity و property string می‌تواند suppress شود حتی اگر در model value داشته باشند.

propertyهای منفرد یک attribute را می‌توان به‌صورت column به‌جای یک رشته پیوسته نمایش داد.

attribute compartment اغلب suppress می‌شود، به‌ویژه وقتی data type هیچ attributeای ندارد. operation compartment نیز می‌تواند suppress شود. برای compartment حذف‌شده separator line رسم نمی‌شود. اگر compartmentی suppress باشد، درباره وجود یا نبود element در آن نمی‌توان inference کرد. در صورت نیاز می‌توان از compartment name برای رفع ambiguity استفاده کرد.

compartmentهای اضافی ممکن است برای نمایش model propertyهای از پیش تعریف‌شده یا user-defined، مانند business rule، responsibility، variation، event handled یا exception raised، اضافه شوند. بیشتر compartmentها صرفاً list رشته‌ها هستند، هرچند formatهای پیچیده‌تر نیز ممکن است. appearance هر compartment ترجیحاً باید بر اساس content آن implicit باشد. در صورت نیاز می‌توان compartment name استفاده کرد.

data-type symbol دارای stereotype icon می‌تواند «collapsed» شود تا فقط stereotype icon را نشان دهد و name data type داخل rectangle یا زیر icon قرار گیرد. سایر contentهای data type suppress می‌شوند.

رهنمودهای سبک

  • name data type را centered و bold نمایش دهید.
  • keyword، از جمله stereotype name، را با font عادی داخل guillemet بالای data-type name centered کنید.
  • در languageهایی که uppercase و lowercase را متمایز می‌کنند nameها را با uppercase آغاز کنید.
  • attributeها و operationها را left-justified و با font عادی نمایش دهید.
  • name attribute و operation را با lowercase آغاز کنید.
  • هرجا لازم است attribute و operation کامل را نشان دهید و در سایر contextها یا referenceها آن‌ها را suppress کنید.

name attributeها معمولاً با lowercase آغاز می‌شوند. nameهای چندواژه‌ای اغلب با concatenation واژه‌ها ساخته می‌شوند و همه حرف‌ها lowercase هستند، جز حرف اول هر واژه به‌غیر از واژه نخست که uppercase می‌شود.

مثال‌ها

شکل 11.14 - نمونه‌های attribute
شکل 11.14 - نمونه‌های attribute
ClassA
name: String
shape: Rectangle
+ size: Integer [0..1]
/ area: Integer {readOnly}
height: Integer = 5
width: Integer

ClassB
id {redefines name}
shape: Square
height = 7
/ width

attributeهای شکل 11.14 به این صورت‌اند:

  • ClassA::name attributeای با type String است.
  • ClassA::shape attributeای با type Rectangle است.
  • ClassA::size attributeای public با type Integer و multiplicity برابر 0..1 است.
  • ClassA::area attributeای derived با type Integer و علامت read-only است.
  • ClassA::height attributeای از type Integer با default initial value برابر 5 است.
  • ClassA::width attributeای از type Integer است.
  • ClassB::id attributeای است که ClassA::name را بازتعریف می‌کند.
  • ClassB::shape attributeای است که ClassA::shape را بازتعریف می‌کند و type آن Square، specialization از Rectangle، است.
  • ClassB::height attributeای است که ClassA::height را بازتعریف می‌کند و برای instanceهای ClassB default برابر 7 دارد که default مقدار 5 در ClassA را override می‌کند.
  • ClassB::width attributeای derived است که ClassA::width غیرمشتق را بازتعریف می‌کند.

attribute را می‌توان با association notation نیز نمایش داد، بدون adornment در tail arrow؛ همان‌گونه که در شکل 11.15 آمده است.

شکل 11.15 - notation شبیه association برای attribute:
شکل 11.15 - notation شبیه association برای attribute:

Window از طریق property با نام size و multiplicity 1 به Area مرتبط است.

11.3.4 Operation

یادداشت: برای propertyهای اضافی به Operation در صفحه 151 مراجعه کنید.

توصیف

Constructs::Operation در نمودار Operations تعریف شده است. نمودار Classes association میان Operation و Class را اضافه می‌کند که ownership operation توسط class را نمایش می‌دهد.

Generalizationها

  • BehavioralFeature، صفحه 150

Attributeها

هیچ attribute اضافی وجود ندارد.

Associationها

  • class: Class[0..1] - association متناظر در Basic را بازتعریف می‌کند. زیرمجموعه RedefinableElement::redefinitionContext، NamedElement::namespace و Feature::featuringClassifier است.

Constraintها

هیچ constraint اضافی وجود ندارد.

معناشناسی

operation می‌تواند در مالکیت و namespace یک class قرار داشته باشد که context redefinition احتمالی آن را فراهم می‌کند.

11.3.5 Property

property یک structural feature از classifier است که instanceهای classifier را مشخص می‌کند. Constructs::Property تعریف Basic::Property را با Constructs::StructuralFeature merge می‌کند.

propertyای که از طریق ownedAttribute به classifierی غیر از association مرتبط است یک attribute را نمایش می‌دهد و ممکن است هم‌زمان association end نیز باشد. این property instance class را به یک value یا مجموعه‌ای از valueها از type attribute مرتبط می‌کند.

propertyای که از طریق memberEnd یا specializationهای آن به association مرتبط است یک end از association را نمایش می‌دهد. type property همان type end association است.

توصیف

Property وضعیت اعلان‌شده یک یا چند instance را بر حسب رابطه‌ای named با یک value یا چند value نمایش می‌دهد. وقتی property attribute یک classifier باشد، value یا valueها از طریق slotهای instance به instance classifier مرتبط می‌شوند. وقتی property association end باشد، value یا valueها به instance یا instanceهای end یا endهای دیگر association مربوط می‌شوند؛ به معناشناسی Association مراجعه کنید.

Property به‌طور غیرمستقیم subclass Constructs::TypedElement است. دامنه valueهای معتبر نمایش‌داده‌شده توسط property را می‌توان با تنظیم type property کنترل کرد.

Generalizationها

  • StructuralFeature، صفحه 132

Attributeها

  • isDerivedUnion: Boolean - مشخص می‌کند property به‌عنوان union همه propertyهایی که constraint شده‌اند آن را subset کنند مشتق می‌شود یا خیر. مقدار پیش‌فرض false است.
  • isReadOnly: Boolean - attribute متناظر در Basic::Property و Abstractions::StructuralFeature را بازتعریف می‌کند. مقدار پیش‌فرض false است.

Associationها

  • association: Association[0..1] - associationای که این property، در صورت وجود، member آن است.
  • owningAssociation: Association[0..1] - association مالک این property، در صورت وجود. زیرمجموعه Property::association، NamedElement::namespace و Feature::featuringClassifier است.
  • redefinedProperty: Property[*] - propertyهایی را ارجاع می‌دهد که توسط این property بازتعریف می‌شوند. زیرمجموعه RedefinableElement::redefinedElement است.
  • subsettedProperty: Property[*] - propertyهایی را ارجاع می‌دهد که این property constraint شده است subset آن‌ها باشد.
  • /opposite: Property[0..1] - در حالتی که property یکی از navigable endهای binary association با هر دو end navigable باشد، end دیگر را برمی‌گرداند.
  • class: Class[0..1] - Class مالک Property را ارجاع می‌دهد. زیرمجموعه NamedElement::namespace و Feature::featuringClassifier است.

Constraintها

[1] اگر این property در مالکیت class باشد، با binary association مرتبط باشد و end دیگر association نیز در مالکیت class باشد، opposite end دیگر را می‌دهد.

opposite =
     if owningAssociation->isEmpty() and association.memberEnd->size() = 2 then
         let otherEnd = (association.memberEnd - self)->any() in
              if otherEnd.owningAssociation->isEmpty() then otherEnd else Set{} endif
     else Set {}
     endif

[2] specialization یک composite aggregation نیز composite aggregation است. multiplicity یک composite aggregation نباید upper bound بزرگ‌تر از 1 داشته باشد.

isComposite implies (upperBound()->isEmpty() or upperBound() <= 1)

[3] Subsetting فقط زمانی مجاز است که context مربوط به subsetting property با context مربوط به subsetted property conform باشد.

subsettedProperty->notEmpty() implies
    (subsettingContext()->notEmpty() and subsettingContext()->forAll (sc |
        subsettedProperty->forAll(sp |
             sp.subsettingContext()->exists(c | sc.conformsTo(c)))))

[4] redefined property باید از classifier عمومی‌تری که redefining property را در بر می‌گیرد inherited شده باشد.

if (redefinedProperty->notEmpty()) then
 (redefinitionContext->notEmpty() and
     redefinedProperty->forAll(rp|
   ((redefinitionContext->collect(fc|
     fc.allParents()))->asSet())->
       collect(c| c.allFeatures())->asSet()->
         includes(rp))

[5] subsetting property می‌تواند type مربوط به subsetted property را strengthen کند و upper bound آن ممکن است کوچک‌تر باشد.

subsettedProperty->forAll(sp |
    type.conformsTo(sp.type) and
        ((upperBound()->notEmpty() and sp.upperBound()->notEmpty()) implies
             upperBound()<=sp.upperBound() ))

[6] فقط navigable property می‌تواند readOnly علامت‌گذاری شود.

isReadOnly implies isNavigable()

[7] derived union باید derived باشد.

isDerivedUnion implies isDerived

[8] derived union باید read only باشد.

isDerivedUnion implies isReadOnly

[9] value مربوط به isComposite فقط وقتی true است که aggregation برابر composite باشد.

isComposite = (self.aggregation = #composite)

[10] Property نمی‌تواند توسط Property دیگری با همان name subset شود.

if (self.subsettedProperty->notEmpty()) then
   self.subsettedProperty->forAll(sp | sp.name <> self.name)

Operationهای اضافی

[1] query با نام isConsistentWith() برای هر دو Property در contextی که redefinition ممکن است تعیین می‌کند آیا redefinition از نظر منطقی consistent خواهد بود. redefining property وقتی با redefined property consistent است که type آن با type redefined property conform باشد، multiplicity آن، در صورت مشخص‌شدن، داخل multiplicity redefined property قرار گیرد و اگر redefined property derived است، redefining property نیز derived باشد.

Property::isConsistentWith(redefinee : RedefinableElement) : Boolean
pre: redefinee.isRedefinitionContextValid(self)
isConsistentWith = redefinee.oclIsKindOf(Property) and
    let prop : Property = redefinee.oclAsType(Property) in
         (prop.type.conformsTo(self.type) and
         ((prop.lowerBound()->notEmpty() and self.lowerBound()->notEmpty()) implies
              prop.lowerBound() >= self.lowerBound()) and
              ((prop.upperBound()->notEmpty() and self.upperBound()->notEmpty()) implies
                   prop.lowerBound() <= self.lowerBound()) and
                   (self.isDerived implies prop.isDerived) and (self.isComposite implies prop.isComposite))

[2] query با نام subsettingContext() context مربوط به subsetting property را برمی‌گرداند. در مورد attribute، context همان classifier متناظر است؛ در مورد association end، context همه classifierهای endهای دیگر است.

Property::subsettingContext() : Set(Type)
subsettingContext =
    if association->notEmpty()
    then association.endType-type
    else if classifier->notEmpty() then Set{classifier} else Set{} endif
    endif

[3] query با نام isNavigable نشان می‌دهد آیا navigation از طریق property ممکن است یا خیر.

Property::isNavigable() : Boolean
IsNavigable = not classifier->isEmpty() or
             association.owningAssociation.navigableOwnedEnd->includes(self)

[4] query با نام isAttribute() در صورتی true است که Property به‌عنوان attribute یک classifier تعریف شده باشد.

context Property::isAttribute(p : Property) : Boolean
    post: result = Classifier.allInstances->exists(c| c.attribute->includes(p))

معناشناسی

وقتی property از طریق ownedAttribute در مالکیت classifierی غیر از association قرار دارد، attribute مربوط به class یا data type را نمایش می‌دهد. وقتی از طریق memberEnd یا یکی از specializationهای آن به association مرتبط باشد، یک end association را نمایش می‌دهد. در هر دو حالت، هنگام instantiate شدن، property یک value یا collectionی از valueها را نمایش می‌دهد که با instance یک type - یا در مورد ternary و associationهای مرتبه بالاتر، بیش از یک type - مرتبط‌اند. این مجموعه typeها «context» مربوط به property نامیده می‌شود؛ برای attribute، context owning classifier است و برای association end، context مجموعه typeهای end یا endهای دیگر association است.

value یا collectionی از valueها که برای property در instance context آن instantiate می‌شود با type property conform است. Property از MultiplicityElement inheritance دارد و بنابراین امکان مشخص‌کردن multiplicity boundها را فراهم می‌کند. این boundها اندازه collection را محدود می‌کنند. معمولاً و به‌طور پیش‌فرض maximum bound برابر 1 است.

Property همچنین metaattributeهای isUnique و isOrdered را به ارث می‌برد. وقتی isUnique=true، که default است، collection valueها نمی‌تواند duplicate داشته باشد. وقتی isOrdered=true، با default برابر false، collection valueها ordered است. ترکیب این دو، type مربوط به collection property را به‌شکل زیر مشخص می‌کند:

جدول 11.1 - typeهای collection برای propertyها

isOrdered isUnique Collection type
false true Set
true true OrderedSet
false false Bag
true false Sequence

اگر برای property default مشخص شده باشد، در هنگام creation یک instance از property و در نبود setting مشخص برای property یا constraintی در model که value مشخصی را برای property الزام کند، default ارزیابی می‌شود. default ارزیابی‌شده سپس initial value یا valueهای property می‌شود.

اگر property derived باشد، value یا valueهای آن می‌توانند از information دیگر محاسبه شوند. actionهای مربوط به derived property همان رفتار actionهای property غیرمشتق را دارند. derived propertyها اغلب به‌صورت read-only مشخص می‌شوند، یعنی client نمی‌تواند valueها را مستقیماً تغییر دهد. اما اگر derived property قابل تغییر باشد، از implementation انتظار می‌رود تغییرات مناسب را در model اعمال کند تا همه constraintها، به‌ویژه derivation constraint مربوط به derived property، برآورده شوند. derivation یک derived property ممکن است با constraint مشخص شود.

name و visibility یک property لازم نیست با propertyی که بازتعریف می‌کند یکسان باشد.

derived property می‌تواند property غیرمشتق را بازتعریف کند. implementation باید اطمینان دهد constraintهای implied توسط derivation در صورت update شدن property حفظ می‌شوند.

اگر برای یک Property مقدار پیش‌فرض مشخص شده باشد و آن Property، Property دیگری را که آن نیز مقدار پیش‌فرض دارد بازتعریف کند، مقدار پیش‌فرض Property بازتعریف‌کننده به‌جای مقدار پیش‌فرض عمومی‌تر Property بازتعریف‌شده استفاده می‌شود.

اگر یک Property قابل پیمایش (navigable) به‌صورت readOnly علامت‌گذاری شده باشد، پس از آنکه مقدار اولیه‌ای به آن اختصاص یافت دیگر نمی‌توان آن را به‌روزرسانی کرد.

یک Property می‌تواند به‌عنوان زیرمجموعه (subset) Property دیگری علامت‌گذاری شود، مشروط بر اینکه هر Element در context مربوط به Property زیرمجموعه‌ساز با Element متناظر در context مربوط به Property زیرمجموعه‌شده conform باشد. در این حالت collection مرتبط با یک instance از Property زیرمجموعه‌ساز باید در collection مرتبط با instance متناظر از Property زیرمجموعه‌شده قرار داشته باشد یا با آن یکسان باشد.

یک Property می‌تواند به‌عنوان derived union علامت‌گذاری شود. یعنی collection مربوط به valueهایی که آن Property در یک context مشخص می‌کند، از اجتماع دقیق همه valueهایی مشتق می‌شود که در همان context توسط Propertyهایی تعیین می‌شوند که به‌عنوان subset آن تعریف شده‌اند. اگر upper bound multiplicity Property برابر 1 باشد، این امر به این معناست که valueهای همه subsetها باید null یا یکسان باشند.

نمادگذاری

نمادگذاری عمومی زیر برای Propertyها تعریف می‌شود. برخی specializationهای Property ممکن است شکل‌های نمادگذاری دیگری نیز داشته باشند که در زیربخش Notation همان Classها توضیح داده شده‌اند.

<property> ::= [<visibility>] ['/'] <name> [':' <prop-type>] ['[' <multiplicity> ']'] ['=' <default>]
               ['{' <prop-modifier> [',' <prop-modifier>]* '}']

که در آن:

  • <visibility>، visibility مربوط به Property است؛ بخش VisibilityKind در صفحه 88 را ببینید.
<visibility> ::= '+' | '-'
  • / نشان می‌دهد Property مشتق‌شده (derived) است.
  • <name> نام Property است.
  • <prop-type> نام Classifierای است که Type مربوط به Property محسوب می‌شود.
  • <multiplicity> multiplicity مربوط به Property است. اگر این بخش حذف شود، multiplicity برابر 1، یعنی دقیقاً یک، در نظر گرفته می‌شود؛ بخش MultiplicityElement در صفحه 131 را ببینید.
  • <default> عبارتی است که به default value یا valueهای Property ارزیابی می‌شود.
  • <prop-modifier> یک modifier قابل اعمال بر Property را نشان می‌دهد.
<prop-modifier> ::= 'readOnly' | 'union' | 'subsets' <property-name> |
                    'redefines' <property-name> | 'ordered' | 'unique' | <prop-constraint>

در این تعریف:

  • readOnly یعنی Property فقط‌خواندنی است.
  • union یعنی Property یک derived union از subsetهای خود است.
  • subsets <property-name> یعنی Property زیرمجموعه مناسب Property مشخص‌شده با <property-name> است.
  • redefines <property-name> یعنی Property یک Property به‌ارث‌رسیده را که با <property-name> شناسایی می‌شود بازتعریف می‌کند.
  • ordered یعنی Property مرتب‌شده است.
  • unique یعنی در Property چندمقداری duplicate وجود ندارد.
  • <prop-constraint> عبارتی است که یک Constraint قابل اعمال بر Property را مشخص می‌کند.

همه redefinitionها باید با استفاده از رشته Property به‌شکل {redefines <x>} به‌صورت صریح مشخص شوند. Redefinition مانع inheritance شدن Element بازتعریف‌شده در redefinition context می‌شود و در نتیجه نام Element بازتعریف‌شده را برای استفاده مجدد، چه توسط Element بازتعریف‌کننده و چه توسط Element دیگری، آزاد می‌کند.

11.4 نمودار Classifiers

نمودار Classifiers از Package Constructs مفاهیم Classifier، TypedElement، MultiplicityElement، RedefinableElement، Feature و StructuralFeature را مشخص می‌کند. در هر مورد، این مفاهیم از تعریف‌های متناظر خود در Basic و Abstractions توسعه یافته و بازتعریف می‌شوند.

شکل 11.16 - نمودار Classifiers از Package Constructs
شکل 11.16 - نمودار Classifiers از Package Constructs

11.4.1 Classifier

توصیف

Constructs::Classifier تعریف‌های Classifier از Basic و Abstractions را merge می‌کند. همچنین specializationهایی از Constructs::Namespace و Constructs::Type به آن افزوده می‌شود.

Generalizationها

  • Type، صفحه 133
  • Namespace، صفحه 146

Attributeها

Attribute اضافی ندارد.

Associationها

  • feature: Feature[*] - Association متناظر در Abstractions را بازتعریف می‌کند، زیرمجموعه Namespace::member است و یک derived union محسوب می‌شود. توجه کنید ممکن است memberهایی از Classifier وجود داشته باشند که Type آن‌ها Feature باشد اما در این Association قرار نگیرند؛ برای مثال Featureهای inherited.

Constraintها

Constraint اضافی ندارد.

معناشناسی

معناشناسی اضافی ندارد.

نمادگذاری

مطابق تعریف موجود در Abstractions است.

11.4.2 Feature

توصیف

Constructs::Feature تعریف Feature از Abstractions را بازاستفاده می‌کند و یک specialization از Constructs::RedefinableElement به آن می‌افزاید.

Generalizationها

  • RedefinableElement، صفحه 131

Attributeها

Attribute اضافی ندارد.

Associationها

  • featuringClassifier: Classifier[1..*] - Association متناظر در Abstractions را بازتعریف می‌کند. این Association یک derived union است.

Constraintها

Constraint اضافی ندارد.

معناشناسی

معناشناسی اضافی ندارد.

نمادگذاری

مطابق تعریف موجود در Abstractions است.

11.4.3 MultiplicityElement

توصیف

Constructs::MultiplicityElement تعریف MultiplicityElement از Abstractions را بازاستفاده می‌کند و یک specialization از Constructs::Element به آن می‌افزاید.

Generalizationها

  • Element، صفحه 106

Attributeها

Attribute اضافی ندارد.

Associationها

Association اضافی ندارد.

Constraintها

Constraint اضافی ندارد.

معناشناسی

معناشناسی اضافی ندارد.

نمادگذاری

مطابق تعریف موجود در Abstractions است.

11.4.4 RedefinableElement

توصیف

Constructs::RedefinableElement تعریف RedefinableElement از Abstractions را بازاستفاده می‌کند و یک specialization از Constructs::NamedElement به آن می‌افزاید.

Generalizationها

  • NamedElement، صفحه 145

Attributeها

Attribute اضافی ندارد.

Associationها

  • /redefinedElement: RedefinableElement[*] - این derived union از Abstractions بازتعریف می‌شود.
  • /redefinitionContext: Classifier[*] - این derived union از Abstractions بازتعریف می‌شود.

Constraintها

Constraint اضافی ندارد.

معناشناسی

معناشناسی اضافی ندارد.

نمادگذاری

مطابق تعریف موجود در Abstractions است.

11.4.5 StructuralFeature

توصیف

Constructs::StructuralFeature تعریف StructuralFeature از Abstractions را بازاستفاده می‌کند و specializationهایی از Constructs::Feature، Constructs::TypedElement و Constructs::MultiplicityElement به آن می‌افزاید.

با specialization شدن MultiplicityElement، یک multiplicity پشتیبانی می‌شود که cardinalityهای معتبر برای مجموعه valueهای مرتبط با instantiate شدن StructuralFeature را مشخص می‌کند.

Generalizationها

  • Feature، صفحه 130
  • TypedElement، صفحه 133
  • MultiplicityElement، صفحه 131

Attributeها

Attribute اضافی ندارد.

Associationها

Association اضافی ندارد.

Constraintها

Constraint اضافی ندارد.

معناشناسی

معناشناسی اضافی ندارد.

نمادگذاری

مطابق تعریف موجود در Abstractions است.

11.4.6 Type

توصیف

Constructs::Type تعریف‌های Type از Basic و Abstractions را merge می‌کند و یک specialization از Constructs::NamedElement به آن می‌افزاید.

Generalizationها

  • NamedElement، صفحه 145
  • PackageableElement، صفحه 147

Attributeها

Attribute اضافی ندارد.

Associationها

Association اضافی ندارد.

Constraintها

Constraint اضافی ندارد.

معناشناسی

معناشناسی اضافی ندارد.

نمادگذاری

مطابق تعریف موجود در Abstractions است.

11.4.7 TypedElement

توصیف

Constructs::TypedElement تعریف‌های TypedElement از Basic و Abstractions را merge می‌کند و یک specialization از Constructs::NamedElement به آن می‌افزاید.

Generalizationها

  • NamedElement، صفحه 145

Attributeها

  • type: Classifier[1] - Attributeهای متناظر در Basic و Abstractions را بازتعریف می‌کند.

Associationها

Association اضافی ندارد.

Constraintها

Constraint اضافی ندارد.

معناشناسی

معناشناسی اضافی ندارد.

نمادگذاری

مطابق تعریف موجود در Abstractions است.

11.5 نمودار Constraints

نمودار Constraints از Package Constructs سازه Constraint را مشخص می‌کند و Featureهایی به سازه Namespace می‌افزاید.

شکل 11.17 - نمودار Constraints از Package Constructs
شکل 11.17 - نمودار Constraints از Package Constructs

11.5.1 Constraint

توصیف

Constructs::Constraint تعریف Constraint از Abstractions::Constraints را بازاستفاده می‌کند و یک specialization به PackageableElement می‌افزاید.

Generalizationها

  • PackageableElement، صفحه 147

Attributeها

Attribute اضافی ندارد.

Associationها

  • constrainedElement: Element - Property متناظر در Abstractions را بازتعریف می‌کند.
  • context: Namespace[0..1] - Namespaceای را مشخص می‌کند که context ارزیابی این Constraint است. زیرمجموعه NamedElement::namespace است.

امتیاز کاربران به این مقاله

☆☆☆☆☆

0 نفر امتیاز داده اند. میانگین: 0.0 از 5

 

0 نظر

نظر محترم شما در مورد مقاله های وب سایت برنامه نویسی و پایگاه داده

نظرات محترم شما در خدمات رسانی بهتر ما را یاری می نمایند. لطفا اگر مایل بودید یک نظر ما را مهمان فرمائید. آدرس ایمیل و وب سایت شما نمایش داده نخواهد شد.

0 / 500

اطلاعات تماس

  • آدرس:اصفهان-خیابان ام کلثوم غربی - بعد خیابان تخم چی - بیست متر بعد از پیتزا ننه شب - کوچه تعمیر گاه سمار زغالی - پلاک 354 - درب مشکی - طبقه هفتم
  • آدرس ایمیل:najafzade@gmail.com
  • وب سایت:http://www.a00b.com/
  • تلفن ثابت:(+98)9131253620
  • تلفن همراه:09131253620