آژانس هواپیمایی
tanki

الگوهای طراحی (Design patterns)

شروع موضوع توسط taxi driver ‏31 آگوست 2007 در انجمن دات نت

  1. taxi driver

    taxi driver Registered User

    تاریخ عضویت:
    ‏11 فوریه 2005
    نوشته ها:
    202
    تشکر شده:
    3
    درود


    این مقدمه از یکی از دوستانم هست که بدون کمی برایتان نقل می کنم


    ‫‫اﻣﺮوزه در دﻧﻴﺎ ﺑﺮاي ﺗﻮﻟﻴﺪ ﻳﻚ ﻣﺤﺼﻮل ﻧﺮم اﻓﺰاري ﻋﻼوه ﺑﺮ اﺳﺘﻔﺎده از ﺗﻜﻨﻮﻟﻮژﻳﻬﺎي ﮔﻮﻧﺎﮔﻮن‬ ‫اﺳﺘﻔﺎده از ﺗﻜﻨﻴﻜﻬﺎ و ﺗﺠﺮﺑﻴﺎت ﺑﺮاي داﺷﺘﻦ ﻳﻚ ﻣﺤﺼﻮل ﺑﺎ ﻛﻴﻔﻴﺖ و ﺳﺎﻟﻢ اﻣﺮﻳﺴﺖ اﺟﺘﻨﺎب ‫ﻧﺎﭘﺬﻳﺮ. اﻳﻦ ﺗﻜﻨﻴﻜﻬﺎ و ﺗﺠﺮﺑﻴﺎت ﺑﺎﻋﺚ رﺷﺪ ﺳﺮﻋﺖ در ﺗﻮﻟﻴﺪ ﺷﺪه و رﻋﺎﻳﺖ ﺳﺎﻟﻢ ﺑﻮدن و ﻛﻴﻔﻴﺖ ‫ﻣﺤﺼﻮل را ﻧﻴﺰ ﺗﻀﻤﻴﻦ ﻣﻲ ﻛﻨﻨﺪ. اﺳﺘﻔﺎده از اﻟـﮕﻮﻫﺎ در ﻻﻳﻪ ﻫﺎ ﻣـﺨﺘﻠﻒ ﺗﻮﻟﻴﺪ ﻳﻚ ﻣـﺤﺼﻮل ﻧﺮم‬
    ‫اﻓﺰاري ﻳﻜﻲ از ﻫﻤﺎن ﺗﻜﻨﻴﻜﻬﺎ ﻣﻲ ﺑﺎﺷﺪ ﻛﻪ ﻣﺒﺘﻨﻲ ﺑﺮ ﺗﺠﺮﺑﻴﺎت اﻓﺮاد ﮔﻮﻧﺎﮔﻮن ﻣﻲ ﺑﺎﺷﺪ ﻛﻪ راه‬ ‫ﺣﻠﻬﺎي ﮔﻮﻧﺎﮔﻮن وﻟﻲ ﻣﻄﻤﻌﻦ ﺑﺮاي ﺣﻞ ﻣﺸﻜﻼت ﺑﻮﺟﻮد آﻣﺪه در ﺗﻮﻟﻴﺪ ﻳﻚ ﻣﺤﺼﻮل را ﭘﺸﺘﻴﺒﺎﻧﻲ ‫ﻣﻲ ﻛﻨﻨﺪ. اﻟﮕﻮﻫﺎ در زﻣﻴﻨﻪ ﻫﺎي ﮔﻮﻧﺎﮔﻮن ﻫﻨﺮي، ﻣﺤﺎﺳﺒﺎﺗﻲ، ﻋﻤﺮاﻧﻲ، ﻓﻴﺰﻳﻜﻲ، ووو ﻧﻘﺶ ﺑﻪ ﺳﺰاﻳﻲ ‫از ﺧﻮد اﻳﻔﺎ ﻣﻲ ﻛﻨﻨﺪ. ﻣﻬﻨﺪﺳﻲ ﻧﺮم اﻓﺰار ﻧﻴﺰ در ﭼﻨﺪ ده اﺧﻴﺮ از اﻳﻦ اﻣﺮ ﻣﺴﺘﺜﻨﺎ ﻧﻤﺎﻧﺪه اﺳﺖ، ‫ﺑﻄﻮرﻳﻜﻪ وﺟﻮد اﻟﮕﻮﻫﺎ در ﺿﻤﻴﻨﻪ ﻣﻬﻨﺪﺳﻲ و ﻣﻌﻤﺎري ﻧﺮم اﻓﺰار ﻧﻘﺶ ﺑﻪ ﺳـﺰاﻳﻲ از ﺧﻮد اﻳـﻔﺎ ﻣﻲ‬ ‫ﻛﻨﻨﺪ و داﻧـﺴﺘﻦ اﻳﻦ اﻟﮕﻮﻫﺎ اﻣﺮﻳﺴﺖ واﺟﺐ و ﺣﻴـﺎﺗﻲ ﺑﺮاي ﺗﻮﻟـﻴﺪ ﻳﻚ ﻣـﺤﺼﻮل ﻧﺮم اﻓﺰاري.‬


    این بحث به تمام زبانهای oo مربوط میشه و دوستان می تونن در اون شرکت کنند

    بنده با زبان c++ , java بیان می کنم و قرار شده دوستان دیگر زبان های دیگر رو کامل کنند
    از علیرضای عزیز هم به خاطر کمک و همیاری در C# تشکر می کنم

    نکته مهم:
    شرط ادامه تاپیک همکاری و پیگیری دوستان می باشد

    موفق و شاد باشید:)
     
  2. taxi driver

    taxi driver Registered User

    تاریخ عضویت:
    ‏11 فوریه 2005
    نوشته ها:
    202
    تشکر شده:
    3
    الگو های طراحی (Design Pattern) :



    کسی وجود دارد که قبلاً مسله شما را حل کرده است.

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

    الگو ها تکنیک هایی هستند که افراد زمانی از آنها برای حل مسائل خاص استفاده کردند. و به عنوان راه حل های خوب شناخته شده اند. سپس این تکنیک ها مستند سازی شده اند تا توسعه دهندگان هنگام برخورد با مسائل مشابه از این مستندات استفاده کنند و مسائل خود را حل کنند.



    تاریخچه الگو های طراحی :

    استفاده از الگوها برای اولین بار به ذهن یک معمار به نام الکساندر خطور کرد. الکساندر با این مشکل روبرو شد که یک طرح خوب و با کیفیت برای یک ساختمان چگونه می تواند باشد. او برای حل مشکل خود، ساختمانها، خیابانها، شهرک ها و هر مکانی که یک انسان برای خودش می سازد را مورد مطالعه و بررسی قرار داد. او کشف کرد که بناهای خوب از نظر طراحی دارای ویژگیهای مشترک هستند. او کشف کرد که بناهای خوب دارای ویژگیهای مشابه هستند واین ویژگیهای مشابه را الگو نامید.

    هر الگو بیانگر یک مسئله و مشکل است که می تواند بارها و بارها روی بدهد همراه با راه حل آن مسئله، وشما می تواند از این راه حل برای میلیون ها بار استفاده کند بدون نیاز مجدد برای پیدا کردن راه حل.

    در اوایل دهه 1990، بعضی از توسعه دهندگان نرم افزار با کارهای الگساندر برخورد کردند.آنها با این سوال روبرو شدند که اگر الگو های طراحی معماری در این رشته به صورت صحیح جواب می دهد آیا می توان الگوهای را برای طراحی نرم افزار بوجود آورد.

    * در نرم افزار چه مسائل وجو دارد که بارها رخ می دهد و تقریبا با روشهای مشابه می توان آنها را حل کرد؟
    * آیا امکان استفاده از مفهوم الگوها در طراحی نرم افزار وجود دارد، آیا می توان راه حل های را برا اساس الگوها بعد از شناسایی الگوها ایجاد کرد.

    سوالات بالا، سوالاتی بودند که توسعه دهندگان مطرح کردند و پاسخ آن را یافتند. پاسخ سوال بلی بود. مرحله بعدی شناسایی الگوها بود و توسعه استانداردهای برای مستند سازی الگوها.



    http://ooa.blogfa.com/8507.aspx
     
  3. taxi driver

    taxi driver Registered User

    تاریخ عضویت:
    ‏11 فوریه 2005
    نوشته ها:
    202
    تشکر شده:
    3
    نیاز انسان ها به تاریخ از آنجا ناشی می شود که مشکلاتی که ما در زندگی شخصی یا جمعی خود با آنها مواجه می شویم، به احتمال زیاد قبل از ما برای کس دیگری هم اتفاق افتاده است. شاید در بسیاری از موارد، مشکلات دقیقا یکی نباشند، ولی مشکلاتی نیز وجود دارد که دقیقا یکسان هستند و به تناوب برای افراد مختلف پیش می آید. مشکلاتی شبیه به هم، که راه حل های مشابه هم دارند. به عنوان مثال یک پزشک کسی است که می داند برای یک مشکل تکراری، چه راه حلی باید ارائه کند. یک پزشک معمولا با بیمارانی سروکار دارد که دارای مشکلات مشابه هستند و درمان مشابه ای نیز نیاز دارند. در چنین مواردی تنها کاری که باید بکند دیدن علائم موجود در بیمار می باشد، چون قبلا کسی پیدا شده، الگوهایی تهیه کرده شامل علائم بیماری و درمان آن. هر چند دانستن این الگوها کفایت نمی کند، ولی می تواند بسیار مفید باشد. الگوهای طراحی در نرم افزار دقیقا همین کار را می کند. تعاریف ارائه شده برای الگو، تقریبا همگی حاوی مضمونی نزدیک به آنچه در بالا گفتیم، می باشد:
    - یک الگو، یک راه حل تکرار شده برای یک مشکل می باشد.
    - یک الگو، مشکلی را توصیف می کند که بارها و بارها اتفاق افتاده است.
    - یک الگو، وسیله ای است برای ثبت و انتقال مهارت ها در یک زمینه خاص.
    الگوهای مختلفی در نرم افزار وجود دارد: الگوی فرایند، الگوی طراحی، الگوی تحلیل و .... در این نوشته می خواهیم بر روی الگوهای طراحی متمرکز شویم. ثبت مهارت های طراحی در قالب یکسری الگوی طراحی، باید حداقل موارد زیر را برای یک الگوی طراحی شامل شود:
    نام: عبارتی که الگو را توصیف کند.
    مشکل: شرحی از مشکلی که قرار است توسط این الگوی طراحی راه حل آن بیان شود.
    زمینه: چه وقت باید از این الگوی طراحی استفاده کرد.
    راه حل: اجزاء طراحی که نیاز داریم و همچنین ارتباطات آنها.
    الگوهای طراحی مزایای زیادی دارند ولی معجزه نمی کنند. با دانستن آنها ما به یک طراح نرم افزار تبدیل نمی شویم. هر مشکلی را نمی توان با آنها حل کرد و همچنین در صورتیکه از آنها استفاده نادرست بشود ممکن است باعث پیچیده تر شدن مسئله نیز بشود. ولی اگر استفاده درست و بجا از آنها صورت گیرد، می تواند بسیار مفید واقع شود.


    http://www.shojaee.com/articles/introduction-design-patterns/
     
  4. alireza sh

    alireza sh مدیر بازنشسته

    تاریخ عضویت:
    ‏2 ژانویه 2006
    نوشته ها:
    2,668
    تشکر شده:
    68
    محل سکونت:
    نصف جهان
    با سپاس فراوان از دوست گرامی کرگدن عزیز

    مبحث بسیار زیبایی است . در خدمت خواهم بود
     
  5. Mojgan110

    Mojgan110 کاربر تازه وارد

    تاریخ عضویت:
    ‏5 مارس 2006
    نوشته ها:
    240
    تشکر شده:
    12
    محل سکونت:
    www.DotNetSource.com
    خوبه ! دستون درد نکنه .

    ولی امیدوارم بصورت حرفه ای توضیح بدین

    چون حالت معمولیش اینه که اول بگن خب این پترن ، نمودارش این ، موارد استفادش این ، از فلان گروه از پترن ها و ...
    بعدش نحوه پیاده سازی که اگه C باشه میشه GOF ! حالا میان مدرنش میکنن ! میگن مثلا دات نت ! جاوا ! کوفت و غیره ! ولی آخرش همون کدی هستش که به C توی GOF بوده !
    خب این که جالب نیس ! سر و تهش اینه که سینتکس C مثلا به دات نت تبدیل بشه ! به جاوا تبدیل بشه ! خب بشه ! خود JLCA هم با دوتا دکمه جاوا رو به دات نت تبدیل میکنه ! :D !

    واسه همینه که میگم " حرفه ای !! " ، مثلا دیدم که پترن رو - فکر کنم همون singleton فسقلی ! - شایدم virtual constructor بودش ، یادم نیست الان ! - اینو اومده بود با " سمافور " نوشته بود ! خاصیت های Lock و ... دات نت رو روشون اضافه کرده بود بخاطر Thread ها و ...اینا ، یا مثلا با ویژگیهای خاص جاوا ، اون رو " بهینه " کرده بود و ....

    اگه اینجوری توضیح بدین که یک World تنکس !
     
  6. taxi driver

    taxi driver Registered User

    تاریخ عضویت:
    ‏11 فوریه 2005
    نوشته ها:
    202
    تشکر شده:
    3
    درود

    ممنون از توجهتون

    ولی اینطور کهمعلومه استقبالی ازش نمیشه
    علیرضای عزیز هم که کم پیدا شدن:(

    قصد و هدف بنده هم همین بود که بررسی دقیقی بکنیم
    چند نفری بحث کنیم و پیاده سازی ها ی مختلفی داشته باشیم
    با امکانات و شرایط متفاوت و....
    مثال
    دقیقاً همون singleton
    با ترد چطور میشه -ترد سیفش چطور میشه و......

    وگرنه سورسش تو ویکی برای 4 5 تا زبان هست

    شاید تنها دلیلی که منم هنوز نرفتم ادامه دادن همین تاپیک باشه
    شما همکاری می کنید؟ :)


    موفق و شاد باشید
     
  7. خرید بیت کوین
  8. alireza sh

    alireza sh مدیر بازنشسته

    تاریخ عضویت:
    ‏2 ژانویه 2006
    نوشته ها:
    2,668
    تشکر شده:
    68
    محل سکونت:
    نصف جهان
    کردگدی جان من که در خدمتم ! اگه لازم میدونی کاری انجام بدم بفرمایید !
     
avanak همکاری در فروش عسل طبیعی و گرده گل ایرانی