DelphiGuru

وبلاگ شخصی علی دهبان

DelphiGuru

وبلاگ شخصی علی دهبان

DelphiGuru

در این بلاگ مطالب درخور توجه از دنیای برنامه نویسی پیشرفته و به طور اختصاصی تر مباحث مربوط به زبان شی گرا و سطح بالای دلفی قرار میگیرد.

معرفی Design Pattern ها یا الگوهای طراحی!

دوشنبه, ۲۰ ارديبهشت ۱۳۹۵، ۰۴:۲۸ ب.ظ

begin

Design Pattern چیست و به چه دردی میخورد! سوال همینجاست که آیا واقعاً بدون دانستن الگوهای طراحی شما نمیتوانید یک طراح نرم افزار موفق باشید؟

در پاسخ به این سوال باید گفت که خیر! شاید هم بله... !

واقعیت اینست که تعداد قابل توجهی از نرم افزارهای تولید شده ( حد اقل در ایران) الگوهای طراحی را رعایت نمی نمایند و جزو نرم افزارهای موفق هم شناخته میشوند! اما در پس این جریان تولید و توسعه و نگهداری و حتی پشتیبانی چه خبر بوده است؟ چه مسیری طی شده است و چه مسیری واقعا باید طی میشد؟هرینه های توسعه و نگهداری این سیستم ها چگونه است؟

کسی که ادعا میکند که یک مهندس نرم افزار است باید توانایی طراحی مبتنی بر الگو را داشته باشد. الگوهای طراحی در ارتباط تنگاتنگ با OOP (برنامه نویسی شی گرا)هستند و دربسیاری موارد مشکلات OOP را برطرف مینمایند! بله OOP علارغم اینکه به برنامه نویسی در سال های اخیر جانی دوباره بخشید ناگزیر مشکلات خاص خود را نیز به دنبال داشت.

استفاده صحیح از الگوهای طراحی در زیرساخت برنامه ها ، میتواند سرعت روند توسعه را دوچندان نماید و از به وجود آمدن کدهای موسوم به Code Smells و مشکلی به  نام بدهی های فنی جلوگیری نماید. استفاده مجدد از ماژول ها و بخش های مختلف به آسانی صورت میگیرد و در نهایت توسعه به واقع اصولی ، آسان و سریع تر انجام میشود.

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

در ادامه مطلب با انواع الگوهای طراحی آشنا خواهیم شد.

از نظر تاریخی در ابتدا یک معمار به نام الکساندر با بررسی برخی از بناهای تاریخی خوب و برجسته یک سری ویژگی های شاخص در آنها یافت و  پی برد که معمار این بناها بدون اینکه یکدیگر را ملاقات نموده باشند و یا  از کار یک دیگر اطلاعی داشته باشند یک سری روندها و ویژگی ها را همگی رعایت کرده اند ، او این موارد را الگو یا pattern نامید.

پس از آن مهندسین نرم افزار نیز متوجه شدند که چنین الگوهایی در معماری نرم افزار نیز وجود دارد.گروهی 4 نفره از معمارها و طراحان نرم افزار به نام های Erich Gamma  ، John Vlissides  ،  Ralph Johnson ، Richard Helm معروف به Gang of four  کتابی با عنوان Elements of Reusable Object-Oriented Software (لینک دانلود) در سال 1995 منتشر کردند و 23 الگوی طراحی را در آن زمان برای تولید اصولی نرم افزار تعریف نمودند که در تصویر زیر مشاهده میفرمایید.

 

در حال حاضر الگوهای طراحی را به 3 دسته ی کلی تقسیم میکنند که عبارتند از :

1- Creational

این دسته الگوهایی هستند که به شما در ساختن Object ها کمک میکنند و انعطاف پذیری قابل توجهی در سطح نرم افزار ایجاد میکنند. این گروه شامل Pattern های زیر است:

  • Abstract Factory
  • Builder
  • Factory Method
  • Prototype
  • Singleton

2- Structural

این دسته بر چگونگی تعریف و پیکربندی Class  ها و Object ها نظارت میکنند. این گروه شامل Pattern های زیر است:

  • Adapter
  • Bridge 
  • Composite 
  • Decorator 
  • Facade 
  • Flyweight 
  • Proxy 

 

3- Behavioral

این دسته از الگوها به طور خاص بر ارتباط بین Object ها با یک دیگر نظارت دارند. این گروه شامل Pattern های زیر است:

  • Chain of responsibility
  • Command
  • Interpreter 
  • Iterator 
  • Mediator 
  • Memento 
  • Observer 
  • State 
  • Strategy 
  • Template method 
  • Visitor 

 

نکته: MVC  هم نوعی الگوی ساختاری در طراحی نرم افزار است که زیر مجموعه ی هیچکدام از دسته های بالا نیست و در سطح وسیعی برای طراحی رابط کاربری پویا و نرم افزار منعطف تر کاربرد دارد. MVC در واقع یک الگوی معماری است نه الگوی طراحی. جهت اطلاعات بیشتر Wikipedia نقطه ی خوبی برای شروع است!

 

چند دلیل برای لزوم استفاده از الگوهای طراحی وجود دارد.

  1.  افزایش سرعت توسعه به کمک راه حل های تست شده و اثبات شده
  2.  ایجاد کدهای استاندارد و قایل نگهداری و توسعه تا پایان پروژه
  3.  امکان طراحی سیستم های پیچیده با خوانایی بالا
  4.  برقراری ارتباط راحت بین توسعه دهندگان باهم و با کد !
  5.  بهترین و صحیح ترین استفاده از مفاهیم OOP
  6.  امکان تعریف و داشتن Document عالی و راه حل های تست شده برای مشکلات مشخص و تعریف شده
  7.  امکان وفق دادن آسان پروژه با هر نوع تغییرات در آینده
  8.  همه چیز نیاز به خلاقیت و نوآوری نخواهد داشت ، امکان استفاده مجدد از راه حلی که قبلا ارائه شده به راحتی وجود خواهد داشت.

سخت ترین سوال !

چه زمانی از Design pattern   ها استفاده کنیم و در چه نرم افزاری کدام Pattern باید به کار برده شود؟!

پاسخ این سوال را پس از فراگیری تمام الگوها خودتان خواهید دانست ! اما جهت مطالعه ، کتاب 

Head First Design Patterns (لینک دانلود) از انتشارات O’Reilly  شروع زیبایی میتواند باشد!!

ضمناً تماشای ارتباط بین الگوها باهم نیز در تصویر زیر خالی از لطف نیست!

 ادامه دارد...  (دانلود همین مطلب بصورت PDF)

end.

نظرات  (۱)

همه مطالب عالی و کاربردی.
ممنون از شما دوست عزیز.
منتظر مطالب جدید از شرف شما هستیم.

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی