مقاله فرزند 1 - NewsID: 2463 - گروه: 10 - محدوده منبع: صفحات 41-70 PDFفروش یا انتشار این ترجمه منوط به داشتن مجوز لازم از صاحب حقوق اثر است.
9 Core::Abstractions
package Abstractions از InfrastructureLibrary::Core به چند package ریزدانهتر تقسیم شده است تا هنگام ایجاد metamodelها استفاده مجدد انعطافپذیر تسهیل شود.
شکل 9.1 - package Core در مالکیت package InfrastructureLibrary قرار دارد و چند subpackage را شامل میشود.
تمام subpackageهای Abstractions در شکل 9.2 نشان داده شدهاند.
شکل 9.2 - package Abstractions شامل چند subpackage است که همگی در این بند مشخص میشوند:
Elements، Ownerships، Relationships، Namespaces، Expressions، Comments، Visibilities، Constraints، Classifiers، Multiplicities، Literals، TypedElements، Super، StructuralFeatures، MultiplicityExpressions، Generalizations، Instances، BehavioralFeatures، Changeabilities و Redefinitions.
محتوای هر subpackage از Abstractions در یک زیربند جداگانه در ادامه توصیف میشود.
9.1 package BehavioralFeatures
subpackage BehavioralFeatures از package Abstractions کلاسهای پایه برای مدلسازی featureهای پویا در model elementها را مشخص میکند.
شکل 9.3 - package BehavioralFeatures
شکل 9.4 - عناصر تعریفشده در package BehavioralFeatures
9.1.1 BehavioralFeature
یک behavioral feature، featureای از یک classifier است که جنبهای از رفتار instanceهای آن را مشخص میکند.
توصیف
BehavioralFeature یک metaclass انتزاعی است که Feature و Namespace را تخصصی میکند. انواع مختلف جنبههای رفتاری با subclassهای BehavioralFeature مدل میشوند.
Generalizationها
Feature، صفحه 36
Namespace، صفحه 72
Attributeها
هیچ attribute اضافی وجود ندارد.
Associationها
/parameter: Parameter[*] - parameterهای BehavioralFeature را مشخص میکند. زیرمجموعه Namespace::member است. این association یک derived union و ordered است.
Constraintها
هیچ constraint اضافی وجود ندارد.
Operationهای اضافی
[1] query با نام isDistinguishableFrom() تعیین میکند آیا دو BehavioralFeature میتوانند در یک Namespace همزمان وجود داشته باشند یا خیر. این query مشخص میکند که signatureهای آنها باید متفاوت باشد.
BehavioralFeature::isDistinguishableFrom(n: NamedElement, ns: Namespace): Boolean;
isDistinguishableFrom =
if n.oclIsKindOf(BehavioralFeature)
then
if ns.getNamesOfMember(self)->intersection(ns.getNamesOfMember(n))->notEmpty()
then Set{}->including(self)->including(n)->isUnique( bf | bf.parameter->collect(type))
else true
endif
else true
endif
معناشناسی
فهرست parameterها ترتیب و type آرگومانهایی را توصیف میکند که هنگام فراخوانی BehavioralFeature قابل ارائهاند.
نمادگذاری
نمادگذاری اضافی وجود ندارد.
9.2 Parameter
parameter مشخصات آرگومانی است که برای انتقال اطلاعات به داخل یا خارج از فراخوانی یک behavioral feature استفاده میشود.
توصیف
Parameter یک metaclass انتزاعی است که TypedElement و NamedElement را تخصصی میکند.
Generalizationها
TypedElement، صفحه 86
NamedElement، صفحه 71
Attributeها
هیچ attribute اضافی وجود ندارد.
Associationها
هیچ association اضافی وجود ندارد.
Constraintها
هیچ constraint اضافی وجود ندارد.
معناشناسی
parameter آرگومانهایی را مشخص میکند که به داخل یا خارج از فراخوانی یک behavioral element مانند operation منتقل میشوند. type یک parameter محدود میکند چه valueهایی میتوانند منتقل شوند.
ممکن است برای parameter نامی تعیین شود؛ در این صورت آن نام parameter را در میان parameterهای همان behavioral feature بهطور یکتا مشخص میکند. اگر parameter بدون نام باشد، تنها با جایگاه خود در فهرست ordered parameterها از دیگران متمایز میشود.
نمادگذاری
نمادگذاری عمومی وجود ندارد. subclassهای مشخص BehavioralFeature نمادگذاری parameterهای خود را تعریف میکنند.
رهنمود سبک
نام parameter معمولاً با حرف کوچک آغاز میشود.
9.3 package Changeabilities
subpackage Changeabilities از package Abstractions مشخص میکند یک structural feature چه زمانی میتواند توسط client تغییر داده شود.
شکل 9.5 - package Changeabilities
شکل 9.6 - عناصر تعریفشده در package Changeabilities
9.3.1 StructuralFeature (بهصورت تخصصیشده)
توصیف
StructuralFeature تخصصی میشود تا attributeای افزوده شود که تعیین کند آیا client اجازه دارد value آن را تغییر دهد یا خیر.
Generalizationها
StructuralFeature، صفحه 80
Attributeها
isReadOnly: Boolean - مشخص میکند آیا value مربوط به feature میتواند توسط client تغییر داده شود یا خیر. مقدار پیشفرض false است.
Associationها
هیچ association اضافی وجود ندارد.
Constraintها
هیچ constraint اضافی وجود ندارد.
معناشناسی
معناشناسی اضافی وجود ندارد.
نمادگذاری
یک structural feature فقطخواندنی با {readOnly} بهعنوان بخشی از نمادگذاری structural feature نمایش داده میشود. این annotation میتواند مخفی شود؛ در این صورت تعیین مقدار آن از روی نمودار ممکن نیست.
گزینه ارائه
میتوان مخفیکردن این annotation را فقط زمانی مجاز دانست که isReadOnly=false باشد. در این حالت هرجا {readOnly} نمایش داده نشده باشد، میتوان مقدار false را فرض کرد.
9.4 package Classifiers
package Classifiers در package Abstractions یک generalization انتزاعی برای طبقهبندی instanceها بر اساس featureهای آنها مشخص میکند.
شکل 9.7 - package Classifiers
شکل 9.8 - عناصر تعریفشده در package Classifiers
9.4.1 Classifier
classifier یک طبقهبندی از instanceهاست؛ مجموعهای از instanceها را توصیف میکند که featureهای مشترک دارند.
توصیف
classifier یک namespace است که memberهای آن میتوانند featureها را شامل شوند. Classifier یک metaclass انتزاعی است.
Generalizationها
Attributeها
هیچ attribute اضافی وجود ندارد.
Associationها
/feature : Feature[*] - هر feature تعریفشده در classifier را مشخص میکند. زیرمجموعه Namespace::member است و یک derived union محسوب میشود.
Operationهای اضافی
[1] query با نام allFeatures() همه featureهای موجود در namespace مربوط به classifier را برمیگرداند. بهطور کلی، بهواسطه سازوکارهایی مانند inheritance، این مجموعه از مجموعه feature بزرگتر خواهد بود.
Classifier::allFeatures(): Set(Feature);
allFeatures = member->select(oclIsKindOf(Feature))
Constraintها
هیچ constraint اضافی وجود ندارد.
معناشناسی
classifier طبقهبندی instanceها بر پایه featureهای آنهاست.
نمادگذاری
نمادگذاری پیشفرض classifier یک مستطیل با خط محیطی پیوسته است که نام classifier را در خود دارد و میتواند compartmentهایی داشته باشد که با خطوط افقی جدا شدهاند و featureها یا دیگر memberهای classifier را نمایش میدهند. type مشخص classifier را میتوان داخل guillemetها بالای نام نشان داد. برخی specializationهای Classifier نمادگذاری متمایز خود را دارند.
گزینههای ارائه
هر compartment را میتوان مخفی کرد. برای compartment مخفیشده خط جداکننده رسم نمیشود. اگر compartmentی مخفی باشد، نمیتوان درباره وجود یا نبود elementها در آن نتیجهگیری کرد. در صورت نیاز میتوان از نام compartment برای رفع ابهام استفاده کرد.
9.4.2 Feature
feature یک ویژگی رفتاری یا ساختاری instanceهای classifierها را اعلان میکند.
توصیف
feature یک خصوصیت رفتاری یا ساختاری instanceهای classifierها را اعلان میکند. Feature یک metaclass انتزاعی است.
Generalizationها
Attributeها
هیچ attribute اضافی وجود ندارد.
Associationها
/featuringClassifier: Classifier[0..*] - classifierهایی که این Feature را بهعنوان feature در اختیار دارند. این یک derived union است.
Constraintها
هیچ constraint اضافی وجود ندارد.
معناشناسی
Feature یک خصوصیت را برای featuring classifierهای خود نمایش میدهد. یک Feature میتواند feature چند classifier باشد.
نمادگذاری
نمادگذاری عمومی وجود ندارد. subclassها نمادگذاری اختصاصی خود را تعریف میکنند.
9.5 package Comments
package Comments از package Abstractions قابلیت عمومی الصاق comment به هر element را تعریف میکند.
شکل 9.9 - package Comments
شکل 9.10 - عناصر تعریفشده در package Comments
9.5.1 Comment
comment یک annotation متنی است که میتواند به مجموعهای از elementها متصل شود.
توصیف
comment امکان افزودن انواع remark به elementها را فراهم میکند. comment هیچ اثر معنایی ندارد، اما ممکن است شامل اطلاعاتی باشد که برای modeler مفید است.
هر element میتواند مالک یک comment باشد.
Generalizationها
هیچکدام.
Attributeها
body: String - رشتهای را مشخص میکند که متن comment است.
Associationها
annotatedElement: Element[*] - به Element یا Elementهایی ارجاع میدهد که comment درباره آنهاست.
Constraintها
هیچ constraint اضافی وجود ندارد.
معناشناسی
Comment معناشناسی elementهای annotationشده را تغییر نمیدهد، اما میتواند اطلاعات مفیدی برای خواننده model ارائه کند.
نمادگذاری
Comment بهشکل مستطیلی با گوشه بالای راست تاخورده نمایش داده میشود که با عنوان «note symbol» نیز شناخته میشود. مستطیل body مربوط به Comment را در خود دارد. اتصال به هر element مورد annotation با یک خطچین جداگانه نشان داده میشود.
گزینههای ارائه
اگر ارتباط note با elementهای annotationشده از context روشن باشد یا در نمودار اهمیت نداشته باشد، خطچین اتصال میتواند مخفی شود.
مثال
شکل 9.11 نمونه نمادگذاری Comment را نشان میدهد: یک note با متن «این class پس از جلسه Alan Wright با تیم برنامهریزی مأموریت اضافه شد» به class با نام Account متصل است.
شکل 9.11 - نمادگذاری Comment
9.5.2 Element
توصیف
یک element میتواند مالک comment باشد.
Attributeها
هیچ attribute اضافی وجود ندارد.
Generalizationها
Element (as specialized)، صفحه 74
Associationها
ownedComment: Comment[*] - Commentهایی که در مالکیت این element هستند. زیرمجموعه Element::ownedElement است.
Constraintها
هیچ constraint اضافی وجود ندارد.
معناشناسی
commentهای یک Element معناشناسی جدیدی اضافه نمیکنند، اما میتوانند اطلاعات مفیدی برای خواننده model ارائه دهند.
نمادگذاری
نمادگذاری اضافی وجود ندارد.
9.6 package Constraints
subpackage Constraints از package Abstractions اجزای بنیادیای را مشخص میکند که برای افزودن اطلاعات معنایی اضافی به یک element قابل استفادهاند.
شکل 9.12 - package Constraints
شکل 9.13 - عناصر تعریفشده در package Constraints
9.6.1 Constraint
constraint یک شرط یا محدودیت است که به زبان طبیعی یا یک زبان قابلخواندن توسط ماشین بیان میشود تا بخشی از معناشناسی یک element را اعلان کند.
توصیف
Constraint شامل یک ValueSpecification است که معناشناسی اضافی برای یک یا چند element را مشخص میکند. برخی انواع constraint، مانند constraint نوع xor روی association، در UML از پیش تعریف شدهاند و برخی دیگر میتوانند توسط کاربر تعریف شوند. Constraint تعریفشده توسط کاربر با استفاده از یک زبان مشخص توصیف میشود که syntax و interpretation آن بر عهده ابزار است. یکی از زبانهای از پیش تعریفشده برای نوشتن constraintها OCL است. در برخی موقعیتها ممکن است یک زبان برنامهنویسی مانند Java برای بیان constraint مناسب باشد و در موقعیتهای دیگر میتوان از زبان طبیعی استفاده کرد.
Constraint شرطی - یعنی یک expression بولی - است که extension مربوط به element وابسته را فراتر از محدودیتهایی که دیگر سازههای زبان اعمال میکنند محدود میسازد.
Constraint میتواند یک نام اختیاری داشته باشد، هرچند معمولاً بدون نام است.
Generalizationها
Attributeها
هیچ attribute اضافی وجود ندارد.
Associationها
constrainedElement: Element[*] - مجموعه ordered از Elementهایی که این Constraint به آنها ارجاع میدهد.
context: Namespace[0..1] - Namespaceای را مشخص میکند که context ارزیابی constraint است. زیرمجموعه NamedElement::namespace است.
specification: ValueSpecification[1] - شرطی که هنگام ارزیابی باید true باشد تا constraint برآورده شود. زیرمجموعه Element::ownedElement است.
Constraintها
[1] value specification یک constraint باید به یک Boolean value ارزیابی شود. این constraint در OCL قابل بیان نیست.
[2] ارزیابی value specification یک constraint نباید side effect داشته باشد. این constraint در OCL قابل بیان نیست.
[3] یک constraint نمیتواند روی خودش اعمال شود.
not constrainedElement->includes(self)
معناشناسی
Constraint اطلاعات معنایی اضافی متصل به elementهای constrained را نمایش میدهد. constraint یک assertion است که محدودیتی را مشخص میکند که طراحی صحیح سامانه باید آن را برآورده سازد. constrained elementها همان elementهایی هستند که برای ارزیابی constraint specification لازماند. افزون بر این، context مربوط به Constraint قابل دسترسی است و میتواند بهعنوان namespace برای تفسیر نامهای استفادهشده در specification به کار رود. برای مثال، در OCL از self برای اشاره به context element استفاده میشود.
Constraintها اغلب بهصورت رشته متنی در یک زبان بیان میشوند. اگر از زبان رسمی مانند OCL استفاده شود، ابزارها ممکن است بتوانند برخی جنبههای constraint را اعتبارسنجی کنند.
بهطور کلی ownerهای ممکن متعددی برای یک Constraint وجود دارد. تنها محدودیت این است که owning element باید به constrainedElements دسترسی داشته باشد.
owner مربوط به Constraint تعیین میکند constraint specification در چه زمانی ارزیابی شود. برای مثال، این سازوکار به یک Operation اجازه میدهد مشخص کند Constraint یک precondition است یا postcondition.
نمادگذاری
Constraint مطابق BNF زیر بهصورت رشته متنی درون braceها {} نمایش داده میشود:
constraint ::= '{' [ <name> ':' ] <Boolean expression> '}'
برای elementی که notation آن یک رشته متنی است، مانند attribute، رشته constraint میتواند پس از رشته متنی element و درون brace قرار گیرد. شکل 9.14 constraintی را نشان میدهد که پس از attribute درون نماد class آمده است.
برای Constraintی که روی یک element واحد، مانند class یا association path، اعمال میشود، رشته constraint میتواند نزدیک نماد element و ترجیحاً نزدیک نام آن قرار گیرد. ابزار باید امکان تعیین element constrained را فراهم کند.
برای Constraintی که روی دو element، مانند دو class یا دو association، اعمال میشود، constraint میتواند بهصورت خطچین میان آن دو element و با برچسب رشته constraint درون brace نمایش داده شود. شکل 9.15 constraint نوع {xor} را میان دو association نشان میدهد.
گزینههای ارائه
رشته constraint میتواند درون note symbol قرار گیرد و با یک خطچین به هر یک از نمادهای elementهای constrained متصل شود. شکل 9.16 نمونهای از constraint داخل note symbol را نشان میدهد.
اگر constraint بهصورت خطچین بین دو element نمایش داده شود، میتوان در یکی از انتهاها arrowhead قرار داد. جهت arrow اطلاعات مرتبط درون constraint است. element در tail arrow به نخستین موقعیت و element در head arrow به دومین موقعیت در collection با نام constrainedElements نگاشت میشود.
برای سه یا چند path از یک نوع، مانند generalization path یا association path، constraint میتواند به یک خطچین متصل شود که از روی همه pathها عبور میکند.
مثالها
شکل 9.14 - Constraint متصل به attribute:
در class با نام Stack، attribute با صورت size: Integer {size >= 0} نمایش داده شده است؛ operationهای push() و pop() نیز آمدهاند.
شکل 9.15 - constraint نوع `{xor}`:
یک Person از طریق دو association به Account و Corporation مرتبط است و میان associationها constraint {xor} قرار دارد.
شکل 9.16 - Constraint در note symbol:
ساختاری با Person و Company و roleهای boss، employee و employer همراه با constraint زیر نشان داده شده است:
{self.boss->isEmpty() or
self.employer = self.boss.employer}
9.6.2 Namespace (بهصورت تخصصیشده)
توصیف
یک namespace میتواند مالک constraintها باشد. constraint مرتبط با namespace ممکن است روی خود namespace اعمال شود یا روی elementهای داخل آن namespace.
Generalizationها
Attributeها
هیچ attribute اضافی وجود ندارد.
Associationها
ownedRule: Constraint[*] - مجموعهای از Constraintهای متعلق به این Namespace را مشخص میکند. زیرمجموعه Namespace::ownedMember است.
Constraintها
هیچ constraint اضافی وجود ندارد.
معناشناسی
constraintهای ownedRule برای یک Namespace قواعد خوشساختی elementهای constrained را نمایش میدهند. هنگام تعیین اینکه model elementها خوشساخت هستند یا خیر، این constraintها ارزیابی میشوند.
نمادگذاری
نمادگذاری اضافی وجود ندارد.
9.7 package Elements
subpackage Elements از package Abstractions بنیادیترین سازه انتزاعی، یعنی Element، را مشخص میکند.
شکل 9.17 - package Elements
شکل 9.18 - عناصر تعریفشده در package Elements
9.7.1 Element
element یکی از اجزای تشکیلدهنده model است.
توصیف
Element یک metaclass انتزاعی و بدون superclass است. از آن بهعنوان superclass مشترک همه metaclassهای Infrastructure Library استفاده میشود.
Generalizationها
هیچکدام.
Attributeها
هیچ attribute اضافی وجود ندارد.
Associationها
هیچ association اضافی وجود ندارد.
Constraintها
هیچ constraint اضافی وجود ندارد.
معناشناسی
subclassهای Element معناشناسی متناسب با مفهومی را که نمایش میدهند فراهم میکنند.
نمادگذاری
برای Element نمادگذاری عمومی وجود ندارد. subclassهای مشخص Element نمادگذاری خود را تعریف میکنند.
9.8 package Expressions
package Expressions در package Abstractions، metaclass عمومی پشتیبان مشخصهسازی valueها را همراه با specializationهایی برای پشتیبانی از درختهای expression ساختاریافته و expressionهای opaque یا تفسیرنشده مشخص میکند. سازههای مختلف UML به expressionها نیاز دارند یا از آنها استفاده میکنند؛ expressionها فرمولهای زبانیای هستند که هنگام ارزیابی در یک context، value تولید میکنند.
شکل 9.19 - package Expressions
شکل 9.20 - عناصر تعریفشده در package Expressions
9.8.1 Expression
expression یک درخت ساختاریافته از symbolهاست که هنگام ارزیابی در یک context، مجموعهای احتمالاً تهی از valueها را نشان میدهد.
توصیف
expression یک node در expression tree را نمایش میدهد که میتواند non-terminal یا terminal باشد. این node یک symbol تعریف میکند و دنبالهای احتمالاً تهی از operandها دارد که value specification هستند.
Generalizationها
ValueSpecification، صفحه 48
Attributeها
symbol: String[1] - symbol وابسته به node در expression tree.
Associationها
operand: ValueSpecification[*] - دنبالهای از operandها را مشخص میکند. زیرمجموعه Element::ownedElement است.
Constraintها
هیچ constraint اضافی وجود ندارد.
معناشناسی
expression یک node در expression tree است. اگر operand نداشته باشد terminal node را نمایش میدهد. اگر operand داشته باشد، operatorای را نمایش میدهد که روی آن operandها اعمال شده است. در هر دو حالت، یک symbol با node وابسته است و تفسیر آن symbol به context expression بستگی دارد.
نمادگذاری
بهطور پیشفرض، expression بدون operand صرفاً با symbol خود و بدون quotation نمایش داده میشود. expression دارای operand با symbol خود و سپس parenthesis گرد که operandها بهترتیب درون آن قرار گرفتهاند نمایش داده میشود. در contextهای خاص ممکن است notationهای ویژه، از جمله infix operator، مجاز باشند.
مثالها
xor
else
plus(x,1)
x+1
9.8.2 OpaqueExpression
opaque expression یک statement متنیِ تفسیرنشده است که هنگام ارزیابی در یک context، مجموعهای احتمالاً تهی از valueها را نشان میدهد.
توصیف
opaque expression شامل رشتههای متنی وابسته به زبان است که برای توصیف یک یا چند value استفاده میشوند و میتواند مشخصه اختیاری languageها را نیز داشته باشد.
یکی از زبانهای از پیش تعریفشده برای مشخصکردن expressionها OCL است. زبان طبیعی یا زبانهای برنامهنویسی نیز میتوانند استفاده شوند.
Generalizationها
ValueSpecification، صفحه 48
Attributeها
body: String[0..*] {ordered} - متن expression که ممکن است در چند language ارائه شود.
language: String[0..*] {ordered} - languageهایی را مشخص میکند که expression با آنها بیان شده است. تفسیر body expression به language بستگی دارد. اگر languageها مشخص نشده باشند، ممکن است از body expression یا context بهصورت ضمنی استنباط شوند. تطبیق languageها با رشتههای body بر اساس ترتیب انجام میشود.
Associationها
هیچ association اضافی وجود ندارد.
Constraintها
[1] اگر attribute مربوط به language تهی نباشد، اندازه arrayهای body و language باید برابر باشد.
language->notEmpty() implies
(body->size() = language->size())
معناشناسی
body یک expression میتواند از دنبالهای از رشتههای متنی تشکیل شود که هر یک در language متفاوتی قرار دارند و نمایشهای جایگزین همان محتوا هستند. هنگامی که چند رشته language ارائه میشود، language هر رشته جداگانه از entry متناظر آن در attribute language، بر اساس ترتیب دنباله، تعیین میشود. تفسیر رشتههای متنی وابسته به language است. اگر languageها مشخص نشده باشند، ممکن است از bodyهای expression یا context بهصورت ضمنی مشخص شوند.
فرض میشود یک تحلیلگر زبانی برای languageهای مشخصشده bodyها را ارزیابی کند. زمان ارزیابی bodyها در این مشخصات تعیین نشده است.
نمادگذاری
opaque expression بهصورت رشته متنی در languageهای مشخص نمایش داده میشود. syntax رشتهها بر عهده tool و تحلیلگرهای زبانی همان language است.
opaque expression بهعنوان بخشی از notation مربوط به element دربرگیرنده خود نمایش داده میشود.
languageهای یک opaque expression، در صورت مشخصشدن، اغلب در diagram نمایش داده نمیشوند. برخی ابزارهای modeling ممکن است language خاصی را تحمیل یا یک language پیشفرض را فرض کنند. language اغلب با این فرض ضمنی است که شکل expression هدف آن را روشن میکند. اگر نام language نمایش داده شود، باید پیش از رشته expression متناظر و درون brace {} بیاید.
رهنمود سبک
نام یک language باید دقیقاً با همان املا و capitalizationای نوشته شود که در سند تعریفکننده آن language آمده است. برای مثال OCL درست است، نه ocl.
مثالها
a>0
{OCL} i > j and self.size > i
average hours worked per week
9.8.3 ValueSpecification
value specification مشخصات مجموعهای احتمالاً تهی از instanceهاست که هم objectها و هم data valueها را شامل میشود.
توصیف
ValueSpecification یک metaclass انتزاعی است که برای شناسایی یک یا چند value در model استفاده میشود. ممکن است به یک instance ارجاع دهد یا expressionای باشد که هنگام ارزیابی یک یا چند instance را نشان میدهد.
Generalizationها
Element (as specialized)، صفحه 74
Attributeها
هیچ attribute اضافی وجود ندارد.
Associationها
expression: Expression[0..1] - اگر این value specification یک operand باشد، expression مالک آن را مشخص میکند. زیرمجموعه Element::owner است.
Constraintها
هیچ constraint اضافی وجود ندارد.
Operationهای اضافی
operationهای زیر در اینجا معرفی میشوند و انتظار میرود در subclassها بازتعریف شوند. پیادهسازیهای منطبق ممکن است بتوانند برای expressionهای بیشتری که توسط constraintهای مرتبط با این operationها مشخص میشوند value محاسبه کنند.
[1] query با نام isComputable() تعیین میکند آیا یک value specification در model قابل محاسبه است یا خیر. این operation را نمیتوان بهطور کامل در OCL تعریف کرد. از یک پیادهسازی منطبق انتظار میرود برای همه value specificationهایی که قادر به محاسبه آنهاست مقدار true برگرداند و تمام مواردی را که این operation برای آنها true است محاسبه کند. همچنین انتظار میرود یک پیادهسازی منطبق بتواند value همه literalها را محاسبه کند.
ValueSpecification::isComputable(): Boolean;
isComputable = false
[2] query با نام integerValue() هرگاه قابل محاسبه باشد یک Integer value منفرد برمیگرداند.
ValueSpecification::integerValue() : [Integer];
integerValue = Set{}
[3] query با نام booleanValue() هرگاه قابل محاسبه باشد یک Boolean value منفرد برمیگرداند.
ValueSpecification::booleanValue() : [Boolean];
booleanValue = Set{}
[4] query با نام stringValue() هرگاه قابل محاسبه باشد یک String value منفرد برمیگرداند.
ValueSpecification::stringValue() : [String];
stringValue = Set{}
[5] query با نام unlimitedValue() هرگاه قابل محاسبه باشد یک UnlimitedNatural value منفرد برمیگرداند.
ValueSpecification::unlimitedValue() : [UnlimitedNatural];
unlimitedValue = Set{}
[6] query با نام isNull() هنگامی مقدار true برمیگرداند که بتوان محاسبه کرد value برابر null است.
ValueSpecification::isNull() : Boolean;
isNull = false
معناشناسی
value specification صفر یا چند value تولید میکند. لازم است type و تعداد valueها برای contextی که value specification در آن استفاده میشود مناسب باشند.
نمادگذاری
نمادگذاری مشخصی وجود ندارد.
9.9 package Generalizations
package Generalizations از package Abstractions سازوکارهایی برای مشخصکردن روابط generalization میان classifierها فراهم میکند.
شکل 9.21 - package Generalizations
شکل 9.22 - عناصر تعریفشده در package Generalizations
9.9.1 Classifier (بهصورت تخصصیشده)
توصیف
classifier یک type است و میتواند مالک generalization باشد؛ بنابراین امکان تعریف روابط generalization با classifierهای دیگر را فراهم میکند.
Attributeها
هیچ attribute اضافی وجود ندارد.
Generalizationها
Type، صفحه 85
Classifier (as specialized)، صفحه 82
Associationها
generalization: Generalization[*] - روابط Generalization مربوط به این Classifier را مشخص میکند. این Generalizationها به classifierهای عمومیتر در hierarchy generalization پیمایش میکنند. زیرمجموعه Element::ownedElement است.
/general: Classifier[*] - Classifierهای عمومیتر این Classifier را مشخص میکند. مشتقشده است.
Constraintها
[1] classifierهای عمومی همان classifierهایی هستند که روابط generalization به آنها ارجاع میدهند.
general = self.parents()
Operationهای اضافی
[1] query با نام parents() تمام ancestorهای بلافصل یک Classifier generalizable را برمیگرداند.
Classifier::parents(): Set(Classifier);
parents = generalization.general
[2] query با نام conformsTo() برای classifierای که typeای سازگار با classifier دیگر تعریف میکند مقدار true میدهد. این query برای مثال در مشخصهسازی conformance مربوط به signature operationها استفاده میشود.
Classifier::conformsTo(other: Classifier): Boolean;
conformsTo = (self=other) or (self.allParents()->includes(other))
معناشناسی
Classifier میتواند در روابط generalization با Classifierهای دیگر شرکت کند. یک instance از Classifier خاص، بهصورت غیرمستقیم instanceی از Classifier عمومی نیز هست. معناشناسی دقیق اینکه generalization چگونه روی هر subtype عینی Classifier اثر میگذارد متفاوت است. Classifier یک type تعریف میکند. type conformance میان Classifierهای generalizable بهگونهای تعریف میشود که هر Classifier با خودش و همه ancestorهایش در hierarchy generalization سازگار است.
نمادگذاری
نمادگذاری اضافی وجود ندارد.
مثالها
به بخش Generalization مراجعه کنید.
9.9.2 Generalization
generalization یک رابطه ردهبندی میان classifier عمومیتر و classifier تخصصیتر است. هر instance از classifier تخصصی، همزمان instanceی از classifier عمومی نیز هست. بنابراین classifier تخصصی بهطور غیرمستقیم featureهای classifier عمومیتر را در اختیار دارد.
توصیف
generalization یک classifier تخصصی را به classifier عمومیتر مرتبط میکند و در مالکیت classifier تخصصی قرار دارد.
Generalizationها
DirectedRelationship، صفحه 78
Attributeها
هیچ attribute اضافی وجود ندارد.
Associationها
general: Classifier[1] - به classifier عمومی در رابطه Generalization ارجاع میدهد. زیرمجموعه DirectedRelationship::target است.
specific: Classifier[1] - به classifier تخصصیکننده در رابطه Generalization ارجاع میدهد. زیرمجموعه DirectedRelationship::source و Element::owner است.
Constraintها
هیچ constraint اضافی وجود ندارد.
معناشناسی
هرجا generalization یک classifier تخصصی را به classifier عمومی مرتبط کند، هر instance از classifier تخصصی نیز instanceی از classifier عمومی است. بنابراین featureهایی که برای instanceهای classifier عمومی مشخص شدهاند بهطور ضمنی برای instanceهای classifier تخصصی نیز مشخصاند. هر constraintی که روی instanceهای classifier عمومی اعمال شود روی instanceهای classifier تخصصی نیز اعمال میشود.
نمادگذاری
Generalization بهصورت خطی با یک مثلث توخالی بهعنوان arrowhead میان نمادهای classifierهای درگیر نمایش داده میشود. arrowhead به سمت نماد classifier عمومی اشاره میکند. این notation «separate target style» نامیده میشود.
گزینههای ارائه
چند رابطه Generalization که به classifier عمومی یکسانی ارجاع دارند میتوانند در قالب «shared target style» به یکدیگر متصل شوند.
مثالها
شکل 9.23 - نمونههای generalization میان classها:
در هر دو سبک، Shape classifier عمومی و Polygon، Ellipse و Spline classifierهای تخصصی هستند. در separate target style هر رابطه خط جداگانه دارد؛ در shared target style مسیرها در یک target مشترک ادغام میشوند.
9.10 package Instances
package Instances در package Abstractions امکان مدلسازی instanceهای classifierها را فراهم میکند.
شکل 9.24 - package Instances
شکل 9.25 - عناصر تعریفشده در package Instances
9.10.1 InstanceSpecification
instance specification یک model element است که یک instance را در سامانه مدلشده نمایش میدهد.
توصیف
instance specification وجود یک entity را در سامانه مدلشده مشخص میکند و آن entity را بهطور کامل یا جزئی توصیف میکند. این توصیف شامل موارد زیر است:
- طبقهبندی entity توسط یک یا چند classifier که entity نمونه آنهاست. اگر تنها classifier مشخصشده abstract باشد، instance specification فقط توصیفی جزئی از entity ارائه میکند.
- نوع instance بر پایه classifier یا classifierهای آن. برای مثال، instance specificationای که classifier آن یک class است objectای از همان class را توصیف میکند، در حالی که instance specificationای که classifier آن association است یک link از همان association را توصیف میکند.
- مشخصکردن valueهای structural featureهای entity. لازم نیست همه structural featureهای تمام classifierهای instance specification با slot نمایش داده شوند؛ در این حالت instance specification یک توصیف جزئی است.
- مشخصکردن روش محاسبه، مشتقسازی یا ساخت instance، بهصورت اختیاری.
InstanceSpecification یک class عینی است.
Generalizationها
Attributeها
هیچ attribute اضافی وجود ندارد.
Associationها
classifier: Classifier[0..*] - classifier یا classifierهای instance نمایشدادهشده. اگر چند classifier مشخص شود، instance توسط همه آنها طبقهبندی میشود.
slot: Slot[*] - slotای که value یا valueهای یک structural feature از instance را ارائه میکند. یک instance specification میتواند برای هر structural feature از classifierهای خود، از جمله featureهای inherited، یک slot داشته باشد. لازم نیست برای هر structural feature یک slot مدل شود؛ در این حالت instance specification یک توصیف جزئی است. زیرمجموعه Element::ownedElement است.
specification: ValueSpecification[0..1] - مشخصهای برای چگونگی محاسبه، مشتقسازی یا ساخت instance. زیرمجموعه Element::ownedElement است.
Constraintها
[1] defining feature هر slot باید یک structural feature، بهصورت مستقیم یا inherited، از یکی از classifierهای instance specification باشد.
slot->forAll(s |
classifier->exists(c | c.allFeatures()->includes(s.definingFeature))
)
[2] یک structural feature - از جمله همان feature که از چند classifier به ارث رسیده باشد - حداکثر defining feature یک slot در یک instance specification است.
classifier->forAll(c |
(c.allFeatures()->forAll(f | slot->select(s | s.definingFeature = f)->size() <= 1)
)
معناشناسی
instance specification میتواند وجود یک entity در سامانه مدلشده را مشخص کند. همچنین میتواند illustration یا نمونهای از یک entity ممکن در سامانه مدلشده ارائه دهد. instance specification آن entity را توصیف میکند و ممکن است جزئیات آن ناقص باشند. هدف instance specification نشاندادن بخشهای مورد علاقه درباره یک entity در سامانه مدلشده است. entity با مشخصات هر classifier مربوط به instance specification سازگار است و featureهایی با valueهای تعیینشده توسط هر slot آن instance specification دارد. نبودن slot برای یک feature در instance specification به این معنا نیست که entity نمایشدادهشده آن feature را ندارد؛ بلکه فقط نشان میدهد آن feature در model مورد توجه نیست.
instance specification میتواند entity را در یک نقطه زمانی مشخص، یعنی snapshot، نمایش دهد. تغییرات entity را میتوان با چند instance specification مدل کرد که هر کدام snapshot متفاوتی هستند.
مهم است به خاطر داشته باشیم که InstanceSpecification یک model element است و نباید با dynamic elementای که مدل میکند اشتباه شود. بنابراین نباید انتظار داشت معناشناسی پویای model elementهای InstanceSpecification در repository مدل دقیقاً با معناشناسی dynamic elementهایی که نمایش میدهند منطبق باشد.
وقتی InstanceSpecification برای ارائه illustration یا نمونهای از entity در سامانه مدلشده به کار میرود، ساختار دقیق زمان اجرا را نشان نمیدهد؛ بلکه اطلاعاتی درباره چنین ساختارهایی توصیف میکند و از آن نمیتوان درباره جزئیات پیادهسازی ساختار زمان اجرا نتیجهگیری کرد. وقتی برای مشخصکردن وجود entity استفاده شود، instance specification بخشی از همان سامانه را نمایش میدهد. instance specificationها میتوانند بهصورت ناقص مدل شوند، structural featureهای اجباری میتوانند حذف شوند و classifierهای یک instance specification میتوانند abstract باشند، هرچند entity واقعی classification عینی خواهد داشت.
نمادگذاری
instance specification با همان notation classifier خود نمایش داده میشود، با این تفاوت که بهجای نام classifier، ترکیب زیرخطدار نام instance، یک colon (:) و نام یا نامهای classifier قرار میگیرد. قرارداد نمایش چند classifier آن است که نامها با comma از یکدیگر جدا شوند.
نام برای classifierهای UML 2 و instance specificationها اختیاری است. نبودن نام در diagram ممکن است واقعاً نشاندهنده نبود نام در model زیربنایی باشد.
notation استاندارد برای instance specification ناشناس از classifier بدون نام یک colon زیرخطدار (:) است.
اگر instance specification یک value specification بهعنوان specification خود داشته باشد، value specification یا بعد از علامت مساوی (=) پس از نام نمایش داده میشود، یا بدون مساوی در زیر نام میآید. اگر instance specification با shape دربرگیرندهای مانند rectangle نمایش داده شود، value specification درون همان shape قرار میگیرد.
شکل 9.26 - مشخصه یک instance از String
streetName: String
"S. Crown Ct."
slotها با notation مشابه structural feature متناظر نمایش داده میشوند. هرجا یک feature بهصورت متنی در compartment نمایش داده شود، slot مربوط به آن feature نیز میتواند بهصورت متن، یعنی نام feature سپس = و value specification، نشان داده شود. propertyهای دیگر feature مانند type را میتوان بهصورت اختیاری نمایش داد.
شکل 9.27 - slotها همراه با value
myAddress: Address
streetName = "S. Crown Ct."
streetNumber : Integer = 381
instance specificationای که classifier آن association است یک link را نمایش میدهد و با همان notation association نشان داده میشود، با این تفاوت که path یا pathهای پیوسته بهجای classifierها به instance specificationها متصل میشوند. اگر از اتصال به instance specificationها روشن باشد که عنصر یک link است نه association، نیازی به نمایش نام زیرخطدار نیست. end nameها میتوانند انتهاها را تزئین کنند. navigation arrowها را میتوان نمایش داد، اما اگر نمایش داده شوند باید با navigation انتهای association سازگار باشند.
شکل 9.28 - instance specificationهایی که دو object متصل به یک link را نمایش میدهند:
Don : Person با role father و Josh : Person با role son.
گزینههای ارائه
value مربوط به slot یک attribute را میتوان با notationی مشابه link نمایش داد. یک path پیوسته از owning instance specification به target instance specification که slot value را نمایش میدهد رسم میشود و نام attribute انتهای target path را تزئین میکند. navigability، اگر نمایش داده شود، باید فقط در جهت target باشد.
9.10.2 InstanceValue
instance value یک value specification است که یک instance را شناسایی میکند.
توصیف
instance value، value مدلشده توسط یک instance specification را مشخص میکند.
Generalizationها
ValueSpecification، صفحه 48
Attributeها
هیچ attribute اضافی وجود ندارد.
Associationها
instance: InstanceSpecification[1] - instanceای که value مشخصشده است.
Constraintها
هیچ constraint اضافی وجود ندارد.
معناشناسی
instance specification همان value مشخصشده است.
نمادگذاری
instance value میتواند با notation متنی یا گرافیکی ظاهر شود. در حالت متنی، مانند value یک attribute slot، نام instance نمایش داده میشود. در حالت گرافیکی، reference value با اتصال به instance نشان داده میشود. به بخش InstanceSpecification مراجعه کنید.
9.10.3 Slot
slot مشخص میکند entity مدلشده توسط instance specification برای یک structural feature مشخص، یک یا چند value دارد.
توصیف
slot در مالکیت یک instance specification قرار دارد. slot value یا valueهای defining feature خود را مشخص میکند و آن defining feature باید structural feature یکی از classifierهای instance specification مالک slot باشد.
Generalizationها
Element (as specialized)، صفحه 74
Attributeها
هیچ attribute اضافی وجود ندارد.
Associationها
definingFeature: StructuralFeature[1] - structural featureای که valueهای مجاز برای نگهداری در slot را مشخص میکند.
owningInstance: InstanceSpecification[1] - instance specification مالک این slot. زیرمجموعه Element.owner است.
value: InstanceSpecification[*] - value یا valueهای متناظر با defining feature برای owning instance specification. این association ordered است و زیرمجموعه Element.ownedElement محسوب میشود.
Constraintها
هیچ constraint اضافی وجود ندارد.
معناشناسی
slot میان یک instance specification، یک structural feature و یک یا چند value رابطه برقرار میکند. slot نشان میدهد entity مدلشده توسط instance specification دارای structural featureای با value یا valueهای مشخصشده است. valueهای موجود در slot باید از نظر type، multiplicity و سایر ویژگیها با defining feature slot سازگار باشند.
نمادگذاری
به بخش InstanceSpecification مراجعه کنید.
اعتبار ترجمه: ترجمه با کمک هوش مصنوعی. فروش یا انتشار این ترجمه منوط به داشتن مجوز لازم از صاحب حقوق اثر است.