پایان نامه درباره ، الگوریتم، پیادهسازی، رابط، وارث، الگوریتمها، استراتژیهای، زمینه،

Algorithm ” برای پیادهکردن خانوادهای از الگوریتمهای مرتبط به هم استفاده میکند. بطوریکه هر استراتژی وارث در چارچوب این رابط مشترک، یک تنوع از الگوریتم را پیادهسازی میکند. در واقع مشترک بودن رابط (بین گونههای مختلف الگوریتم) این امکان را فراهم میکند که در یک زمینه خاص با فراخوانیهای ثابت، اشیا استراتژی بتوانند در زمان اجرا جابجا شوند. شکل 2-4 را مشاهده کنید.
837565257175
شکل 4-2. نیاز به رابط مشترک در ساختار فراخوانی ثابت بین اشیاء متغیر

مشترک بودن رابط باعث میشود که الگوریتمها بتوانند به راحتی با یکدیگر در زمان اجرا، در زمینهای خاص، و در چارچوب فراخوانی ثابت مبادله شوند. اگر یک استراتژی واقعی این پایه را حفظ کند، تشخیص الگوی استراتژی سختی زیادی ندارد.
ازجمله معیارهایی که در کارهای پیشین برای پالایش کاندیدهای الگوی استراتژی ارائه شدهاند، در ادامه مورد نقد و بررسی قرار گرفتهاند.
بررسی حضور رابطهی پیوند بین زمینه و استراتژی.
شمارش تعداد فرزندان استراتژی با محدودیت حداقل دو فرزند.
شمارش تعداد فرزندان و والد زمینه با محدودیت صفر فرزند و صفر والد.
سنجش حضور الگوریتم در هر یک از کلاسهای وارث استراتژی، با شمارش تعداد حلقهها، بازگشتها، و ساختارهای شرطی.
بررسی حضور خصوصیت “حفظ فیلد” (استراتژیها، علاوه بر اینکه در لحظهی ساخت نمونه از زمینه، و از طریق پارامتر سازنده قابل تعیین هستند، باید در هر لحظهی دیگر از اجرا نیز قابل تعیین و جابجایی باشند) در زمینه برای جابجایی بین استراتژیها.
در نقد و تحسین هر یک از معیارهای فوق، موارد زیر قابل بحث هستند: دررابطه با حضور رابطه پیوند، نیازمند بررسی است، اما جزء معیارهای مشابه بین این الگو و برخی از الگوهای دیگر است. تعداد فرزندان استراتژی، یک استراتژی حقیقی میتواند تک فرزند باشد و درآینده بر حسب نیازمندیها گسترش یابد. تعداد فرزندان و والد زمینه، زمینه مکانی است که الگوریتمها در آن مورد استفاده قرار میگیرند، بنابراین زمینه، هر سلسله مراتبی میتواند داشته باشد. سنجش خصوصیت الگوریتمیک در هر استراتژی وارث، این معیار،کاملا بجا، و نیازمند بررسی است. اما در رابطه با شمارش تعداد حلقهها، بازگشتها، و ساختارهای شرطی، برای همه الگوریتمها صدق نمیکند. یک الگوریتم ممکن است از یک خط مثل “return a+b; ” تا هزاران خط شامل حلقه و بازگشتها باشد. از طرفی خیلی از الگوها برای برخی از پیادهسازیهای خود از چنین ساختارهایی استفاده میکنند.
حفظ فیلد، یک خصیصه لازم (به منظور ایجاد امکان تعویض الگوریتم ها در هر لحظهای از اجرا توسط کلاینت) در زمینه است. اما حضور آن در زمینه، لزوما نشان دهنده این نیست که سلسله مراتب مرتبط شده به آن یک استراتژی است.
اگر به شکل 3-4 که یکی از نمونههای واقعی استراتژی پیادهسازی شده در نرم افزار jhotdraw است توجه کنید، این نمونه واقعی از استراتژی، فقط یک پیادهسازی دارد، بدیهی است که بر حسب نیازمندیها درآینده پیادهسازیهای دیگر آن گسترش خواهند یافت. بر طبق شکل 3-4 این نمونه استراتژی چهار متد دارد. این نمونه توسط معیارهای قبلی قابل شناسایی نیست. بر اساس این اصل، “به منظور پیادهکردن خانوادهای از الگوریتمها درکنار هم برای یک عمل مشترک، و ایجاد امکانی برای جابجایی بین آنها در یک زمینهی خاص با ساختار فراخوانی ثابت”، و بر حسب ” هر الگوریتم مجموعهای از دستور العملهاست که طبق یک ترتیب خاص اجرا میشوند و مسالهای را حل میکنند ” [23]، حتما باید یک چارچوب یا اسکلت مشترک وجود داشته باشدکه بخشهای مختلف یک الگوریتم را تعریف، و ترتیب آن را مشخص کند، و آن چارچوب به عنوان ساختار ثابت فراخوانی توسط زمینه مورد استفاده قرار گیرد (خصوصا برای استراتژیهای دارای چند متد). در این کار، این اصل به عنوان یک شاخص در نظر گرفته شده است و به یکی از چهار روش شناسایی میشود.
گاهی دستورالعملهای الگوریتم با یک ترتیب مشخص، در کلاس استراتژی منتزع به شکل یک “متد الگو ” تعریف میشوند. متد الگو یک ترتیب ثابت را برای گونههای مختلف الگوریتم فراهم میکند. این متد در هیچ یک از کلاس های وارث رونویسی نمیشود و توسط زمینه به عنوان ساختار فراخوانی ثابت، فراخوانی میشود.
زمینه ترتیب ثابتی را از دستورالعملهای الگوریتم در یکی از متدهای خودش تعریف میکند.
برای داشتن ترتیبهای متنوع بین دستورالعملها، این اسکلتبندی درهر کلاس وارث استراتژی، در قالب یک متد مشترک بین استراتژیها انجام میگیرد و آن متد توسط زمینه فراخوانی میگردد.
متدهای استراتژی منتزع در هر کلاس وارث به شکل یک زنجیر یکدیگر را فراخوانی میکنند، بطوریکه سر زنجیر بین همه استراتژیهای وارث، مشترک است. زمینه سر زنجیر را فراخوانی میکند.
این معیار (استراتژی 1) میتواند شاخص خوبی برای تشخیص استراتژیها، خصوصا استراتژیها با بیش از یک رابط و کمتر از دو پیادهسازی در کنار معیارهایی که در ادامه آمدهاند، باشد. شکل 4-4 اسکلت تعریف الگوریتم شکل 3-4 را به روش سوم نشان میدهد.
749935217805

