سبد (0)

اصل 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. و یا جدیدتر استفاده می کنید، راه حل دیگری که توسعه متد نامیده می شود، به شما این امکان را می دهد که متد جدیدی را به نوع موجود بیفزایید بدون اینکه دست به متد اصلی بزنید.

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

تمامی محصولات و خدمات این وبسایت، حسب مورد دارای مجوزهای لازم از مراجع مربوطه می‌باشند و فعالیت‌های این سایت تابع قوانین و مقررات جمهوری اسلامی ایران است.
logo-samandehi مجوز نشر دیجیتال از وزرات فرهنگ و ارشاد اسلامی پرداخت آنلاین -  بانک ملت معرفی بیاموز در شبکه سه