460 likes | 999 Views
k. الگوهای طراحی ( Design Patterns ). زیدهسرایی. فهرست مطالب. الگو چیست؟. تاریخچه الگوهای طراحی. فرمت استاندارد الگوها. معرفی و پیادهسازی الگوهای طراحی. دستهبندی الگوها. مزایای الگوهای طراحی. منابع. بالا بردن قابلیت استفاده مجدد.
E N D
k الگوهای طراحی (Design Patterns) زیدهسرایی
فهرست مطالب • الگو چیست؟ • تاریخچه الگوهای طراحی • فرمت استاندارد الگوها • معرفی و پیادهسازی الگوهای طراحی • دستهبندیالگوها • مزایای الگوهای طراحی • منابع
بالا بردن قابلیت استفاده مجدد • هدف اصلی مهندسی نرمافزار استفاده مجدد از طراحی و محصولات مرتبط است : • چارچوبها (Frameworks) • الگوها (Patterns)
تعریفFrameworkاز دیدگاه شئگرایی • یک Frameworkعبارت است از مجموعهای از کلاسهاییکه با ترکیب و کار در کنار هم، یک طراحی با قابلیت استفاده مجدد برای یک کلاس خاص از نرمافزار ایجاد میکنند.(گاما و همکارانش)
تاریخچه الگوهای طراحی • الگوها بهطور کلی نشأت گرفته از علممعماری و حاصل مطالعات الکساندرمیباشند (1977). Gang of Four • (گاما و همکاران، 1995)(باچمن و همکاران، 1996)(اشمیت و همکاران، 2000)(کرچر و جین، 2004)(باچمن و همکاران، a2007)(باچمن و همکاران، b2007)
تاریخچه الگوهای طراحی • کتاب گاما و همکارانش (GoF) بیشترین تاثیر را در پیشرفت الگوهای طراحی داشته است : Design Pattern: Elements of Reusable Object-Oriented Software, 1995. • این کتاب تا سال 2007 بیش از 36 بار تجدید چاپ شده است.
الگو چیست ؟ • سامرویل : الگو توصیفیاز مساله و اساس راه حل آن است، بهطوری که این راه حل میتواند به شکلهایمختلفی مورد استفاده قرار گیرد. الگو = توصیف مساله + بهترین راه حل • الگوها و زبان الگوها روشی برای توصیف بهترین عمل، طراحیهای خوب و انتقال تجربه است.
الگو چیست ؟ • الگوهای طراحی اختصاص به دنیای نرمافزار ندارند و در برخی صنایع نیز ممکن است از طرحهاو الگوها استفاده کنند : الگوی خیاطی • الگوهای طراحی در مهندسی نرمافزار معمولاً به طراحی شئگرا مربوط میشوند و اثر شگرفی بر طراحی نرمافزار شئگراداشتهاند.
الگو چیست ؟ • زمانی یک الگوی طراحی مقبولیت عمومی پیدا میکند که دست کم در سهمورد از یک صورت مساله مشابه نتیجهبخشباشد. • تعداد الگوهای طراحی بسیار زیاد است ولی تنها تعداد کمی از این الگوها شهرت جهانی پیدا کردهاند. زیرا دیگر الگوها یا بسیار سادهاندکه نمیتوان نام الگوی طراحی را بر آنها گذاشت و یا بسیار بزرگ و خاص هستند.
مثال 1 : • محاسبه کتانژانت 2 یک زاویه بر حسب رادیان : • doublecos = Math.Cos(2); • double sin = Math.Sin(2); • double cot = cos / sin;
مثال 2 : • اعتبارسنجی آدرس ایمیل توسط عبارت منظم : • string re=@"^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$"; • if (RegularExpressions.Regex.IsMatch(رشته ورودی,re)) • MessageBox.Show("Email is valid"); • else • MessageBox.Show("Email is not valid");
فرمت استاندارد الگوها • الگوها راه حلهارا تا حد ممكنبهصورت سادهو بهفرمنوشتاریبیان میكنند. • گاما و همکارانش، در کتاب خود یک فرمت استاندارد را برای مستندسازی الگوها ایجاد کردند.
نمایش گرافیکی الگوها • الگوی Observer(بیننده) :
دستهبندی الگوها • الگوهایGoF از لحاظ هدف به سه دسته تقسیم شدهاند : • الگوهای آفرینشی(Creational) : این الگوهادر فرآیندهای ایجاد اشیاء استفاده میشوند.
دستهبندی الگوها • الگوهای ساختاری(Structural) : این الگوهادر تركیبكلاسها و اشیاءمورد استفاده قرار میگیرند. • الگوهای رفتاری (Behavioral) :این الگوها به چگونگی تعامل میان كلاسها یا اشیاء و نیز نحوه توزیع مسئولیت میان آنها میپردازد.
معرفی الگوهای طراحی پر کاربرد • PatternSingleton : برای اینکه از یک کلاس فقط یک نمونه یا شئ ایجاد شود، از الگوی سینگلتون استفاده میشود. شرکت Xفقطمیتواند یک مدیر عامل داشته باشد.
معرفی الگوهای طراحی پر کاربرد • Factory Method Pattern: این الگو، کلاسی است که نمونههایکلاسهایدیگر را با توجه به پارامترهای که برای آن ارسال میشود، ایجاد مینماید.
معرفی الگوهای طراحی پر کاربرد • Decorator Pattern: این الگو، امکان افزودن قابلیتهای جدید به یک شئ را به صورت پویا و در زمان اجرا ممکن میسازد. • بهعبارت دیگر، توسط این الگو میتوانیمیک قابلیت را تنها به یک شئ خاص از یک کلاس اختصاص بدهیم بدون آنکه سایر اشیاء آن کلاس تغییر کنند.
معرفی الگوهای طراحی پر کاربرد • Observer Pattern : این الگو یک وابستگی، یک به چند بین اشیاء میباشد، هنگامیکه شئ طرف یک، وضعیتشتغییر کند، اشیاء وابسته مطلع میشوند و وضعیت خودشان را با توجه به وضعیت طرف یک بروزرسانیمیکنند. • بهعبارت دیگر، الگوی بیننده نمایش شئ را از خود شئ جدا میکند. (سامرویل)
معرفی الگوهای طراحی پر کاربرد • در این الگو، مجموعه اشیاء وابسته راObserver هامینامیم و شئ دیگر را کهObserver ها به آن وابسته هستندSubject مینامیم. الگویObserver
پیادهسازی الگوی سینگلتون - روش اول • 1-یک شئ از کلاس سینگلتوندر همان ابتدای آغاز به کار برنامه باید ایجاد شود. 2-کلاس سینگلتون باید یک متد سازنده از نوعprivateداشته باشد تا نمونه جدید نتواند در خارج از این کلاس ایجاد شود. 3-یک متغیر از نوع static private جهت نگهداری تنها شیءِ کلاس سینگلتون در داخل متد تعریف میشود که نهایتاً شیء را بر میگرداند.
پیادهسازی الگوی سینگلتون - روش دوم • آسانترینراه برای ایجاد کلاسی که فقط بتواند یک نمونه از آن ایجاد شود استفاده از یک متغییر استاتیکدر داخل کلاس میباشد. اولین نمونهای که از این کلاس ایجاد می شود ما متغییر استاتیک را مقدار true میدهیم و در سایر دفعات این متغییر استاتیک در سازنده تست میشود، اگر مقدارشfalse باشد یک شئ از کلاس ایجاد خواهد شد در غیر این صورت شئ جدیدی از آن کلاس ایجاد نخواهد شد.
پیادهسازی الگویFactory Method کارگاه تولیدی پوشاک فروشگاه پوشاک عرفان درخواست پیراهن جدید • تصور کنید که ما یک فروشگاه پوشاک داریم، هر وقت که فروشگاه به لباس خاصی نیاز داشته باشد. اسامی آن را به تولیدکننده (Factory) ارسال میکند و تولیدکننده با توجه به اسامی ارسال شده آن لباسها را تولید کرده و به فروشگاه ارسال میکند. • در این مثال تولیدکننده همان کلاسFactory است که با توجه به پارامترهای ارسال شده (لیست پوشاک مورد نظر فروشگاه) لباس مورد نظر (شئ مورد نظر) را تولید میکند و به مشتری ارسال میکند.
چرا الگوهای طراحی را مطالعه کنیم؟ • استفاده مجدد از راه حلها • از تجربیات دیگران بهره میگیریم و نیازی به ابداع مجدد این راه حلها که تثبیت شدهاند نیست. • استقرار واژگان مشترک : ارتباطات و کار گروهی نیازمند واژگان و فرهنگ لغات مشترک است. الگوهای طراحی این واژگان را برای فاز تحلیل و طراحی پروژه مهیا میکنند.
سایر مزایای الگوهای طراحی • همانگونهکه طراحی شئگراادعا میکند که استفاده مجدد از کتابخانههاو قطعات را افزایش میدهد، ادعا میشود که استفاده از الگوهای طراحی، استفاده مجدد از کتابخانههاو قطعات را افزایش میدهد. • یکی از دلایل مهم استفاده از الگوها، افزایش سرعت در طراحی سیستمهامیباشد.
سایر مزایای الگوهای طراحی • کارآیی و مقبولیتالگوهای طراحی GoFبهحدیرسیده است كه امروزه ابزارهای حرفهایCASE بهطور مستقیم از آنها پشتیبانی میكنند و امکان اعمال الگوهای طراحیGoF را فراهم میکنند. از جمله این ابزارها میتوان ازRational XDE ، Rational Rose وBorland Togetherنام برد.
هدف الگوهای طراحی • هدف الگوها در جامعه نرمافزاری ایجاد یکادبیات پایهای استتا توسعهدهندگان نرمافزار در حل مشکلات تکراری، در کل جریان توسعه از آن یاری گیرند.
الگوهای طراحی در مقایسه با Frameworkها • هر دو ابزاری برای استفاده مجدد در فرایندهای تولید نرمافزار هستند. • الگوهای طراحی در مقایسه با Frameworkها کلیتر و انتزاعیتر هستند. • یک Frameworkدارای معماری بزرگتری است و ممکن است در معماری خود از چندین الگوی طراحی استفاده کند.
الگوهای طراحی در مقایسه با Frameworkها • Framework یک پیادهسازی واقعی از یک یا گروهی از الگوهای طراحی است.
جایگاه الگوهای طراحی در مهندسی نرمافزار ؟
منابع [1]-سامرویل، یان؛ جعفرنژاد قمی، عین الله؛ مهندسی نرمافزار؛ ویراست نهم، علوم رایانه : بابل؛ 1391. [2]-پرسمن، راجر اس؛ سالخورده، محمد مهدی؛ مهندسی نرمافزار؛ ویراست هفتم، خراسان، باقانی : مشهد؛ 1390. [3]-Gang of Four; Design Pattern: Elements of Reusable Object-Oriented Software; 1995. [4]-www.uml.org [5]-www.hillside.net [6]-www.30sharp.com [7]-www.ooa.blogfa.com
منبع پیشنهادی نصیری، وحید؛ الگوهای طراحی برنامهنویسی شئگرادر سیشارپ؛ ناقوس: تهران؛ 1385.
اگر من شخصی بودم که فقط میخواستبرنده شود، تاکنون باید وارد عرصه دیگری میشدم. فکر نمیکنیدکه اگر من در ذهنم خط پایانی را متصور بودم سالهاپیش میبایستاز آن گذر کرده باشم؟ (بیل گیتس)