در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

آموزش دیزاین پترن (Design Patterns) قسمت 1 : اطلاعات پایه

با سلام به همه همراهان و اعضای محترم انجمن تخصصی فناوری اطلاعات ایران. با توجه به این که امروزه نرم افزارها بخش مهمی از زندگی بشر رو تشکیل داده اند و بسیاری از کارهای روز مره و محاسبات توسط نرم افزارها انجام می شود، طراحی و توسعه نرم افزار یکی از کار های مهم در جوامع کنونی است. به دلیل پویایی بیش از حد نرم افزار و تغییرات بسیار سریع تکنولوژی ها و نیازمندی های کاربران نرم افزار باید به گونه ای باشد که بتوان به آسانی آن را فهمید و تغییر داد. یکی از راه حل ها برای حل مشکلات گفته شده، الگوهای طراحی شی گرا (Object Oriented Design Pattern) می باشد. این الگو ها به قدری مهم هستند که اگر کسی بخواهد در شرکتی به عنوان برنامه نویس استخدام شوند یکی از سوالاتی که در مصاحبه کاری از وی پرسیده می شود تسلط بر این الگوها می باشد. به دلیل این که منبع فارسی جامعی برای این مباحث وجود ندارد تصمیم گرفتم سری مقالات و آموزش الگوهای طراحی را به یاری خداوند شروع کنم.سری مطالبی که به این منظور در سایت قرار خواهم داد این گونه خواهد بود که اول در قالب یک مقاله یک یا چند الگو را توضیح داده و مشکلات و چالش های آن را بررسی خواهم کرد سپس در قالب یک آموزش به توضیح و نحوه استفاده از الگوی مورد نظر را بیان می کنم.الگو هایی که در این سری مطالب بررسی می کنیم شامل الگوهای زیر می باشند:

  • الگوهای مطرح شده توسط Erich Gamma,Richard Helm, Ralph Johnson,John Vlissides که به اختصار gang of four شناخته می شوند.
  • الگوهای مطرح شده توسط Martin Fowler

در آموزش های گفته شده بیشتر از کد های C# استفاده خواهد شد ولی سعی می کنم کد های Java رو هم در کد ها بیاورم. برای درک کامل مطالبی که در این سری ارائه می شود لازم است که خوانندگان به مفاهیم شی گرایی و همچنین زبان مدل سازی uml آشنا باشند.از آنجایی که هیچ مطلبی خالی از اشکال نیست از دوستان خواهش می کنم که با نظرات خودشون بنده رو در این کار یاری کنند.حال به امید خدا شروع می کنیم.

مقدمه

برای شروع مقدمه ای از شی گرایی و نمودار های uml می گم تا در مطالب بعدی به الگوها می پردازم.ما در یک دنیای شی گرا زندگی می کنیم به گونه ای که خود شما یک شی هستید. شما با اشیا دیگر که ممکن است انسان، حیوان، و یا هرچیز دیگری ارتباط برقرار می کنید. همه اشیا دارای خصوصیاتی هستند. خود شما نیز دارای خصوصیاتی هستید مانند قد، وزن، رنگ مو و..... همچنین رفتار هایی از همه ی اشیا سر می زند یا بر روی اشیا رفتارهایی صورت می گیرد. خود شما نیز دارای رفتارهایی مثل غذا خوردن و راه رفتن اجرا می کنید.اشیا در برنامه نویسی هم ساختارهایی هستند که دارای خصوصیات و رفتارهایی می باشند. که خصوصیات برای نگهداری داده های مربوط به شی مورد نظر مورد استفاده قرار می گیرندو و رفتار ها بر روی خصوصیات خود شی و یا خصوصیات اشیا دیگر عملی انجام می دهند. خصوصیات در برنامه نویسی شی گرا به نام های property,field شناخته می شوند و رفتارها با نام های method,function شناخته می شوند.

همه ی اشیا از مفهومی به نام کلاس ساخته می شوند که هر کلاس مشخص می کند که اشیائی که از آن کلاس ساخته می شوند باید چه خصوصیات و رفتارهایی داشته باشند. به طور مثال شما یک شی از کلاس انسان ساخته شده اید و خصوصیات و رفتارهایی را که انسان باید داشته باشد را دارید. اما خود کلاس یک مفهوم انتزاعی(abstract) است یعنی همانطور که انسان یک مفهوم است و وجود خارجی ندارد خود کلاس نیز وجود ندارد و برای درک آن باید شیئی که از آن ساخته شده را دید.یکی از مفاهیمی که در برنامه نویسی شی گرا به آن برمی خوریم مفهوم کپسوله سازی(Encapsulation) است. همانطور که گفته شد همه ی اشیا دارای خصوصیات و رفتارهایی هستند که برخی بر همه آشکار است و برخی دیگر از دید دیگران مخفی هستند. به این مفهوم کپسوله سازی می گویند که یکی از مفاهیم بسیار مهم شی گرایی می باشد و باعث می شود اطلاعاتی برای دیگر اشیا آشکار شود که مورد نیاز آنها است و باقی اطلاعات از دید کاربران مخفی است و همینطور باعث بالا رفتن امنیت داده ها می شود.

