Skip to content

mohammadch80/SE-lab-HW6

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 

Repository files navigation

SE-lab-HW6

Mohammad Cheraghi - 98105676

Reza Alipour - 98105932

گزارش آزمایش

پیاده‌سازی تست و اجرای آن

ابتدا تست‌ها را مینویسیم. با توجه به اینکه کلاس‌ها پیاده‌سازی نشده‌اند، در اجرای اول به خطای کامپایل میخوریم. سپس با پیاده سازی کلاس‌ها، به خطای زمان اجرا میرسیم. زیرا کلاس‌ها خواسته‌های مسئله را برآورده نمی‌کنند. در نهایت با اصلاح کلاس‌ها به نتیجه درست میرسیم. در ادامه تصاویر مربوط به این روند به ازای الگوهای builder و abstract factory آمده است.

1402-02-24 23 54 48 1402-02-24 23 54 53 1402-02-24 23 54 57 1402-02-24 23 55 00 1402-02-24 23 55 03 1402-02-24 23 55 07 1402-02-24 23 55 10 1402-02-24 23 55 15

به شکل مشابه برای الگوی prototype این مراحل را تکرار می‌کنیم. یعنی ابتدا توابع تست را پیاده‌سازی می‌کنیم. با اجرای آن به خطای کامپایل می‌رسیم. سپس به خطای اجرا می‌خوریم. با تکمیل کلاس‌ها تست‌ها با موفقیت اجرا می‌شوند.

1402-02-25 00 20 00 1402-02-25 00 19 42 1402-02-25 00 19 54 1402-02-25 00 20 03

پیاده‌سازی الگوی builder

در این بخش قصد داریم از دو کلاس phone و laptop با استفاده از الگوی builder نمونه‌برداری کنیم. به این منظور ابتدا دو کلاس سازنده به شکل مجزا برای این دو موجودیت می‌سازیم که interface builder را پیاده‌سازی می‌کنند. در نهایت با استفاده از کلاس director و پاس دادن این سازنده‌ها به آن نمونه‌برداری را انجام می‌دهیم.

پیاده‌سازی الگوی abstract factory

همانطور که در ویدیو ذکر شد، 4 نوع گل و گیاه ایرانی و ژاپنی داریم. یک کلاس انتزاعی برای درخت‌ها و یک کلاس انتزاعی برای گل‌ها ایجاد می‌کنیم. سپس یک کلاس انتزاعی garden creator می‌سازیم که IranianGardenCreator و JapaneseGardenCreator آن را پیاده‌سازی می‌کنند. هرکدام از این دو کلاس می‌توانند نوع گل یا درخت بودن باغ را انتخاب کنند.

پیاده‌سازی الگوی prototype

در این الگو یک کلاس انتزاعی cloneable داریم که کلاس‌های rectangle و square آن را پیاده‌سازی می‌کنند. این کلاس‌ها تابع clone را پیاده‌سازی می‌کنند که یک کپی از خود را به صورت deep می‌سازد.

پرسش‌ها:

سوال 1:

الگوهای ایجادی (creational): در این الگوها مکانیزم‌های مختلفی برای ایجاد اشیا (new کردن) ارائه می‌شود. ایجاد اشیا به شکل ساده و ابتدایی می‌تواند مشکلات مختلفی را بسته به پیچیدگی مسئله ایجاد کند. برای مثال انعطاف‌پذیری و قابلیت استفاده مجدد از کد را کاهش دهد. در این الگوها مشکلات مربوط به نحوه‌ی ایجاد اشیا بررسی و برطرف شده است.

الگوهای ساختاری (structural): این الگوها طرحی را ارائه می‌دهند که براساس آن از ترکیب اشیاء و کلاس‌های مختلف، ساختاری بزرگتر برای دستیابی به اهداف متعدد شکل می‌گیرد. الگوهای موجود در طرح‌های ساختاری نشان می‌دهند که چگونه قطعات منحصربه‌فرد یک سیستم را می‌توان به شکلی قابل توسعه و انعطاف‌پذیر با هم ترکیب کرد.

الگوهای رفتاری (behavioral): الگوهای طراحی رفتاری مجموعه‌ای از دستورالعمل‌ها را ارائه می‌دهند که الگوهای ارتباطی مشترک بین اشیاء را شناسایی می‌کند و راهی برای حل مشکلات رایج مرتبط با تعامل شی در طراحی نرم‌افزار ارائه می‌دهد.

سوال 2:

الگوهای ایجادی (creational)

سوال 3:

در اصول SOLID، پنج اصل کلی و راهنما برای اینکه یک نرم‌افزار بهتر داشته باشیم، ارائه شده است. به عبارتی این اصول درشت‌دانه، سطح بالا و انتزاعی هستند.

در حالیکه الگوهای طراحی جواب‌هایی ثابت‌شده و با قابلیت استفاده مجدد هستند، که برای یک سری مشکلات پرتکرار کدها به وجود آمده‌اند. بنابراین این الگوها در سطح پیاده‌سازی هستند.

سوال 4:

الگوی طراحی singleton اصل SRP (single responsibility principle) از اصول SOLID را نقض می‌کند. زیرا این کلاس علاوه بر اینکه مسئولیت عادی و طول عمر خود را بر عهده دارد، وظیفه نمونه‌سازی و جلوگیری از شبیه‌سازی را نیز بر عهده دارد. در حالیکه در اصل SRP هر کلاس باید برای یک هدف و مسئولیت ایجاده شده باشد.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages