در دنیای برنامه نویسی شیء گرایی، کمتر برنامه نویسی که حرفهای باشد را میتوان یافت که با چیزی تحت عنوان Design Patterns (دیزاین پترن یا الگوهای طراحی) آشنا نباشد. به طور خلاصه، منظور از دیزاین پترن راه کارهایی اصولی و در عین تست شده است که در پاسخ به چالش هایی ایجاد شدهاند که در توسعه ی نرمافزار با آنها مواجه خواهیم شد. از یک بعد دیگر، دیزاین پترن ها را میتوان به عنوان یکسری Best Practices نیز در نظر گرفت.
به خاطر داشته باشید |
در برنامه نویسی یا به طور کلی هر مهارتی، Best Practices به یکسری اصول و قوانینی گفته میشود که توسط جامعه ی گسترده ای از کاربران حرفهای مورد استفاده قرار میگیرد و همین مسأله منجر گشته تا به صورت یک قانون کلی نانوشته درآیند که توصیه میشود افراد مبتدی نیز از این قوانین تبعیت کنند. برای روشن شدن این مسأله مثالی می زنیم. یک Best Practice در نامگذاری کلاسها این است که آنها را به صورت PascalCase بنویسیم. به عبارت دیگر، حرف اول کلیه ی کلمات در نام کلاس به صورت بزرگ نوشته شود. توجه داشته باشیم که اگر از این قانون تبعیت نکنیم هیچ مشکلی به وجود نمیآید اما بهتر آن است که نامگذاری های ما به این شکل باشند. |
در حقیقت، دیزاین پترن ها به برنامه نویس کمک میکنند تا به بهترین شکل ممکن ساختار برنامه ی خود را بچینند تا بتوانند بهترین نتیجه را دریافت کنند. توجه داشته باشیم که دیزاین پترن ها اصلا در جزئیات یک نرم افزار دخالتی نمیکنند و این در حالی است که یک دید کلی به برنامه نویس می دهند.
برای روشن شدن این مسأله مثالی می زنیم. فرض کنیم که در برنامه ی خود یک کلاس داریم که از روی آن چند آبجکت ساخته ایم. ما نیاز داریم که اگر یکی از این آبجکت ها دستخوش تغییر شد، سایر آبجکت ها به این تغییر پی ببرند و بالتبع رفتار متفاوتی از خود نشان دهند. برای انجام این کار، راه کارهای بسیاری وجود دارد اما از میان آنها یک راهکار -یا بهتر بگوییم یک دیزاین پترن- است که تست شده و قابل اعتماد است و با خیال راحت میتوان آن استایل برنامه نویسی را مورد استفاده قرار داد که Observer Design Pattern نام دارد.
مثال دیگری می زنیم. فرض کنیم که یک آبجکت توسط یکسری آبجکت دیگر دستخوش تغییر میشود اما ما نیاز داریم تا تغییر آخر را اصطلاحاً Undo یا «لغو» کنیم. در اینجا هم میتوان روشهای بسیار متنوعی را برای انجام این کار در نظر گرفت اما روش یا دیزاین پترنی که توصیه میشود Memento Design Pattern نام دارد که تست شده است و همان نتیجهای که ما میخواهیم را در اختیارمان قرار می دهد.
در واقع، دیزاین پترن ها پاسخ به چالش هایی همچون آنچه در بالا به آنها اشاره شد میباشند که در توسعه ی هر نوع نرم افزاری -از تحت وب گرفته تا اپلیکیشن موبایل و نرم افزارهای دسکتاپ و حتی طراحی بازیهای کامپیوتری- میتوانند به داد برنامه نویسان برسند. جالب است بدانیم که رواج دیزاین پترن ها با انتشار کتابی تحت همین عنوان در اواسط دهه ی 1990 به بازار صورت گرفت:
در این کتاب، 23 دیزاین پترن که در سه گروه مختلف تقسیمبندی شدهاند مورد بررسی قرار که عبارتند از:
- Creational Patterns
- Abstract Factory
- Builder
- Factory Method
- Prototype
- Singleton
این دیزاین پترن ها زمانی به کار میآیند که بخواهیم از روی کلاسی اقدام به ساخت آبجکت کنیم.
- 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
این دیزاین پترن ها هم زمانی مورد استفاده قرار میگیرند که بخواهیم ارتباط مابین آبجکت ها را هندل کنیم.
توجه داشته باشیم که مبحث دیزاین پترن ها بسیار مبحث پیچیده و سطح بالایی است که بدون شک بسیاری از برنامه نویسانی که برچسب حرفهای روی خودشان میزنند نیز با آنها به صورت کامل و جامع آشنایی ندارند! و بالتبع برای درک بهتر آن ها، نیاز به یک دوره ی آموزشی اختصاصی است اما با توجه به این که این دوره مقدماتی بوده و برای دانشجویانی طراحی شده است که تازه قدم به دنیای برنامه نویسی گذاشته اند، یکی از رایج ترین آنها -سینگلتون- را در قالب مثالهایی ساده در آموزش بعد بیان خواهیم کرد (برای آشنایی با نحوهٔ پیادهسازی برخی از الگوهای طراحی رایج، میتوانید به دورهٔ آشنایی با الگوهای طراحی در سکان آکادمی مراجعه نمایید.)......