شکل 4-3. نمونهی واقعی از الگو استراتژی و رابطهای آن

SetManager(){
If(GetManager()== Condition)
StopDisposing();
elseStartDisposing();
{
1
2
3

شکل4-4. اسکلت مشترک ترتیب فراخوانی دستورات الگوریتم شکل 4-3 در متد SetManager

استراتژی2. آیا کاندیدهای استراتژی دارای یک ساختار منتزع- عملیاتی است؟ این معیار بجای محاسبه تعداد فرزندان استراتژی استفاده میگردد. تعداد فرزندان استراتژی از یک تا چندین پیادهسازی متغیر هستند. بنابراین بجای در نظر گرفتن تعداد فرزندان، وجود ساختار منتزع- عملیاتی (برای پیادهسازی گونههای مختلف الگوریتم متدها باید رونویسی شوند، بنابراین وجود ساختار منتزع، الزامی است) را به عنوان معیار قرار میدهیم.
استراتژی3. آیا رابطها با دسترسی عمومی، در استراتژی منتزع، بین همه استراتژیهای عملیاتی رونویسی شدهاند؟ لازم است که متدهای عمومی رونویسی شده بین استراتژیهای وارث برای قابل تعویض ساختن آنها در یک ساختار فراخوانی ثابت، مشترک باشند. به عبارتی متد جدید با دسترسی عمومی نباید در یک استراتژی موجود باشد و در دیگری نباشد.
استراتژی 4. آیا والد بین استراتژی و زمینه مشترک است؟ سلسله مراتب استراتژی و زمینه استفاده کننده از آن، باید از هم مستقل باشند. چون در غیر اینصورت زمینه نیز یک استراتژی است و باید حاوی مشخصات الگوریتمیک باشد و استقلال بین الگوریتمها و زمینه از بین میرود.
استراتژی 5. بررسی حضور خصیصه “حفظ فیلد” [15,4] در زمینه، به منظور اینکه کلاینت در هر لحظهای از اجرا بتواند بر حسب شرایط از یک استراتژی به استراتژی دیگر جابجا شود، حضور حداقل یک متد با دسترسی عمومی (به علاوهی متد سازنده) که استراتژیها را به شکل پارامتر از کلاینت بگیرد و جابجایی بین آنها را انجام دهد، لازم است. اگر این متد در زمینه استفاده کننده از استراتژی موجود نباشد مفهوم اصلی این الگو، قابلیت جابجا شدن الگوریتمها در زمان اجرا، حفظ نشده است.
استراتژی 6. آیا همه رابطهایی که از سمت زمینه استفاده کننده از استراتژی فراخوانی میشوند، در کلیه استراتژیهای عملیاتی موجود هستند؟ متد عمومی جدیدی که در یکی از استراتژیها تعریف شده ولی در دیگری موجود نباشد، نباید از سمت زمینه استفاده کننده از استراتژی مورد فراخوانی قرار گیرد. در غیر این صورت اصل جابجایی با یک فیلد مشترک را از بین میبرد. ما این فراخوانی را ‘فراخوانی خارج از محدوده’ مینامیم.

4-2-2. معیارهای تشخیص الگوی وضعیت
857250-389890
شکل4-5. الگوی وضعیت [1]

گاهی نیازمند یک شی با چندین وضعیت هستیم، بطوریکه با حرکت از یک وضعیت به وضعیت دیگرش، رفتار مناسبی را از خود نشان دهد [1]. همچنین میخواهیم در یک زمینه خاص و در یک لحظه، تنها در یک وضعیت قرار گیرد و به راحتی وضعیتی اضافه یا حذف شود. الگوی وضعیت نیازمندیهای فوق را برآورده میکند. الگوی وضعیت ساختاری کاملا مشابه با الگوی استراتژی دارد و تنها در رفتار با الگوی استراتژی متفاوت میشود. این شباهت باعث شده که در خیلی از موقعیتها، ابزارهای خودکار شناسایی الگوهای طراحی، نتوانند الگوی وضعیت را از استراتژی تشخیص دهند. جابجایی بین کلاسهای مشخصکننده وضعیتها یا به صورت داخلی و یا از خارج انجام میگیرد. در واقع الگوی وضعیت به صورت آشکارا مشخص نمیکند که در چه مکانی و چه زمانی تغییر وضعیت رخ میدهد. بنابراین هر الگوی وضعیت میتواند تعدادی رابط را پیادهسازی کند که به رابطهای کلاس وضعیت دیگر هیچ ارتباطی نداشته باشد. معیارهای متمایزکننده الگوی وضعیت از الگوی استراتژی در ادامه آمده است.
وضعیت 1. تعداد استراتژیهای عملیاتی (دلیل استفاده از واژههای استراتژی و زمینه در تمام معیارها این است که، این معیارها میخواهند نمونههای استراتژی را تصحیح برچسب کنند و

متن کامل در سایت homatez.com