اصول SOLID در برنامه نویسی - اصل O
اصول SOLID در برنامه نویسی - اصل O
اصل Open/Closed
اصل O از اصول SOLID که به Open/Closed Principle (OCP) معروف است، بیان میکند که کلاسها، ماژولها یا توابع باید برای گسترش باز باشند، اما برای تغییر بسته باشند. به عبارت دیگر، باید بتوان رفتار یک سیستم را بدون تغییر در کد موجود گسترش داد، مثلاً با افزودن کلاسها یا ماژولهای جدید. این اصل به کاهش ریسک خطاها در کد موجود و افزایش قابلیت نگهداری و توسعهپذیری کمک میکند.
در این مقاله، ابتدا مفهوم OCP را توضیح میدهیم، سپس با مثالهایی در زبان C# نشان میدهیم که چگونه میتوان آن را پیادهسازی کرد.
مفهوم اصل Open/Closed
OCP به ما میگوید که به جای تغییر مستقیم کد یک کلاس (که ممکن است باعث ایجاد باگ یا مشکلات در بخشهای دیگر شود)، باید از مکانیزمهایی مانند وراثت، رابطها (Interfaces) یا پلیمورفیسم استفاده کنیم تا رفتارهای جدید را اضافه کنیم. این اصل بهویژه در پروژههای بزرگ که نیاز به توسعه مداوم دارند، بسیار مهم است.
به عنوان مثال، فرض کنید سیستمی برای محاسبه تخفیف مشتریان دارید. اگر هر بار که نوع جدیدی از تخفیف اضافه میشود، مجبور شوید کد کلاس اصلی را تغییر دهید، این نقض OCP است. در عوض، باید سیستمی طراحی کنید که بتوانید انواع جدید تخفیف را بدون دستکاری کد موجود اضافه کنید.
پیادهسازی اصل OCP در C#
برای درک بهتر، دو مثال در C# ارائه میدهیم: یکی نقض OCP و دیگری رعایت آن.
مثال 1: نقض اصل OCP
فرض کنید کلاسی برای محاسبه تخفیف مشتریان داریم:
مشکل این کد:
- اگر بخواهیم نوع جدیدی از مشتری (مثلاً "Premium") با تخفیف 30% اضافه کنیم، باید متد CalculateDiscount را تغییر دهیم و شرط جدیدی به آن اضافه کنیم.
- این تغییر ممکن است به خطاها منجر شود و تستهای موجود را تحت تأثیر قرار دهد.
- این رویکرد نقض OCP است، زیرا کلاس برای افزودن رفتار جدید (تخفیف جدید) نیاز به تغییر دارد.
مثال 2: رعایت اصل OCP
برای رفع مشکل، از رابطها و پلیمورفیسم استفاده میکنیم تا کلاس برای گسترش باز و برای تغییر بسته باشد:
مزایای این کد:
- برای اضافه کردن نوع جدید تخفیف (مثلاً "SuperVIP")، کافی است کلاس جدیدی ایجاد کنیم که رابط IDiscount را پیادهسازی کند. نیازی به تغییر DiscountCalculator نیست.
- این رویکرد کلاس را برای گسترش باز و برای تغییر بسته نگه میدارد.
- کد ماژولارتر و تستپذیرتر است، زیرا هر نوع تخفیف بهصورت مستقل پیادهسازی شده است.
دوره جامع برنامهنویسی وب
مهندس بهمن آبادی در دوره جامع برنامهنویسی وب خود، به اصول طراحی نرمافزار مانند SOLID توجه ویژهای نشان داده است. او در بخشهای مربوط به طراحی شیءگرا، اصل OCP را با مثالهای عملی توضیح میدهد و نشان میدهد که چگونه استفاده از رابطها و پلیمورفیسم میتواند به نوشتن کدهای انعطافپذیر و قابلنگهداری منجر شود. بهویژه، او بر اهمیت این اصل در توسعه برنامههای وب که نیاز به افزودن قابلیتهای جدید دارند، تأکید میکند. برای مثال، در پروژههای وب که ممکن است نیاز به افزودن انواع جدیدی از کاربران یا قابلیتها باشد، رعایت OCP از پیچیدگیهای بعدی جلوگیری میکند.
مدرس بهمن آبادی همچنین به دانشجویان توصیه میکند که از الگوهای طراحی (Design Patterns) مانند Strategy Pattern (که در مثال بالا استفاده شد) برای پیادهسازی OCP استفاده کنند. او با مثالهایی مشابه آنچه در بالا ارائه شد، به دانشجویان نشان میدهد که چگونه میتوانند کد خود را به گونهای بنویسند که در آینده به راحتی گسترش یابد.
نتیجهگیری
اصل Open/Closed یکی از مهمترین اصول SOLID است که به ما کمک میکند کدهایی انعطافپذیر و قابلنگهداری بنویسیم. با استفاده از رابطها، وراثت و پلیمورفیسم، میتوانیم رفتارهای جدید را بدون تغییر کد موجود اضافه کنیم. مثالهای ارائهشده در C# نشان دادند که چگونه میتوان OCP را در عمل پیادهسازی کرد و از نقض آن اجتناب نمود.
مدرس بهمن آبادی در دوره جامع برنامهنویسی وب خود، این اصل را بهخوبی پوشش داده و با مثالهای کاربردی، اهمیت آن را در توسعه نرمافزارهای مدرن نشان داده است. اگر به دنبال یادگیری طراحی نرمافزار با اصول حرفهای هستید، مطالعه این اصل و شرکت در دورههای معتبری مانند دوره بهمن آبادی میتواند بسیار مفید باشد.
منابع:
- What are the SOLID Principles in C#? Explained With Code Examples
- Mastering SOLID Principles in C#: A Practical Guide