Mohammad Cheraghi - 98105676
Reza Alipour - 98105932
ابتدا تستها را مینویسیم. با توجه به اینکه کلاسها پیادهسازی نشدهاند، در اجرای اول به خطای کامپایل میخوریم. سپس با پیاده سازی کلاسها، به خطای زمان اجرا میرسیم. زیرا کلاسها خواستههای مسئله را برآورده نمیکنند. در نهایت با اصلاح کلاسها به نتیجه درست میرسیم. در ادامه تصاویر مربوط به این روند به ازای الگوهای builder و abstract factory آمده است.
به شکل مشابه برای الگوی prototype این مراحل را تکرار میکنیم. یعنی ابتدا توابع تست را پیادهسازی میکنیم. با اجرای آن به خطای کامپایل میرسیم. سپس به خطای اجرا میخوریم. با تکمیل کلاسها تستها با موفقیت اجرا میشوند.
در این بخش قصد داریم از دو کلاس phone و laptop با استفاده از الگوی builder نمونهبرداری کنیم. به این منظور ابتدا دو کلاس سازنده به شکل مجزا برای این دو موجودیت میسازیم که interface builder را پیادهسازی میکنند. در نهایت با استفاده از کلاس director و پاس دادن این سازندهها به آن نمونهبرداری را انجام میدهیم.
همانطور که در ویدیو ذکر شد، 4 نوع گل و گیاه ایرانی و ژاپنی داریم. یک کلاس انتزاعی برای درختها و یک کلاس انتزاعی برای گلها ایجاد میکنیم. سپس یک کلاس انتزاعی garden creator میسازیم که IranianGardenCreator و JapaneseGardenCreator آن را پیادهسازی میکنند. هرکدام از این دو کلاس میتوانند نوع گل یا درخت بودن باغ را انتخاب کنند.
در این الگو یک کلاس انتزاعی cloneable داریم که کلاسهای rectangle و square آن را پیادهسازی میکنند. این کلاسها تابع clone را پیادهسازی میکنند که یک کپی از خود را به صورت deep میسازد.
الگوهای ایجادی (creational): در این الگوها مکانیزمهای مختلفی برای ایجاد اشیا (new کردن) ارائه میشود. ایجاد اشیا به شکل ساده و ابتدایی میتواند مشکلات مختلفی را بسته به پیچیدگی مسئله ایجاد کند. برای مثال انعطافپذیری و قابلیت استفاده مجدد از کد را کاهش دهد. در این الگوها مشکلات مربوط به نحوهی ایجاد اشیا بررسی و برطرف شده است.
الگوهای ساختاری (structural): این الگوها طرحی را ارائه میدهند که براساس آن از ترکیب اشیاء و کلاسهای مختلف، ساختاری بزرگتر برای دستیابی به اهداف متعدد شکل میگیرد. الگوهای موجود در طرحهای ساختاری نشان میدهند که چگونه قطعات منحصربهفرد یک سیستم را میتوان به شکلی قابل توسعه و انعطافپذیر با هم ترکیب کرد.
الگوهای رفتاری (behavioral): الگوهای طراحی رفتاری مجموعهای از دستورالعملها را ارائه میدهند که الگوهای ارتباطی مشترک بین اشیاء را شناسایی میکند و راهی برای حل مشکلات رایج مرتبط با تعامل شی در طراحی نرمافزار ارائه میدهد.
الگوهای ایجادی (creational)
در اصول SOLID، پنج اصل کلی و راهنما برای اینکه یک نرمافزار بهتر داشته باشیم، ارائه شده است. به عبارتی این اصول درشتدانه، سطح بالا و انتزاعی هستند.
در حالیکه الگوهای طراحی جوابهایی ثابتشده و با قابلیت استفاده مجدد هستند، که برای یک سری مشکلات پرتکرار کدها به وجود آمدهاند. بنابراین این الگوها در سطح پیادهسازی هستند.
الگوی طراحی singleton اصل SRP (single responsibility principle) از اصول SOLID را نقض میکند. زیرا این کلاس علاوه بر اینکه مسئولیت عادی و طول عمر خود را بر عهده دارد، وظیفه نمونهسازی و جلوگیری از شبیهسازی را نیز بر عهده دارد. در حالیکه در اصل SRP هر کلاس باید برای یک هدف و مسئولیت ایجاده شده باشد.