تا %60 تخفیف خرید برای 2 نفر با صدور مدرک فقط تا
00 00 00

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

مهدی عادلی فر
مهدی عادلی فر
12 پسند
7793 بازدید
14 نظر
75 ماه قبل

با سلام به همه همراهان و اعضای محترم انجمن تخصصی فناوری اطلاعات ایران. با توجه به این که امروزه نرم افزارها بخش مهمی از زندگی بشر رو تشکیل داده اند و بسیاری از کارهای روز مره و محاسبات توسط نرم افزارها انجام می شود، طراحی و توسعه نرم افزار یکی از کار های مهم در جوامع کنونی است. به دلیل پویایی بیش از حد نرم افزار و تغییرات بسیار سریع تکنولوژی ها و نیازمندی های کاربران نرم افزار باید به گونه ای باشد که بتوان به آسانی آن را فهمید و تغییر داد. یکی از راه حل ها برای حل مشکلات گفته شده، الگوهای طراحی شی گرا (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 باشید

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

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

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

نظر شما
برای ارسال نظر باید وارد شوید.
15 نظر