اصل Open-closed در شی گرایی

چاپ

اصل باز و بسته بودن - Open Close Principle یا (OCP)

مقایسه با جهان واقعی

فرض کنید می خواهید یک طبقه دیگر بین طبقه اول و دوم خانه دو طبقه ی خود اضافه کنید. فکر می کنید ممکن است؟ بله، اما آیا این کار موجه است؟

چند راه حل در ادامه می آید:


شناسایی مشکل در برنامه نویسی

حال در نظر بگیرید که متد Select مربوط به کلاس EmployeeDB برای دو کلاینت استفاده شود. یکی برای کاربران عادی، و دیگری برای مدیران، حال نیاز است که در صفحه مربوط به مدیر این متد تغییر پیدا کند.

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


OCP چیست؟

OCP می گوید: "ماژول های نرم افزاری باید نسبت به تغییرات بسته باشند اما برای توسعه باز باشند."

راه حل هایی که OCP را نقض نمی کنند.

1) استفاده از وراثت

می توانیم یک کلاس با عنوان EmployeeManagerDB از کلاس EmployeeDB ارث ببریم و متد Select را برای نیاز جدید باز نویسی کنیم.

نکته: حال طراحی، یک طراحی شی گرای خوبی در نظر گرفته می شود.

UI به صورت زیر در می آید:

//صفحه عادی
EmployeeDB objEmpDb = new EmployeeDB(); Employee objEmp = objEmpDb.Select(); //صفحه مدیر
EmployeeDB objEmpDb = new EmployeeManagerDB(); Employee objEmp = objEmpDb.Select();

2) توسعه متد (Extension Method)

اگر از NET 3.5. و یا جدیدتر استفاده می کنید، راه حل دیگری که توسعه متد نامیده می شود، به شما این امکان را می دهد که متد جدیدی را به نوع موجود بیفزایید بدون اینکه دست به متد اصلی بزنید.

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