SOLID مخفف چند مفهوم مختلف هست که فهم این مطالب میتواند شما را در هنر برنامه نویسی به سطح پیشرفته تری برساند.

S مخفف Single responsibility principle یا SRP به معنی اینکه هر کلاس بایستی فقط یک کار انجام دهد نه بیشتر, که در ادامه  توضیح خواهم داد.

O مخفف Open/closed principle یا OCP به معنی اینکه کلاس ها جوری نوشته بشن که قابل گسترش باشند اما نیاز به تغییر نداشته باشند. در مطالب بعد بیشتر توضیح خواهم داد.

L مخفف Liskov Substitution Principle یا LSP به مفهوم اینکه هر کلاسی که از کلاس دیگر ارث بری میکند هرگز نباید رفتار کلاس والد را تغییر دهد.

I مخفف Interface Segregation Principle با ISP به مفهوم اینکه چند اینترفیس کوچک و خورد شده همیشه بهتر از یک اینترفیس کلی و بزرگ است.

D مخفف Dependency inversion principle یا DIP به معنی اینکه از اینترفیس ها به خوبی استفاده کن!

در این مطلب در رابطه با  Single Responsibility Principle بحث خواهیم کرد. ما  این اصول رو یاد می گیریم تا بتونیم نرم افزار بهتری رو ایجاد کنیم یا به عبارتی اصولی تر کد نویسی کنیم.

همانطور که گفتیم منظور از Single Responsibility Principle در برنامه نویسی شیء گرا این است که هر کلاس بایستی فقط و فقط یک وظیفه را برعهده داشته باشد. وقتی دو دلیل مختلف برای تغییر یک کلاس وجود داشته باشد بنابراین ممکن است دو تیم مختلف این کار را انجام دهند. در نهایت یک کلاس توسط دو تیم مختلف ویرایش می شود و این سبب می شود تا پروسه سوال و جواب برای هماهنگی و … طولانی شود. برای درک بیشتر مسئله مثال زیر را در نظر بگیرید :

فرض کنید کلاسی با نام Book دارید که وظیفه مدیریت عناوین و محتوای کتاب را بر عهده دارد مانند کلاس زیر :

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

با روش جدید ما ساختار مدیریت کتاب را از بخش پرینت جدا کردیم و همچنین ممکن است به انواع فرمت های مختلف بخواهیم خروجی پرینت داشته باشیم. با تعریف یک اینترفیس برای کلاس های پرینت میتوانیم ساختار مشترکی برای آنها ایجاد کنیم و مجددا وظیفه پرینت هر فرمت را به کلاس مستقلی بسپاریم. به نظر شما با این روش انعطاف پذیری برنامه نویس بیشتر نمی شود؟ اگر روزی قرار باشد پرینت با فرمت جدیدی به پروژه افزوده شود نیازی به تغییر کلاس های دیگر نخواهد بود و فقط کلاس جدیدی به مجموعه افزوده خواهد شد که همین باعث حفظ ساختار, تفکیک وظایف, مدیریت بهتر و خطای کمتر خواهد بود.

هنگام طراحی نرم افزار بایستی وظایف پایه از وظایف فرعی تشخیص داده شود. یک کتاب همواره نیازمند عنوان و نام نویسنده است اما همیشه نیاز به خروجی ندارد. اینطور در نظر بگیرید که اگر دیگران بخواهند از کلاس شما در پروژه های خودشان استفاده کنند آیا متد پرینت یک متد الزامی برای آنها خواهد بود؟ به این وسیله میتوانید وظایف اصلی را از وظایف فرعی جدا نمایید. بنابراین پس از رعایت SRP عملا کلاس Book یک کلاس پایه خواهد بود و در هر پروژه ای میتوانید آنرا استفاده نمایید.

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

 

منابع :

http://en.wikipedia.org

http://code.tutsplus.com

http://en.wikipedia.org

محمد باقر رستمی

برنامه نویسی رو دوست دارم و از کارم و بیشتر از اون از یادگرفتن لذت می برم. دوست دارم از این طریق برای مردم دنیا مفید باشم. فارغ از رنگ، نژاد، ملیت و جنسیت.

Latest posts by محمد باقر رستمی (see all)

facebooktwittergoogle_pluslinkedin

یک نظر در رابطه با “مفهوم SOLID در برنامه نویسی – SRP

  1. Pingback: مفهوم SOLID در برنامه نویسی – OCP | پیک نیک - برنامه نویسی

دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*

*