اصل باز - بسته به زبان ساده

محمد کلاته
1402/06/30

توسعه نرمافزار به یکی از چالشهای پیچیده حوزه فناوری اطلاعات تبدیل شده است. در دنیای پویا و دینامیک تکنولوژی که نیاز به تغییرات مداوم در نرمافزارها حتمی است، اصل باز - بسته بودن (Open – Close Principle) یکی از اصول مهم SOLID در مهندسی نرمافزار است که به توسعهدهندگان کمک میکند تا نرمافزارهای قابل توسعهای بسازند که از اصول خاصی پیروی می کند. در این مقاله، به تبیین اهمیت اصل باز - بسته بودن (Open – Close Principle) و نحوه استفاده از آن در توسعه نرمافزار میپردازیم.
چرا نیاز به اصل باز - بسته بودن (Open – Close Principle)داریم؟
استقلال از تغییرات
یکی از اصول مهم اصل باز - بسته بودن، این است که کد باید برای توسعه باز (Open) و برای تغییرات در کد موجود بسته (Closed) باشد. این به این معناست که در صورت نیاز به اضافه کردن ویژگیهای جدید به نرمافزار یا تغییر ویژگیهای موجود، نباید کد موجود را تغییر دهیم. این مزیت به توسعهدهندگان امکان میدهد تغییرات را با افزودن کد جدید اعمال کنند و از کد موجود (بدون دستکاری در آن) استفاده کنند.
کاهش اثرات جانبی
تغییر کدها ممکن است اثرات جانبی و خطراتی برای قسمتهای دیگر نرمافزار ایجاد کند. اصل باز - بسته بودن باعث میشود که تغییرات محدود به بخش مورد نیاز باشد و بر روی دیگر بخش های نرمافزار تأثیر نگذارد.
قابلیت تست و اطمینان
با استفاده از اصل باز – بسته بودن، میتوانیم قسمتهای مختلف کد را (با این تضمین که تغییرات جدید به عملکرد قبلی آسیب نخواهد رساند) را به صورت مستقل تست کنیم.
کاربردهای اصل باز – بسته
توسعهپذیری
این اصل به توسعهدهندگان امکان میدهد تا ویژگیهای جدید را به نرمافزار اضافه کنند بدون اینکه نیاز به تغییرات در کدهای موجود داشته باشند. این باعث میشود نرمافزار توسعهپذیرتر و انعطافپذیرتر باشد.
امکان استفاده مجدد
باعث میشود کدها به صورت مستقل و قابل استفاده مجدد باشند. میتوان اجزاء کد را در پروژههای مختلف مورد استفاده قرار داد.
کاهش ریسک
با استفاده از اصل باز - بسته، تغییرات به عملکرد کدها با دقت بیشتری انجام میشود و از بروز مشکلات ناخواسته جلوگیری میشود.
بلاگ مرتبط
اصل Single Responsibility به زبان ساده!
معایب اصل باز – بسته
پیچیدگی اضافه
برای اجرای درست اصل باز - بسته ، ممکن است نیاز به ایجاد ساختارهای پیچیدهتری داشته باشیم که منجر به اضافه کردن تعداد زیادی کلاس و رابط (Interface)های جدید میشود که این امر ممکن است کد را پیچیدهتر کند.
نیاز به طراحی اولیه دقیق
برای اجرای درست اصل باز - بسته، نیاز به طراحی اولیه دقیق و برنامهریزی داریم. در غیر اینصورت، ممکن است نتوانیم به راحتی تغییرات را اعمال کنیم.

نمونه کد
برای نمونه، فرض کنید که یک برنامه سفارش آنلاین داریم که کاربر میتواند محصولات مختلفی را سفارش دهد. میتوانیم اصل باز - بسته را با استفاده از یک Interface برای سفارشگیری اعمال کنیم. بعداً میتوانیم بدون تغییر در کد موجود، کلاسهای مختلفی را برای محصولات جدید اضافه کنیم.
using System; // واسطه (Interface) برای سفارشگیری interface IOrderable { void PlaceOrder(); } // کلاس محصول اول class Product1 : IOrderable { public void PlaceOrder() { Console.WriteLine("Order for Product1 is placed."); } } // کلاس محصول دوم class Product2 : IOrderable { public void PlaceOrder() { Console.WriteLine("Order for Product2 is placed."); } } // تابع اصلی class Program { static void Main(string[] args) { IOrderable product1 = new Product1(); IOrderable product2 = new Product2(); IOrderable[] products = { product1, product2 }; foreach (var product in products) { product.PlaceOrder(); } } }
در این کد، ما از اینترفیس `IOrderable` برای تعریف متد `PlaceOrder` استفاده و سپس دو کلاس `Product1` و `Product2` را ایجاد کردهایم که این اینترفیس را پیادهسازی میکنند. در تابع اصلی، ما نمونههای مختلف از این کلاسها را ایجاد کرده و از طریق اینترفیس `IOrderable` آنها را صدا میزنیم تا سفارشها را قرار دهیم.
این نمونه کد نشان میدهد که چگونه میتوان با استفاده از اصل باز – بسته بودن، کلاسها را برای توسعه و اضافه کردن ویژگی های جدید، باز و برای تغییر در کد موجود، بسته نگه داشت.
اصل باز – بسته بودن، اصلی اساسی در مهندسی نرمافزار است که به توسعه نرمافزارهای قابل توسعه، قابلیت تست و مدیریتپذیر کمک شایانی میکند. این اصل با افزایش انعطافپذیری و قابلیت استفاده مجدد کدها به توسعهدهندگان و تیمهای توسعه کمک میکند. با اعمال اصل باز – بسته بودن، میتوانیم نرمافزارهایی بسازیم که به سرعت به نیازها و تغییرات مختلف مشتریان پاسخ دهند.