مقدمه طراحی شی گرا
چه کسانی این مقاله را بخوانند؟
این مقاله بیشتر برای کسانی مفید است که حداقل از الفبای برنامه نویسی شی گرا اطلاع داشته باشند. منظور کسانی هستند که تفاوت بین کلاس ها و اشیا را می دانند، و می توانند در رابطه با ارکان اصلی برنامه نویسی شی گرایی، مانند انتزاع (Abstraction)، چندریختی (Polymorphism)، کپسوله کردن (Encapsulation) و واسط (Interface) صحبت کنند.
مقدمه
در جهان شی گرا، تنها اشیاء را می بینیم. اشیاء با همدیگر تعامل دارند. کلاس ها، اشیاء، چندریختی و انتزاع، واژگان مرسومی هستند که ما توسعه دهندگان در روزهای کاریمان زیاد می شنویم.
در جهان نرم افزاری مدرن، هر توسعه دهنده نرم افزار، به نحوی از زبان برنامه نویسی شی گرا استفاده می کند، اما سوال اینجاست، آیا او معنای برنامه نویسی شی گرا را واقعاً درک نموده است؟ آیا می داند که به عنوان یک برنامه نویس شی گرا در حال انجام وظیفه است؟ اگر پاسخ مثبت است، آیا حقیقتاً از قدرت برنامه نویسی شی گرا بهره لازم را می برد؟
در این مقاله در صدد هستیم که از ارکان اصلی شی گرایی فراتر رفته و به طراحی شی گرا بپردازیم.
طراحی شی گرا
طراحی شی گرا، فرایند برنامه ریزی سیستم نرم افزاری است که در آن اشیا با یکدیگر در تعامل هستند تا مسئله ای را حل کنند. نقل معروفی هست که می گوید:
"طراحی شی گرای مناسب، زندگی برنامه نویس و تحلیلگر را آسان می کند، در حالی که طراحی بد، آنرا تبدیل به یک فاجعه می کند."
چگونه شروع کنیم؟
هنگامی که فردی شروع به تولید معماری نرم افزار می کند، تمایلاتش ستودنی است. او تلاش می کند تا از تجربه اش در ایجاد یک طراحی ظریف و با کمترین مقدار حافظه بهره ببرد.
زمان که سپری می شود، نرم افزار کهنه می شود. هر درخواست برای امکان جدید، یا تغییر در برنامه، ماهیت طراحی را تغییر می دهد، در نهایت برنامه به جایی می رسد که ساده ترین تغییر در آن، نیازمند تلاش بسیار زیادی است، و مهمتر اینکه احتمال ایجاد خطاهای بیشتر در برنامه افزایش می یابد.
مقصر کیست؟
نرم افزار، چالشهای تجاری زندگی واقعی را مرتفع می کند، بنابراین چون فرایندهای تجاری همواره در حال تغییر هستند، نرم افزار نیز باید تغییر پیدا کند.
تغییرات جزء لاینفک دنیای نرم افزار هستند. پر واضح است که چون مشتریان بابت نرم افزار پول می دهند، چیزی را درخواست می کنند که انتظار داشته اند. بنابراین نمی توانیم تغییر را به این خاطر که طراحی نرم افزار را تحت تاثیر قرار می دهد مقصر بدانیم.
در واقع این طراحی ماست که دارای نقص است.
یکی از بزرگترین مواردی که به طراحی نرم افزار آسیب می زند، ایجاد وابستگی های (Dependency) بی مورد به سیستم می باشد. هر قسمت از سیستم به قسمت های دیگر وابسته است و به همین خاطر تغییر در یک قسمت، روی سایر قسمت ها اثر می گذارد. اگر این وابستگی ها را مدیریت کنیم، به آسانی می توانیم از سیستم نرم افزار، همچنین کیفیت نرم افزار محافظت کنیم.
راه حل: اصول و الگوهای طراحی و معماری نرم افزار
- معماری های نرم افزاری: مانند MVC سه لایه و MVP که به ما می گویند چگونه پروژه ها را ساختاردهی کنیم.
- الگوی طراحی: به ما اجازه می دهد تا از تجربه بهره ببریم، یا حتی راه حل های قابل استفاده مجدد را برای مسائل مرسوم تکراری پیاده کنیم. مثال - مسئله ایجاد شی، مسئله مدیریت نمونه، و ...
- اصول طراحی: بیان می کنند که اگر کارهای الف را انجام دهید به نتیجه ب می رسید. در روش انجام، مختار هستید. هر کسی در زندگی اش یک سری اصول دارد. مثلا "من هرگز دروغ نمی گویم"، یا " من هرگز مشروب نمی نوشم" و ... . افراد از این اصول پیروی می کنند تا زندگی خودشان را آسان کنند، اما این که آنها چقدر به این اصول پایبند هستند به خصوصیات فردی آنها مرتبط است.
به طور مشابه، طراحی شی گرا، با تعداد زیادی اصول پر شده است که به ما این فرصت را می دهد مسائل مرتبط با طراحی نرم افزار را مدیریت کنیم.
آقای Robert Martin (که بیشتر به عمو باب مشهور است) این اصول را در گروه های زیر طبقه بندی می کند.
- اصول طراحی کلاس - که به آن SOLID نیز گفته می شود.
- اصول پیوستگی package
- اصول جفت سازی package
در این مقاله می خواهیم تا به اصول SOLID یا همان اصول طراحی کلاس بپردازیم.
SOLID یا اصول طراحی کلاس
SOLID در واقع سرنام پنج اصل هست که توسط آقای Robert Martin معرفی شد. این پنج اصل عبارتند از:
- اصل تک مسئولیته بودن Single responsibility principle
- اصل باز و بسته بودن Open-closed principle
- اصل جایگزینی لیسکوف Liskov substitution principle
- اصل تفکیک واسط Interface Segregation principle
- اصل وارون سازی وابستگی Dependency inversion principle
گفته شده که هرگاه تمام پنج اصل در کنار یکدیگر به کار گرفته شود، آنگاه برنامه نویس، سیستمی را خلق کرده است که نگهداری و پشتیبانی و توسعه آن در طول زمان راحت است. در ادامه مقاله در مورد هر اصل به تفصیل توضیح خواهیم داد.
- نوشته شده توسط مظاهر نصوحی
- بازدید: 19117