Skip to content

kamayrtaeb/SharifSoftwareLab4

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 

Repository files navigation

SharifSoftwareLab4

بخش اول

مقدمه

یکی از مسادل رایج در برنامه ها نسبت دادن حالات مختلف به اشیا (مانند Finite State Machines( و جابه جایی میان آنها هنگام اجرای برنامه است. این رفتار که عموما به صورت حلقه ها و جملات شرطی مانند switch-case یا if پیاده سازی میشوند، اغلب گسترش پذیر نیستند و یا با افزایش تعداد حالات پیجیده میشوند. در نتیجه می توان از الگوی State و Strategy برای پیادهسازی این رفتار استفاده کرد.

States

در مسئله فوق 2 حالت برای هر بسته پستی وجود دارد: Delivered و In-Transit. برای پیاده سازی این دوحالت ابتدا لازم است تا یک واسط مشترک به صورت زیر برای آنها تعریف کنیم:

image

سپس برای هر حالت یک کلاس تعریف کرده تا واسط فوق را پیاده سازی کنند:

image image

Strategies:

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

image

سپس برای هر استراتژی و نحوه محاسبه قیمت یک کلاس تعریف و پیاده سازی میکنیم:

image image

Mail

حال کلاس اصلی Mail را پیاده سازی میکنیم. همانظور که مشخص است هر شی از این کلاس دارای یک State و یک Strategy است که قابل تغییر میباشد:

image

برنامه اصلی

در تصاویر زیر پیاده سازی منطق اصلی و یک نمونه از اجرای آن را مشاهده میکنید. همانطور که مشخص است به راحتی می توان حالت و استراتژی آبجکت فوق را تغییر داد:

image image

1)الگوهای طراحی در کتاب "Design Patterns: Elements of Reusable Object-Oriented Software" از گروه چهارچوب‌های عظیم (Gang of Four) به سه دسته اصلی تقسیم می‌شوند:

  1. الگوهای ساختاری (Structural Patterns):

    • Adapter Pattern (الگوی آداپتور): این الگو به کلاس‌ها این امکان را می‌دهد که با تغییر واسط یک کلاس، با دیگر کلاس‌ها سازگار شوند.
    • Decorator Pattern (الگوی دکوراتور): این الگو به یک شیء این امکان را می‌دهد که بدون تغییر کد، ویژگی‌های جدید به شیء افزوده شوند.
  2. الگوهای رفتاری (Behavioral Patterns):

    • Observer Pattern (الگوی مشاهده‌گر): این الگو ارتباط یک به چند بین اشیاء را مدل‌سازی می‌کند به نحوی که یک تغییر در یک شیء، سایر شیءها را به‌روز رسانی کند.
    • Strategy Pattern (الگوی استراتژی): این الگو به یک خانواده از الگوهای الگویی اجازه می‌دهد تا از یکدیگر قابل تعویض باشند بدون اینکه کلاینت اطلاعات خود را از آن‌ها از دست دهد.
  3. الگوهای خدمات (Creational Patterns):

    • Singleton Pattern (الگوی تک‌نمونه): این الگو اطمینان حاصل می‌کند که یک کلاس تنها یک نمونه از خود داشته باشد و به دیگر کلاس‌ها اجازه ایجاد نمونه از آن را ندهد.
    • Factory Method Pattern (الگوی متد کارخانه): این الگو به یک کلاس اجازه می‌دهد تا ایجاد شیء را به زیرکلاس‌های خود منتقل کند ولی مشخص می‌کند که کدام کلاس باید ایجاد شود.

3)** در این سناریو، الگوی طراحی Singleton مناسب به نظر می‌آید. الگوی Singleton اطمینان حاصل می‌کند که یک کلاس فقط یک نمونه از خود ایجاد می‌کند و این نمونه به تمامی قسمت‌های برنامه قابل دسترسی است.

2)** در پیاده‌سازی این آزمایش، الگوهای طراحی Strategy و State به طور واضح استفاده شده‌اند

  1. اصل مسئولیت تک:
  • تحقق: الگوی Singleton مسئولیت ایجاد و مدیریت یک نمونه یکتای یک کلاس را بر عهده دارد و از ایجاد نمونه‌های بیشتر جلوگیری می‌کند.

اصل بازبینی مهم:

  • تحقق: الگوی Singleton اجازه باز کردن ویرایش و بهبود‌ها در کد را برای تنها یک نقطه مرکزی (کلاس Singleton) فراهم می‌کند و این اصل را تقویت می‌کند.

اصل جداشدگی رابط:

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages