الگوهاي طراحي
Download
Report
Transcript الگوهاي طراحي
بسمهتعالي
فصل سيزدهم
الگوهاي طراحي
اهداف جلسه
بررسی مفاهيم الگوهاي طراحي
شناخت کاربردهاي الگوهاي طراحي
آشنايی با چند الگوي طراحي
آشنايي با ضدالگوها ()AntiPattern
معرفي ضدالگوهاي متداول
2
فهرست مطالب
عوامل ايجاد الگوي طراحي
ساختارهاي طراحي تکرارشونده
مفهوم الگوي طراحي
تاريخچه الگوهاي طراحي
ساختار الگوي طراحي
معرفي چند الگو طراحي
ضدالگوها
3
عوامل ايجاد الگوهاي طراحي
روشهاااي تحلياال و طراحااي شاايدرا تاکيااد بسااياري باار اسااتفاده ان نمادهااا در
طراحي دارند
اما تحليل و طراحي شيدرا تنها رسم نمودار نيست
نقاشي خوب دليل بر طراحي خوبي نيست!
طراحي شيدراي خوب نيان به سالها تجربه دارد
براي مستندساني و ذکر خصوصيات مناسب هستند
طراحي به اندانه دانستن درامر نبان اهميت دارد
بيشترين استفاده مجدد در هنگام طراحي اتفاق ميافتد
مشکالت با تجربه طراحي رفع ميشوند
4
ساختارهاي طراحي تکرار شونده
ساختارهاي تکرارشونده سيستمهاي شيدرا سبب ارتقاي
تجريد ()Abstraction
)Flexibility
انعطاف
ساختارها به صورت مستقيم استفاده نمود
پذيري (اين
توان ان
اما نمي
)Modularity
واحدبندي (
شنـاسايي ،دستهبندي و استفـاده ان آنهاست
اصلي:
مسئله
ظرافت ()Elegance
که حاوي اطالعات ارنشمند طراحي هستند
5
الگوي طراحي
تجريدي ان ساختار طراحي تکرارشونده است
شامل کالس و/يا اشياء
وابستگيها ()Dependencies
ساختارها ()Structures
تعامالت ()Interactions
قراردادها ()Conventions
نامها و ساختار طراحي را بهصورت صريح تعيين ميکند
چکيدهاي ان تجربيات طراحي است
6
الگوي طراحي
(ادامه)
مجموعهاي ان بهترين تجربيات است
راهحلي نمونه براي مسئلهاي در نمينه خاص است
راهي براي تسهيل ارتباطات بين ذينفعان
الگوها پيدا شدهاند و ابداع نشدهاند
7
تاريخچه الگوهاي طراحي
Christopher Alexander -1964
کتاب معماري و طراحي شهري
بيان نکاتي در مورد ترکيب شکلها
نبان الگو
راهي براي ساختن سريع
8
تاريخچه الگوهاي طراحي
(ادامه)
Ward Cunningham & Kent Beck -1987
تصميم به استفاده ان ايدههاي الکساندر
توسعه پنج الگو براي برنامهنويسان مبتدي
ارائه مقالهاي در اين نمينه در کنفرانس
Smalltalk
OOPSLA'87
9
تاريخچه الگوهاي طراحي
(ادامه)
Ralph Johnson ،Richard Helm ،Erich Gamma -1995و
John
Vlissides
طراحي نرمافنار
ارائه کتاب الگوهاي طراحي
10
نمونه الگوي طراحي
11
ساختار الگوي طراحي
ساااختارهاي متعااددي بااراي بيااان الگوهاااي طراحااي پيشاانهاد شااده
است
چهار بخش اصلي هر الگوي طراحي
نام الگو
مسئله (شامل اجبارهاي مسئله)
راهحل
نتايج و کاربردها
12
ساختار الگوي طراحي
ساختار پيشنهادي
(ادامه)
Alexander
نام
نمينه
مسئله (اجبارها)
راهحل (پيکربندي و چگونگي راهحل)
بيان ارتباط بين نمينه ،مسئله و راهحل
13
ساختار الگوي طراحي
ساختار پيشنهادي
نام
عناصر
توصيف
نمونهها
موارد استفاده
جنئيات
(ادامه)
Polti
14
ساختار الگوي طراحي
ساختار پيشنهادي
نام
طبقهبندي
منظور
اسامي مشابه
انگينه
کاربرد
ساختار
(ادامه)
GoF
شرکاء
همکاري
نتايج
پيادهساني/نمونه کد
موارد استفاده
الگوهاي مرتبط
15
ساختار الگوي طراحي
نام ()Name
(ادامه)
بطور خالصه و موجن کاربرد الگو را نشان ميدهد
طبقهبندي ()Classification
طبقهبندي براساس کاري که الگو انجام ميدهد
:Creationalبر روي فرآيند ايجاد اشيا و کالسها تمرکن دارند
:Structuralبر روي ترکيب کالسها و اشيا تمرکن دارند
:Behavioralبر روي رفتار کالسها و اشيا و تونيع وظيفه تمرکن دارند
حونه کاربرد الگوها شامل اشياء و کالسها هستند
16
)(ادامه
ساختار الگوي طراحي
Patterns
Classification
Purpose
Creational
Structural
Behavioral
Scope
Class
Factory Method
Adapter
Interpreter
Template Method
Object
Abstract Factory
Builder
Prototype
Singleton
Adapter
Bridge
Composite
Decorator
Facade
Proxy
Chain of Responsibility
Command
Iterator
Mediator
Memento
Flyweight
Observer
State
Strategy
Visitor
17
ساختار الگوي طراحي
منظور
(ادامه)
جمله کوتاهي که جواب به سواالت نير است
الگو چه کاري انجام ميدهد؟
علت وجودي الگو چيست؟
چه مشکل يا مسئله خاصي را حل ميکند؟
نامهاي مشابه
در صورتيکه الگو داراي اسامي شناخته شده ديگري است ،قيد ميشود
18
ساختار الگوي طراحي
(ادامه)
انگينه ()Motivation
سناريويي که مشاکل طراحاي و اينکاه چگوناه کالسهاا و اشاياي موجاود
در الگو مشکل را حل ميکنند را نشان ميدهد
سناريو کمک ميکند تا درک بهتري ان توصيفاتي مربوط باه الگاو داشاته
باشيد
کاربردپذيري ()Applicability
وضااعيتي کااه الگااو ميتوانااد بااه کااار باارده شااود و نحااو شناسااايي اياان
وضعيت
19
ساختار الگوي طراحي
(ادامه)
ساختار ()Structure
نمايشااي درافيکااي ان کالسهااا در الگااو بااا اسااتفاده ان نماددااذاري
OMT
()Object Modeling Technique
بااراي نمااايش تعااامالت ميتوانيااد ان نمااودار ترتيبااي يااا نمااودار همکاااري
استفاده نمائيد
شرکاء ()Participants
کالسهااا و/يااا اشاايايي کااه در الگااوي طراحااي و انجااام وظااايفش مشااارکت
ميکنند
20
ساختار الگوي طراحي
همکاري ()Collaborations
(ادامه)
نحو همکاري شرکاء در انجام وظايف الگوي طراحي
نتايج ()Consequences
در اين بخش به سواالت ذيل پاسخ دفته ميشود
چگونه الگو ،اهداف مورد نظر خود را برآورده ميساند؟
چه تواننها و نتايجي با به کار بردن الگو بدست ميآيد؟
چه جنبههايي ان ساختار سيستم ميتوانند متفاوت باشند؟
21
ساختار الگوي طراحي
پيادهساني
بخشهاي ان کد الگو به نبان C++يا
Smalltalk
استفادههاي شناخته شده
نکات فني ،نقاط ضعف و ديگر نکاتي که بايد در استفاده ان الگو مد نظر
قرار داد
نمونه کد
(ادامه)
نمونههاي ان الگو در سيستمهاي واقعي
الگوهاي مرتبط
الگوهاي که ارتباط ننديکي با الگوي طراحي مورد نظر دارند
22
الگوهاي طراحي Abstract Factory -
منظور
رابطااااي بااااراي ايجاااااد خااااانوادهاي ان اشااااياي ماااارتبط يااااا وابسااااته باااادون
مشخصکردن کالسهاي آنها فراهم ميکند
کاربردپذيري
وقتااي نميتااوان ساااختار ارتباااطي بااين دروهااي ان کالسهاااي ماارتبط را
پيشبيني نمود
23
الگوهاي طراحي Abstract Factory -
ساختار
24
Abstract Factory - الگوهاي طراحي
25
الگوهاي طراحي Abstract Factory -
نتايج
انعطافپذيري
تجريد
توسعه آن دشوار است
پيادهساني
استفاده ان پارامترها راهي براي کنترل اندانه رابط است
اين الگو در واقع مجموعهاي ان الگوي Factory Methodاست
26
الگوهاي طراحي Bridge -
منظور
بااراي جداساااني رابااط مجاارد(منطقااي) ان پيادهسااانياش (فينيکااي) مااورد
استفاده قرار ميديرد
کاربردپذيري
وقتي رابط و پيادهسانياش بايد با يکديگر متفاوت باشند
وقتي نيان به يک رابط واحد براي تعامل با ديگر کالسها باشد
27
الگوهاي طراحي Bridge -
ساختار
Structure
28
الگوهاي طراحي Bridge -
نتايج
رابط مجرد و پيادهساني ان يکديگر مجنا ميشوند
پيادهساني ميتواند مجنا و متغير باشد
رابااط بايااد بهدونااهاي عمااومي باشااد کااه همااه رابطهااايي کااه پيادهساااني
ميشوند را حمايت کند
پيادهساني
تنها يک پيادهسان بايد وجود داشته باشد
ايجاد پيادهسان صحيح دشوار است
اشتراک پيادهسانها بايد مد نظر قرار ديرد
29
الگوهاي طراحي Composite -
منظور
ترکيب اشيا در ساختاري درختي براي نمايش سلسله مراتب
Part-Whole
کاربردپذيري
وقتي اشيا نيان به ترکيب بهصورت باندشتي ( )Recursiveدارند
و تفاوتي بين اشياي ترکيبي و ساده وجود ندارند
و اشيا در ساختار ميتوانند واحد در نظر درفته شوند
30
الگوهاي طراحي Composite -
ساختار
31
الگوهاي طراحي Composite -
کااالس Graphicشااامل مجموعااهاي ان کالسهاااي ديگاار اساات کااه
تفاوتي با کالس اصلي ندارند
32
Composite - الگوهاي طراحي
گره برگ
گره ترکيبي
CORBA Naming Service
33
الگوهاي طراحي Composite -
نتايج
همساني :بدون در نظر درفتن پيچيددي همه اشيا يکسانند
قابليت توسعه :مولفههاي جديد براحتي ميتوانند افنوده شوند
سربار :سربار تعداد اشياي جديد را کاهش ميدهد
پيادهساني
روشي براي شناسايي والدين و فرنندان بايد استفاده شود
براي والدين و فرنندان ان يک رابط استفاده ميشود
حااذف يااک فرننااد مساائوليت دارد! (اياان فرننااد ميتوانااد فرننااداني داش اته
باشد و سبب ايجاد اشياي يتيم ( )Orphanشود)
34
الگوهاي طراحي Decorator -
منظور
افنودن وظيفه جديد به يک شي به صورت پويا
کاربردپذيري
وقتي نيان به افنودن وظيفه جديد به يک شي باه صاورت پوياا ،شافاف و
بدون تاثير بر ديگر اشيا باشد
حذف وظيفه خاصي ان يک شي بهصورت پويا
وقتي توسعه کالس به نيرکالسها غيرممکن باشد
35
الگوهاي طراحي Decorator -
ساختار
36
الگوهاي طراحي Decorator -
نتايج
وظايف ميتوانند در نمان اجرا افنوده/حذف شوند
موجب کاهش رشد ساختار سلسلهمراتبي ميشود
سبب انسداد رابط ميشود
ترکيب decoratorها بسيار دشوار است
پيادهساني
مطابقت رابط decoratorها بايد در نظر درفته شود
براي decoratorان کالسي سبک و مجرد استفاده نمائيد
در صورتيکه نيان باه افانودن ياک وظيفاه دارياد ،نياان باه تعرياف کاالس
براي decoratorنداريد
37
الگوهاي طراحي Mediator -
منظور
تعريف شيي که چگونگي تعامل بين اشياء ديگر را پنهان ساند
کاربردپذيري
وقتااي تعاادادي شااي بااا يکااديگر بهصااورت خوشتعريااف تعاماال دارنااد ام اا
تعامل آنها پيچيده است
وقتي استفاده مجدد يک شي بهخاطر تعامل نياد آن با ديگار اشايا دشاوار
باشد
وقتي رفتااري باين چناد کاالس تونياع شاده اسات و باياد بادون اساتفاده ان
نيرکالسها سفارشي شود
38
الگوهاي طراحي Mediator -
ساختار
39
الگوهاي طراحي Mediator -
40
الگوهاي طراحي Mediator -
نتايج
تعداد نيرکالسها را کاهش ميدهد
اتصال سست بين کالسهاي مجاور را افنايش ميدهد
ارتباط چند به چند را به ارتباط يک به يک تبديل ميکند
يک کنترلکننده مرکني ايجاد ميکند
پيادهساني
نياااني بااه تعريااف کااالس مجاارد Mediatorنيساات نياارا کالسهاااي همکااار
ميتوانند با يک Mediatorکار کنند
41
الگوهاي طراحي Observer -
منظور
تعريااف يااک رابطااه يااک بااه چنااد بااين اشااياء بصااورتيکه وقتااي يااک ش اي
حالتش را تغيير ميدهد ،بقيه اشيا مطلع شده و برون شوند
کاربردپذيري
وقتي تجريدي داراي دو جنبه بوده و يکي به ديگري وابسته باشد
وقتي تغيير در ياک شاي سابب تغييار ديگار اشايا ميشاود و نميدانياد چاه
تعداد شي ديگر نيان به تغيير دارند
وقتي يک شي نيان به مطلع ساختن شي ديگر دارد و در مورد چگاونگي
آن شي اطالعي ندارد
42
الگوهاي طراحي Observer -
ساختار
43
الگوهاي طراحي Observer -
مثال
44
الگوهاي طراحي Observer -
نتايج
واحدبندي Subject :و Observerها ميتوانند مستقل باشند
قابليت توسعه :ميتوان هر تعداد Observerتعريف نمود
قابليت سفارشي شدنObserver :هاي متفاوت ،ديدهاي مختلف را نمايش
ميدهند
برونرساني غيرمنتظرهObserver :ها اطالعي ان يکديگر ندارند
سربار برونرساني :برونرساني سربار نيادي ايجاد مينمايد
45
الگوهاي طراحي Observer -
پيادهساني
نگاشاات Subjectهااا بااه Observerهاااي متناظرشااان راهااي ساااده بااراي در
جريان بودن Subjectان برونرساني Observerاست
ارجاع معلق به Subjectهاي حذف شده بايد مورد توجه قرار ديرند
ان پروتکلهااااي برونرسااااني ويااا ه ( Observerمااادلهاي
and pull
)push
اجتناب نمائيد
46
ضدالگوها ()AntiPatterns
ايده ضدالگوها ان آنجا ناشي شاده اسات کاه اغلاب کارهااي منتشار
در مهندسي نرمافنار به راهحلهاي ساننده و موثر تمرکن دارد
ضدالگوها بر راهحلهاي منفي و ناموفق تمرکن دارند
ضااادالگو مجموعاااهاي ان راهحلهااااي متاااداول کاااه باااراي حااال ياااک
مساائله اتفاااق ميافتنااد و بطااورقطعي نتااايج منفااي يااا ناااموفق توليااد
نمودهاند را توصيف مينمايد
47
ضدالگوها
(ادامه)
همانطور که نيان به دانساتن الگوهاا در نميناه خااص وجاود دارد،
دانسااتن وجااود يااا عاادم وجااود ضاادالگو ميتوانااد بااه توسااعه بهتاار
نرمافنار کمک کند
بسياري ان مهندسان نرمافنار ميخواهند بدانند «آيا راهي که ميروند به
شکست منجر ميشود»
48
مثالي از ضدالگوها
در سطح مديريت پرو ه
پنج پرو ه ان شش پرو ه به شکست منجر شدهاند!
يک سوم پرو ههاي نرمافناري رها شدهاند!
بودجه و نمان واقعي انجام پرو ه بيش ان دو برابار ان آنچاه تخماين نده
ميشود ،است!!!
49
مثالي از ضدالگوها
کار ديروز
(ادامه)
بحث امروز
برنامهنويس ي ساختاريافته
فناوري مولفهها
طراحي باال به پائين
اشيا توزيعشده
معماري Client/Server
معماري سرويسگرا
توليد کد از مدل
استفاده مجدد از نرمافزار
عاملهاي نرمافزار ()Agents
رابط Web
50
رابطه بين الگو و ضدالگو
اغلب الگوهاي طراحي منجر به ضدالگو ميشوند
برنامهنويسي رويهاي در دهه 60و 70يک الگوي طراحي بود ،اماا در
حال حاضر ضدالگو است
شيدرايي در حال حاضر يک الگاو اسات ،اماا در حاال تباديل باه ضادالگو
است
-
-
51
رابطه بين الگو و ضدالگو
(ادامه)
زمينه و علل
مشکل
راهحل ضدالگو
زمينه و اجبارها
نشانهها و نتايج
راهحل
راهحل جمعبندي شده
مزايا
نتايج
راهحلهاي مرتبط
مزايا
نتايج
راهحلهاي
مرتبط
52
نمونه ضدالگوها
The Blob
Golden Hammer
Continuous obsolescence
Dead End
Lava Flow
Spaghetti Code
Ambiguous viewpoint
Input Kludge
Functional decomposition
Walking through a Minefield
Poltergeists
Cut-and-Paste Programming
Boat Anchor
Mushroom Management
53
طبقهبندي ضدالگوها
ضدالگوهاي توسعه
ضدالگوهاي معماري
ضدالگوهاي مديريتي
54
ضدالگوهاي توسعه Lava Flow -
مشکل
اسااااتفاده ان کااااد قااااديمي و اطالعااااات طراحااااي فراموششااااده در طراحااااي
دايمالتغيير
نمونه
طراح ارشد استعفا نموده است
طراح جديد روش بهتري ارائه نموده است ،اما بادليل عادم آشانايي باا کاد
نميتواند آنها را حذف نمايد
55
ضدالگوهاي توسعه Lava Flow -
علل
تونيع کنترلنشده کدهاي اتمام نشده يا اصالح نشده
قسمتها و مسيرهايي که براي تست در کاد قارار داده شاده بودناد ،حاذف
نشدند
شکاف در معماري بخاطر استفاده ان فناوري قديمي
شااکاف در معماااري وقتااي بوجااود ميآيااد کااه معماااري اوليااه پااس ان شااروع توسااعه
دچار تغييرات شگرف شود
فقدان معماري
فقدان مديريت پيکربندي
56
ضدالگوهاي توسعه Lava Flow -
راهحل
اسااتفاده ان سيسااتم مااديريت پيکربناادي ساابب ميشااود کااه کاادهاي کهنااه
شناسايي و حذف شوند
تکميلنمودن طراحي (قديمي)
استفاده ان يک معماري سالم براي پيشبردن مراحل توسعه
استفاده ان رابط در سطح سيستم که خوش-تعريف ،پايا و بدرستي مستند
شده باشد
57
ضدالگوهاي توسعه Blob -
مشکل
اسااتفاده ان ساابک طراحااي رويااهاي منجاار بااه ايجاااد تالسااي بااا مساائوليت
بسيار نياد ميشود
بقيه تالسها تنها داده نگهداري مينمايند
اين کالس همان کالسي است که قلب معماري خواهد بود
اين کالس پردانش و ديگر دادهها را انحصاري مينمايد
58
ضدالگوهاي توسعه Blob -
علل
فقدان ديدداه معماري شيدرايي
عدم وجود التنام به معماري
طراح رويهاي معمار ارشد است
عدم تمايل توسعهدهنددان در طراحي کالسهاي جديد و تارآمد
در پرو ههاااي تکااراري افااراد سااعي ميکننااد کااار خااود را افاانايش ندهنااد و تاارجيح
ميدهند ان کالسهاي قديميتر استفاده نمايند ،بدون اينکاه نياان باه ناوآوري داشاته
باشند
59
ضدالگوهاي توسعه Blob -
راهحل
تونيع مجدد وظيفهمندي
جداساني اثر تغييرات
تعيين يا طبقهبندي خصوصيات و عمليات
حذف «ارتباطات بسيار دور» ،نائد يا غيرمستقيم
حذف تمام ارتباطات موقت
60
پرسش و پاسخ
61