همینطور با استفاده از کپسوله سازی می توان بر چگونگی استفاده از خصوصیات اشیا نیز نظارت داشت.از مفاهیم دیگر در برنامه نویسی شی گرا وراثت(inheritance) می باشد که به توضیح آن می پردازیم. اگر شما خود را به عنوان یک شی در نظر بگیرید که از کلاس انسان ساخته شده باشید. این نکته بدیهی است که انسان یک موجود زنده است، زیرا خواص و رفتارهای موجودات زنده را دارد مانند تنفس و تغذیه و رشد و ترمیم. در مفاهیم شی گرایی می گوییم کلاس انسان کلاس موجودات زنده را به ارث می برد یا کلاس انسان از کلاس موجودات زنده مشتق می شود. در برنامه نویسی شی گرا نیز وراثت به این شکل است و کلاس ها مانند دنیای واقعی به شکل سلسله مراتبی ساخته می شوند که یک کلاس می تواند از کلاس دیگر مشتق شود و خصوصیات و متدهای کلاس پدر را داشته باشد.

یکی از مفاهیم دیگر در شی گرایی چندریختی(polymorphism) می باشد که به این معنی است که همه ی کلاس های مشتق شده از یک کلاس خاص می توانند یک رفتار خاص را به گونه ای که مورد نظر خودشان است پیاده سازی کنند. برای مثال تصور کنید در کلاس حیوانات پستانداری که در خشکی زندگی می کنند عمل راه رفتن وجود دارد ولی حیوانی مانند ببر بر روی پنجه راه می رود و حیوانی مانند اسب بر روی سم راه می رود. هر دو کلاس اسب و ببر عمل راه رفتن را انجام می دهند ولی این متد را هر کدام به شکل گوناگون پیاده سازی کرده اند.مفهومی که در شی گرایی به وفور از آن استفاده می شود مفهوم انتزاع(abstraction) است. تلویزیون خانه خود را در نظر بگیرید . این دستگاه دارای یک کنترل از راه دور است که با استفاده از آن می توان اعمالی را برروی تلویزیون مثل روشن و خاموش کردن انجام داد ولی لازم نیست که کاربران درباره ی چگونگی ارتباط کنترل از راه دور با دستگاه و نحوه پردازش امواج توسط کنترل اطلاعی داشته باشد و فقط باید روش کارکردن با آن را بلد باشد. دربرنامه نویسی نیز کلاس ها و اشیا بسیاری هستند که ما باید فقط روش کارکردن با آنها را بلد باشیم و نیازی نیست که بدانیم چگونه طراحی شده و از چه الگوریتم هایی بهره گرفته اند و فقط می توانیم از خصوصیات و ویژگی های مرتبط آنها اطلاع داشته باشیم.

اینترفیس(Interface): در زبان هایی مثل C#, Java اینترفیس ها بیان کننده ی قوانینی هستنند که اگر کلاسی بخواهد از اینترفیس مورد نظر استفاده کند مجبور است که همه ی قوانین را اجرا می کند. این قوانین شامل خصوصیات کلاس و نوع آن و همچنین شامل متدها و نوع برگشتی و تعداد آرگومان های آن است. نکته ای که وجود دارد این است که اینترفیس هیچ کدام از این متدها رو پیاده سازی نمی کند و خصوصیات را مقدار دهی نمی کند و فقط مشخص می کند که کلاس های مشتق شده باید این ویژگیها را حتما باید داشته باشند. اینترفیس ها در داخل الگوهای طراحی بسیار کاربرد دارد که در مقالات بعدی بیشتر آشنا خواهیم شد. قسمت های گفته شده تنها یک معرفی ساده و خیلی کوتاه از مفاهیم شی گرایی می باشد که لازم بود برای وارد شدن به مبحث الگوهای طراحی گفته شوند. در ادامه به معرفی چند نمودار UML می پردازیم که در شرح الگوهای طراحی از آنها بسیار استفاده خواهیم نمود. نمودار کلاس (class diagram) این نمودار همه ی کلاس ها و خصوصیات و متدهای آنها و همچنین ارتباط بین کلاس ها و نوع این ارتباط ها را نشان می دهد.

آموزش دیزاین پترن (Design Patterns) قسمت 1 : اطلاعات پایه

