نوشته شده توسط علی مرادی AliDeWeb
- Encapsulation (کپسولهسازی) – بستهبندی دادهها و متدها در یک کلاس و محدود کردن دسترسی مستقیم به برخی جزئیات.
- Abstraction (تجرید) – پنهانسازی جزئیات پیچیده پیادهسازی و نمایش تنها قابلیتهای ضروری.
- Inheritance (وراثت) – امکان وراثت ویژگیها و رفتارهای یک کلاس از کلاس دیگر برای ترویج استفاده مجدد از کد.
- Polymorphism (چندریختی) – فعالسازی رفتار چندگانه کلاسها به عنوان نمونههایی از یک ابرکلاس مشترک، امکان بازنویسی متدها و رفتار پویا.
- Single Responsibility Principle (SRP) - اصل مسئولیت واحد – یک کلاس باید فقط یک دلیل برای تغییر داشته باشد، به این معنی که باید فقط یک مسئولیت داشته باشد.
- Open/Closed Principle (OCP) - اصل باز/بسته – موجودیتهای نرمافزاری باید برای توسعه باز باشند، اما برای تغییر بسته.
- Liskov Substitution Principle (LSP) - اصل جانشینی لیسکوف – زیرگونهها باید بتوانند به جای گونههای پایه خود جایگزین شوند، بدون اینکه صحت برنامه را تغییر دهند.
- Interface Segregation Principle (ISP) - اصل تفکیک رابط – کلاینتها نباید مجبور به وابستگی به رابطهایی شوند که از آنها استفاده نمیکنند.
- Dependency Inversion Principle (DIP) - اصل وارونگی وابستگی – ماژولهای سطح بالا نباید به ماژولهای سطح پایین وابسته باشند؛ هر دو باید به تجریدها وابسته باشند.
علاوه بر SOLID، اصول طراحی کلیدی دیگر در OOP عبارتند از:
- DRY (Don’t Repeat Yourself) - تکرار نکنید – از تکرار اجتناب کنید و کد قابل استفاده مجدد را تجرید کنید.
- KISS (Keep It Simple, Stupid) - ساده نگهدار، احمق! – کد را ساده نگه دارید و از پیچیدگی غیرضروری اجتناب کنید.
- YAGNI (You Ain’t Gonna Need It) - بهش نیاز پیدا نخواهی کرد – ویژگیها را مگر در صورت نیاز مطلق، پیادهسازی نکنید.
- Law of Demeter (LoD) - قانون دمتر – اشیاء باید فقط با اشیاء نزدیک مرتبط تعامل داشته باشند تا وابستگی را کاهش دهند.
این اصول از قابلیت نگهداری، مقیاسپذیری و کد تمیز اطمینان میدهند.
الگوهای طراحی به سه دسته اصلی تقسیم میشوند:
این الگوها بر ارتباط بین اشیاء و نحوه تعامل آنها با یکدیگر تمرکز دارند.
- Observer (ناظر) – وابستگی یک به چند بین اشیاء را تعریف میکند، به طوری که وقتی یک شیء تغییر وضعیت میدهد، تمام وابستههای آن مطلع میشوند.
- Strategy (راهبرد) – به یک شیء اجازه میدهد تا رفتار خود را به صورت پویا با تغییر بین الگوریتمهای مختلف تغییر دهد.
- Command (فرمان) – یک درخواست را به عنوان یک شیء کپسوله میکند، و امکان پارامتریسازی کلاینتها، صفبندی درخواستها و ثبت عملیات را فراهم میکند.
این الگوها به ترکیب کلاسها و اشیاء برای شکلدهی ساختارهای بزرگتر در عین انعطافپذیری و کارآمدی آنها میپردازند.
- Adapter (مبدل) – شکاف بین رابطهای ناسازگار را پر میکند.
- Decorator (تزئینکننده) – به صورت پویا عملکرد یک شیء را بدون تغییر کد آن گسترش میدهد.
- Facade (نما) – یک رابط سادهشده برای یک زیرسیستم پیچیده ارائه میدهد.
این الگوها بر مکانیزمهای ایجاد شیء برای افزایش انعطافپذیری و استفاده مجدد تمرکز دارند.
- Factory Method (متد کارخانه) – یک رابط برای ایجاد اشیاء فراهم میکند اما به زیرکلاسها اجازه میدهد نوع اشیاء ایجاد شده را تغییر دهند.
- Singleton (تکنسخه) – تضمین میکند که یک کلاس فقط یک نمونه داشته باشد و یک نقطه دسترسی سراسری به آن فراهم میکند.
- Builder (سازنده) – امکان ایجاد گامبهگام اشیاء پیچیده را فراهم میکند، و خوانایی و قابلیت نگهداری را بهبود میبخشد.
الگوی طراحی | مستندات |
---|---|
Memento (یادگار) | 📜 README |
State (حالت) | 📜 README |
Iterator (تکرارگر) | 📜 README |
Strategy (راهبرد) | 📜 README |
Template Method (متد قالب) | 📜 README |
Command (فرمان) | 📜 README |
Observer (ناظر) | 📜 README |
Mediator (میانجی) | 📜 README |
Chain Of Responsibility (زنجیره مسئولیت) | 📜 README |
Visitor (بازدیدکننده) | 📜 README |
Prototype (نمونه اولیه) | 📜 README |
Singleton (تکنسخه) | 📜 README |
Factory Method (متد کارخانه) | 📜 README |
Abstract Factory (کارخانه انتزاعی) | 📜 README |
Builder (سازنده) | 📜 README |
Composite (ترکیبی) | 📜 README |
Adaptor (مبدل) | 📜 README |
Decorator (تزئینکننده) | 📜 README |
Facade (نما) | 📜 README |
Fly Weight (مگسوزن) | 📜 README |
Bridge (پل) | 📜 README |
Proxy (نماینده) | 📜 README |
- Memento (یادگار): ذخیره و بازیابی حالت داخلی یک شیء بدون نقض کپسولهسازی.
- State (حالت): به یک شیء اجازه میدهد وقتی حالت داخلی آن تغییر میکند، رفتارش را تغییر دهد.
- Iterator (تکرارگر): دسترسی ترتیبی به عناصر یک شیء مجموعه بدون افشای پیادهسازی داخلی آن.
- Strategy (راهبرد): تعریف خانوادهای از الگوریتمها و کپسولهسازی هر یک، و امکان تعویض الگوریتمها در زمان اجرا.
- Template Method (متد قالب): تعریف قالب الگوریتم در یک متد و اجازه به زیرکلاسها برای ارائه پیادهسازیهای خاص برای مراحل مشخص.
- Command (فرمان): درخواستها را به عنوان اشیاء کپسوله میکند، و امکان پارامتریسازی، صفبندی و ثبت درخواستها را فراهم میسازد.
- Observer (ناظر): ایجاد یک مکانیزم اعلانرسانی یک به چند بین اشیاء، به طوری که تغییر وضعیت یک شیء باعث اطلاعرسانی خودکار به وابستهها شود.
- Mediator (میانجی): تعریف شیئی برای کپسولهسازی نحوه تعامل مجموعهای از اشیاء، کاهش وابستگی مستقیم بین آنها.
- Chain Of Responsibility (زنجیره مسئولیت): اجتناب از گره زدن فرستنده یک درخواست به گیرنده آن، و اجازه دادن به چندین شیء برای رسیدگی به درخواست.
- Visitor (بازدیدکننده): جدا کردن الگوریتم از ساختار شیئی که روی آن عمل میکند، افزودن عملیات جدید به ساختار شیء بدون تغییر کلاسها.
- Prototype (نمونه اولیه): ایجاد اشیاء جدید با کپی کردن یک نمونه اولیه موجود.
- Singleton (تکنسخه): اطمینان از اینکه یک کلاس فقط یک نمونه دارد و یک نقطه دسترسی سراسری به آن فراهم میکند.
- Factory Method (متد کارخانه): تعریف یک رابط برای ایجاد اشیاء، اما واگذاری تصمیمگیری در مورد نوع شیء ایجاد شده به زیرکلاسها.
- Abstract Factory (کارخانه انتزاعی): فراهم کردن یک رابط برای ایجاد خانوادهای از اشیاء مرتبط بدون مشخص کردن کلاسهای مشخص آنها.
- Builder (سازنده): جدا کردن ساخت شیء پیچیده از نمایش آن، امکان ساختن نمایشهای مختلف از یک شیء.
- Composite (ترکیبی): ترکیب اشیاء به ساختارهای درختی برای نمایش سلسله مراتب جزء-کل.
- Adaptor (مبدل): تبدیل رابط یک کلاس به رابطی که کلاینتها انتظار دارند، امکان همکاری کلاسهایی با رابطهای ناسازگار.
- Decorator (تزئینکننده): اضافه کردن مسئولیتهای جدید به یک شیء به صورت پویا.
- Facade (نما): فراهم کردن یک رابط یکپارچه برای یک مجموعه از رابطها در یک زیرسیستم.
- Fly Weight (مگسوزن): استفاده از اشتراکگذاری برای پشتیبانی کارآمد از تعداد زیادی شیء کوچک.
- Bridge (پل): جدا کردن انتزاع از پیادهسازی، امکان تغییر مستقل آنها.
- Proxy (نماینده): فراهم کردن یک جانشین یا نماینده برای کنترل دسترسی به یک شیء دیگر.