برنامه سازی پیشرفته
درس متنی
جلسه 11الگوهاي طراحی
خلاصه نکات کلیدی
الگوهای طراحی، راهحلهای تکرارشونده و اثباتشده برای مسائل رایج در طراحی نرمافزار هستند.
آنها به افزایش خوانایی، نگهداری، انعطافپذیری و مقیاسپذیری کد کمک میکنند.
الگوها به سه دسته اصلی Creational، Structural و Behavioral تقسیم میشوند.
فهم عمیق مسئله و انتخاب الگوی مناسب، کلید موفقیت در استفاده از آنهاست.
استفاده بیش از حد یا نادرست از الگوها میتواند منجر به پیچیدگی غیرضروری کد شود.
مقدمه: چرا الگوهای طراحی؟
- تعریف الگوهای طراحی: الگوهای طراحی، راهحلهای عمومی و قابل استفاده مجدد برای مسائل تکرارشونده در طراحی نرمافزار هستند. این الگوها بر اساس تجربیات ارزشمند برنامهنویسان خبره شکل گرفتهاند.
- اهمیت الگوهای طراحی:
- حل مسائل تکرارشونده: جلوگیری از دوبارهکاری و ارائه راهحلهای اثباتشده.
- افزایش خوانایی و نگهداری کد: کدهای نوشته شده با الگوهای استاندارد، قابل فهمتر برای دیگران هستند.
- ارتقای انعطافپذیری و مقیاسپذیری: طراحی نرمافزارهایی که قابلیت توسعه و تغییر در آینده را دارند.
- ارتباط مؤثر بین توسعهدهندگان: فراهم کردن یک زبان مشترک برای بحث در مورد راهحلهای طراحی.
- تاریخچه مختصر: اشارهای کوتاه به کتاب “Design Patterns: Elements of Reusable Object-Oriented Software” (GoF) به عنوان مرجع اصلی.
۲. طبقهبندی الگوهای طراحی
الگوهای طراحی معمولاً بر اساس هدفشان به سه دسته اصلی تقسیم میشوند:
- الگوهای ساختاری (Creational Patterns): مربوط به فرآیند ایجاد اشیاء هستند و انعطافپذیری در مورد چگونگی ایجاد اشیاء را افزایش میدهند.
- مثالهای کلیدی: Singleton, Factory Method, Abstract Factory, Builder, Prototype.
- الگوهای ساختاری (Structural Patterns): مربوط به ترکیب کلاسها و اشیاء برای ایجاد ساختارهای بزرگتر هستند.
- مثالهای کلیدی: Adapter, Bridge, Composite, Decorator, Facade, Flyweight, Proxy.
- الگوهای رفتاری (Behavioral Patterns): مربوط به الگوریتمها و تخصیص مسئولیتها بین اشیاء هستند.
- مثالهای کلیدی: Chain of Responsibility, Command, Interpreter, Iterator, Mediator, Memento, Observer, State, Strategy, Template Method, Visitor.
۳. الگوهای طراحی پرکاربرد (با تمرکز بر مفاهیم کلیدی)
در این بخش، به بررسی چند الگوی مهم از هر دسته با توضیحات مفهومی پرداخته میشود:
- Creational:
- Singleton (تکنمونه): اطمینان از اینکه یک کلاس فقط یک نمونه (instance) دارد و یک نقطه دسترسی سراسری به آن فراهم میکند. کاربرد: مدیریت منابع مشترک مانند پایگاه داده یا تنظیمات.
- Factory Method (فکتوری متد): تعریف یک اینترفیس برای ایجاد یک شیء، اما اجازه دادن به زیرکلاسها برای تصمیمگیری در مورد اینکه کدام کلاس را نمونهسازی کنند. کاربرد: زمانی که کلاس نمیتواند پیشبینی کند کدام اشیاء را باید ایجاد کند.
- Structural:
- Adapter (آداپتور): تبدیل اینترفیس یک کلاس به اینترفیس دیگری که مشتری انتظار دارد. کاربرد: ایجاد همکاری بین کلاسهایی که اینترفیس ناسازگار دارند.
- Decorator (دکوراتور): افزودن پویا مسئولیتهای جدید به یک شیء. کاربرد: افزایش قابلیتهای یک شیء بدون تغییر در کلاس اصلی آن (جایگزین مناسب برای وراثت).
- Facade (نما): فراهم کردن یک اینترفیس سادهشده به مجموعهای از اینترفیسها در یک زیرسیستم. کاربرد: سادهسازی استفاده از یک کتابخانه یا فریمورک پیچیده.
- Behavioral:
- Observer (ناظر): تعریف یک وابستگی یک-به-چند بین اشیاء، به طوری که وقتی یک شیء وضعیت خود را تغییر میدهد، تمام وابستگانش به طور خودکار مطلع و بهروز شوند. کاربرد: پیادهسازی مکانیزمهای انتشار رویداد (event notification) مانند رابطهای کاربری گرافیکی.
- Strategy (استراتژی): تعریف خانوادهای از الگوریتمها، بستهبندی هر کدام در یک کلاس مجزا و ایجاد اشیاء قابل تعویض از آنها. کاربرد: امکان تغییر الگوریتم در زمان اجرا، مانند الگوریتمهای مرتبسازی مختلف.
- Iterator (پیمایشگر): فراهم کردن راهی برای دسترسی ترتیبی به عناصر یک مجموعه اشیاء بدون افشای نمایش داخلی آن. کاربرد: پیمایش ساختارهای داده مانند لیستها، درختها و آرایهها.
۴. نکات کلیدی و بهترین روشها
- الگوها راهحل جادویی نیستند: هر الگو مزایا و معایب خود را دارد. استفاده نادرست از الگوها میتواند کد را پیچیدهتر کند.
- فهم مسئله مهمتر از حفظ کردن الگوهاست: ابتدا مسئله را به درستی درک کنید، سپس ببینید آیا الگویی وجود دارد که به حل آن کمک کند.
- از الگوهای رایج شروع کنید: روی الگوهایی که بیشتر در پروژههای عملی استفاده میشوند تمرکز کنید.
- مستندسازی: در صورت استفاده از الگوهای پیچیده، دلیل انتخاب و نحوه پیادهسازی آنها را مستند کنید.
- خوانایی کد: هدف اصلی الگوها، بهبود خوانایی و نگهداری کد است.
۵. خلاصه نکات کلیدی
- الگوهای طراحی، راهحلهای تکرارشونده و اثباتشده برای مسائل رایج در طراحی نرمافزار هستند.
- آنها به افزایش خوانایی، نگهداری، انعطافپذیری و مقیاسپذیری کد کمک میکنند.
- الگوها به سه دسته اصلی Creational، Structural و Behavioral تقسیم میشوند.
- فهم عمیق مسئله و انتخاب الگوی مناسب، کلید موفقیت در استفاده از آنهاست.
- استفاده بیش از حد یا نادرست از الگوها میتواند منجر به پیچیدگی غیرضروری کد شود.
دروس متنی
#1
جلسه 1 آشنایی با زبان جاوا
#2
جلسه 2ویژگی هاي زبان جاوا ◦
#3
جلسه 3 اولین برنامه در جاوا ◦
#4
جلسه 4 مفاهیم اولیه برنامه سازي در جاوا
#5
جلسه 5 مقدمه اي بر طراحی و برنامه سازي شیءگرا
#6
جلسه 6 برنامه سازي شیءگرا در جاوا
#7
جلسه 7وراثت
#8
جلسه 8چندریختی
#9
جلسه 9(interface) واسط
#10
جلسه 10آزمون نرم افزار
#11
جلسه 11الگوهاي طراحی
#12
جلسه 12 (Refactoring) بازآرایی کد
#13
جلسه 13مدیریت خطا و استثنا
#14
جلسه 14 (Generics) داده هاي عام
#15
جلسه 15 (Containers) مجموعه ها و ظرف ها
#16
جلسه 16فایل، جویبار و شبکه
#17
جلسه 17برنامه سازي همروند
#18
جلسه 18 Reflection
#19
جلسه 19مفاهیم پیشرفته و تکمیلی
مشاهده دروس کامل
بررسی صفحه یادگیری دوره