مهمترین عنصر در این نمودار عنصر کلاس است که به شکل مستطیل است که دارای سه قسمت می باشد: در بالای این شکل اسم کلاس آورده شده است و در قسمت Attributes خصوصیات کلاس و در قسمت Operations متدهای کلاس آورده می شود.ارتباط بین کلاس ها با خطوطی مشخص می شوند که هر کدام دارای مفهوم خاصی می باشد. یکی از ارتباط های مهم، ارتباط وراثت می باشد که به این شکل نشان داده می شود.

آموزش دیزاین پترن (Design Patterns) قسمت 1 : اطلاعات پایه

در شکل بالا کلاس های Teacherو Student از کلاس Person ارث بری می کنند. توجه داشته باشید که کلاس ها می توانند از یک اینترفیس نیز ارث بری داشته باشند. اینترفیس ها به شکل زیر در نمودار کلاس نشان داده می شوند.

آموزش دیزاین پترن (Design Patterns) قسمت 1 : اطلاعات پایه

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

نویسنده : مهدی عادلی

منبع : جزیره برنامه نویسی وب سایت توسینسو

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی می باشد.

#آموزش_design_pattern #الگوهای_طراحی #آموزش_الگوهای_طراحی #الگوهای_طراحی_در_نرم_افزار #آموزش_برنامه_نویسی_شی_گرا #طراحی_و_تولید_نرم_افزار #design_pattern_چیست؟ #آموزش_برنامه_نویسی #الگوهای_طراحی_شی_گرا
عنوان
1 آموزش دیزاین پترن (Design Patterns) قسمت 1 : اطلاعات پایه رایگان
2 آموزش دیزاین پترن (Design Patterns) قسمت 2 : معرفی الگوها رایگان
3 آموزش دیزاین پترن (Design Patterns) قسمت 3 : Singleton و Adapter رایگان
4 آموزش دیزاین پترن (Design Patterns) قسمت 4 : الگوی Observer رایگان
5 آموزش دیزاین پترن (Design Patterns) قسمت 5 : الگوی Iterator رایگان
6 آموزش دیزاین پترن (Design Patterns) قسمت 6 : الگوی Command رایگان
7 آموزش دیزاین پترن (Design Patterns) قسمت 7 : الگوی Mediator رایگان
8 آموزش دیزاین پترن (Design Patterns) قسمت 8 : الگوی Memento رایگان
9 آموزش دیزاین پترن (Design Patterns) قسمت 9 : الگوی Strategy رایگان
10 آموزش دیزاین پترن (Design Patterns) قسمت 10 :الگوی Factory Method رایگان
11 آموزش دیزاین پترن (Design Patterns) قسمت 11 : الگوی State رایگان
زمان و قیمت کل 0″ 0
14 نظر
mhsn-babaei

سلام من این مقاله رو میخوام.چطور میتونم بگیرم؟

این نظر توسط مهدی عادلی در تاریخ يكشنبه, 22 شهریور 1394 حذف شده است.

دلیل: مطلب فاقد بار فنی بوده و جنبه تبلیغاتی دارد

علی  ورزشی

بسیار عالی

yashar98

سلام

من نمی خواستم حقیقتش تو سایت itpro عضو بشم چون مطالبش بیشتر درمورد شبکس و کار من بیشتر برنامه نویسیه

دلیل عضویتم هم فقط این بود که بتونم کامنت بزارم و خیلی ازتون تشکر کنم. دیزاین پترن مبحث خیلی خیلی مهمیه.

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

با تشکر

amin_amraei

این مقاله خروجی pdfش خرابه

علی  ورزشی

با سلام خدمت اقای عادلی عزیز

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

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

مهدی عادلی فر

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

amin_amraei

سلام ممنون

maniya1364

سلام. ببخشید شاید سوال من خیلی ابتدایی باشه، ولی میشه تفاوت برنامه نویسی شی گرا (object oriented programming) و الگوی طراحی شی گرا (object oriented design pattern) رو یه کم توضیح بدین لطفا؟

ممنون میشم

مهدی عادلی فر

سلام به شما دوست عزیز

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

maniya1364

واقعاااا ممنونم. تشکر از پاسخ مفید و البته سریعتون.

آیا کتابی توصیه دارید برا آشنایی بیشتر با OOD Pattern؟ یا ترجمه شده یا به زبان انگلیسی. ممنون میشم راهنماییم کنید.

مهدی عادلی فر

کتاب design patterns نوشته ۴ تا نویسنده است که به gang of four معروف هستند. البته کدهای این کتاب به زبان c++ هست ولی پایه همه ی کتاب هاست

maniya1364

تشکر فراوان از راهنمایی سریع و مفیدتون

hosseinkhazaei

سلام دانلود pdf سایت کار نمی کنه

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره پاییزه می تونی امروز ارزونتر از فردا خرید کنی ....