اصول SOLID در برنامه نویسی شی گرا: راهی برای ساخت کدی قابل توسعه و نگهداری

فهرست مطالب این نوشته
Toggleاصول SOLID را در برنامه نویسی شیگرا میتوان اصولی قانونمند بهشمار آورد. توسعهدهندگان با رعایت این اصول میتوانند کدهایی قابل نگهداری و توسعه ایجاد کنند. در برنامه نویسی شیگرا، اصول SOLID به بهبود ساختار، کیفیت کدها و توسعه هرچه بهتر آنها منجر میشود. یکی از مهمترین مجموعه اصول در این زمینه، اصول SOLID در برنامه نویسی است. در دنیای برنامه نویسی شیگرا، استفاده از اصول صحیح طراحی نرمافزار، نقش مهمی در خوانایی، توسعهپذیری و نگهداری کد دارد.

به کمک اصول SOLID در برنامه نویسی شیگرا، امکان سازماندهی کدها بهشیوه بهتر، بهبود عملکرد و کارایی کلی برنامه وجود دارد. تغییرات بهشکل پایدارتر و باسرعت بالاتری با اصول SOLID در کدها قابل اعمال هستند؛ اگر تاکنون در مورد قوانین SOLID و کارایی آنها در برنامهنویسی شیگرا اطلاعات چندانی بهدست نیاوردهاید، این مطلب برای شما آماده شده است.
این اصول به برنامهنویسان کمک میکنند تا کدهایی ماژولار، قابل تست و مقیاسپذیر ایجاد کنند. در این مقاله، به بررسی این اصول و مفهوم SOLID در برنامه نویسی پرداخته و کاربرد آنها در زبانهایی مانند سی شارپ و پایتون را توضیح میدهیم.
SOLID چیست؟
Solid مجموعهای از اصول طراحی برنامهنویسی بهشمار میرود. این اصول برنامهنویسی بهوسیله Robert C. Martin که به استاد Clean Code معروف بوده، معرفی شدهاند. البته بد نیست بدانید برای اولین بار اصول Solid در دهه ۱۹۹۰ بهوسیله مایکل فیدرز و جیم وایر مطرح شد؛ اما رابرت سی. مارتین این اصول را بهشکل کاملتری به بشریت ارائه کرد.
در حال حاضر اصول Solid را راهنمایی عملی برای نوشتن کدهای قابل توسعه، قابل نگهداری و باکیفیت میشناسند.
اصول Solid در برنامهنویسی شیگرا و دیگر زبانهای برنامهنویسی مانند جاوا، سی شارپ و موارد دیگر تاثیرات مثبت زیادی میگذارد و به توسعهدهندگان کمک میکند تا کدهای خود را بهبود دهند و از مشکلاتی که ممکن است در طراحی کدها بهوجود آید، جلوگیری نمایند. تاثیرات مثبت Solid باعث شده امروزه آموزش اصول Solid در جاوا و دیگر زبانهای برنامه نویسی یکی از مهمترین اصول آموزشی بهحساب آید.
اصول برنامهنویسی شیگرا (اصول شی گرایی)
اصول شیگرایی در برنامه نویسی به چهار اصل اساسی تقسیم میشود که به طراحی بهتر و مدیریت کد کمک میکند. برای آنکه بتوانید بهخوبی از اصول Solid در برنامه نویسی شیگرا بهرهمند شوید، باید در مورد اصول برنامهنویسی شیگرا هم اطلاعاتی بهدست آورید. قوانینی که اصول برنامهنویسی شیگرا روی آنها تمرکز دارد، قوانین زیر هستند:
Abstraction یا انتزاع
این اصل بهمعنی مخفی کردن جزئیات پیچیده و تنظیمات داخلی یک شی است. با استفاده از اصل انتزاع شما میتوانید به عملکردها و ویژگیهای مهم کدها توجه بیشتری داشته باشید. اصل انتزاع در برنامه نویسی شیگرا یکی از مهمترین اصولی است که شما در آموزشهای برنامه نویسی آکادمی چابک یاد میگیرید. جزئیات پیچیده پنهان شده و تنها جنبههای ضروری به کاربر نشان داده میشود. این امر باعث سادهسازی کد و کاهش پیچیدگیها میشود.
Inheritance یا وراثت
وراثت بدین معناست که یک کلاس از کلاس دیگر ویژگیها و عملکردهایی را ارث میبرد. اصل وراثت این امکان را برای شما فراهم میکند که کلاسی جدید با ویژگیها و عملکردهای کلاس موجود، بسازید. یک کلاس میتواند ویژگیها و رفتارهای کلاس دیگر را به ارث ببرد. این ویژگی باعث کاهش تکرار کد و استفاده مجدد از آن میشود.
Polymorphism یا چندریختی
مفهوم چندریختی به شما اجازه میدهد که یک متد عمومی با ورودیهای متفاوت تعریف کنید. برای درک بهتر این اصل در برنامهنویسی شیگرا، انسان را یک شی در نظر بگیرید. از آنجایی که همه انسانها غذا میخورند، شما میتوانید برای این شی با اصل چندریختی متدی بهنام food تعریف کنید. با توجه به اینکه همه انسانها غذای یکسانی نمیخورند، متد food میتواند ورودیهای مختلفی داشته باشد. یک متد یا عمل میتواند اشکال مختلفی داشته باشد و بر اساس نوع شیء رفتار متفاوتی از خود نشان دهد. این اصل باعث انعطافپذیری بیشتر در برنامهنویسی میشود.
Encapsulation یا کپسولهسازی
کپسولهسازی بهمعنی جمعآوری عملکردها و دادههای مرتبط در یک شیء و محدود کردن دسترسی به این عملکردها و دادهها طبق یک دستورالعمل مشخص است. دادهها و متدهای یک شی در داخل آن نگهداری میشوند و دسترسی به آنها فقط از طریق متدهای عمومی صورت میگیرد. این کار باعث محافظت از دادهها و کاهش تغییرات ناخواسته میشود.
با اصول نام برده، برنامهنویسان میتوانند نرمافزارهایی ساختاردهیشده ایجاد کنند، همچنین با ترکیب اصول Solid در برنامه نویسی شیگرا ساختاردهی نرمافزارها سادهتر میشود.
اصول solid (قوانین Solid)
قوانین یا اصول Solid در برنامه نویسی از پنج اصل اساسی برخوردارند، اصول Solid در پایتون، سیشارپ، ASP.net و جاوا هم حائز اهمیت هستند. بهعنوان یک مبتدی اگر میخواهید در مورد قوانین Solid اطلاعاتی بهدست آورید، ما به شکل زیر این اطلاعات را در اختیار شما قرار میدهیم.
اصول SOLID مجموعهای از پنج اصل طراحی در برنامهنویسی شیگرا است که توسط رابرت سی. مارتین (Robert C. Martin) معرفی شده است. این اصول به بهبود ساختار کد و کاهش پیچیدگی آن کمک میکنند. SOLID مخفف پنج اصل زیر است:
- Single Responsibility Principle (SRP): اصل مسئولیت واحد
- Open/Closed Principle (OCP): اصل باز/بسته
- Liskov Substitution Principle (LSP): اصل جایگزینی لیسکوف
- Interface Segregation Principle (ISP): اصل جداسازی رابط
- Dependency Inversion Principle (DIP): اصل وارونگی وابستگی
اصل مسئولیت واحد Single Responsibility Principle (SRP)
اصل مسئولیتپذیری تکی در قوانین Solid بدین معناست که هر کلاس یا شیء تنها باید یک مسئولیت خاص داشته باشد و طبق این اصل، انتساب مسئولیتهای متعدد به یک شیء یا کلاس درست نیست.
هر کلاس یا ماژول باید تنها یک دلیل برای تغییر داشته باشد. یعنی هر کلاس باید تنها یک وظیفه خاص را انجام دهد. این اصل باعث میشود که کدها خواناتر شده و تغییرات سادهتر انجام شوند.
اصل باز/بسته (OCP) Open/Closed Principle
اصل باز و بسته بودن، به این معنا است که برنامه را باید بهگونهای طراحی کنید که هنگام اضافه کردن ویژگیهای جدید، کد موجود دچار تغییر نشود. کلاسها باید برای توسعه باز و برای تغییر بسته باشند. یعنی بتوان عملکرد آنها را بدون نیاز به تغییر در کد موجود گسترش داد.
اصل جایگزینی لیسکوف (LSP) Liskov Substitution Principle
اصل جایگزینی لیسکوف میگوید باید هر کلاس مشتقشده از یک کلاس پایه، قابلیت استفاده بهجای آن کلاس پایه را داشته باشد بدون آنکه در عملکرد برنامه تغییری ایجاد شود. هر کلاس فرزند باید بتواند بدون ایجاد مشکل، جایگزین کلاس والد شود. این اصل تضمین میکند که کلاسهای فرزند بدون تغییر در رفتار اصلی برنامه قابل استفاده باشند.
اصل جداسازی رابط (ISP) Interface Segregation Principle
اصل جداسازی اینترفیس بدین معنا است که اینترفیس باید بهگونهای طراحی شود که تنها متدهای لازم برای هر کلاس در آن وجود داشته باشد. بهتر است به جای ایجاد یک رابط بزرگ، چندین رابط کوچکتر و اختصاصی داشته باشیم. این کار باعث کاهش وابستگیهای غیرضروری و افزایش انعطافپذیری در برنامه میشود.
اصل وارونگی وابستگی (DIP) Dependency Inversion Principle
اصل وابستگی معکوس میگوید که وابستگی بین کلاسها نباید بهگونهای باشد که کلاسها به جزئیات پیادهسازی برنامه وابسته شوند. این اصل معمولا روی اینترفیس و خلاصهسازی تمرکز دارد. کلاسها باید به رابطها یا کلاسهای انتزاعی وابسته باشند، نه به پیادهسازیهای خاص. این اصل باعث میشود که وابستگی بین ماژولها کاهش یابد و قابلیت تغییر و تستپذیری برنامه بهبود پیدا کند.
تمامی اصول نام برده با برنامهنویسی شیءگرا همخوانی داشته و استفاده از آنها در این زمینه برنامهنویسی کاملا ملموس است.
مثال اصول solid در سی شارپ
مثال اصل SRP در سی شارپ
public class Employee
{
public string Name { get; set; }
public decimal Salary { get; set; }
}
public class SalaryCalculator
{
public decimal CalculateSalary(Employee employee)
{
// محاسبه حقوق
return employee.Salary;
}
}
public class EmployeeRepository
{
public void Save(Employee employee)
{
// ذخیرهسازی دادهها
}
}
مثال اصل OCP در سی شارپ
public interface IDiscountStrategy
{
decimal ApplyDiscount(decimal amount);
}
public class RegularDiscount : IDiscountStrategy
{
public decimal ApplyDiscount(decimal amount)
{
return amount * 0.9m; // تخفیف 10%
}
}
public class SeasonalDiscount : IDiscountStrategy
{
public decimal ApplyDiscount(decimal amount)
{
return amount * 0.7m; // تخفیف 30%
}
}
public class Order
{
private IDiscountStrategy discountStrategy;
public Order(IDiscountStrategy discountStrategy)
{
this.discountStrategy = discountStrategy;
}
public decimal CalculateTotal(decimal amount)
{
return discountStrategy.ApplyDiscount(amount);
}
}
مثال اصل LSP در سی شارپ
public class Bird
{
public virtual void Fly() { }
}
public class Sparrow : Bird
{
public override void Fly()
{
// پرواز
}
}
public class Penguin : Bird
{
public override void Fly()
{
// پنگوئن پرواز نمیکند، بنابراین اینجا اشتباه است
}
}
در این مثال، جایگزینی Penguin به جای Bird باعث میشود که کد دچار مشکل شود. برای رعایت LSP باید رفتار پرواز را به طور صحیح درک کرد.
مثال اصل ISP در سی شارپ
public interface IWorker
{
void Work();
}
public interface IManager
{
void Manage();
}
public class Employee : IWorker
{
public void Work()
{
// کار کردن
}
}
public class Manager : IWorker, IManager
{
public void Work()
{
// کار کردن
}
public void Manage()
{
// مدیریت
}
}
مثال اصل DIP در سی شارپ
public interface IPrinter
{
void Print(string content);
}
public class InkjetPrinter : IPrinter
{
public void Print(string content)
{
// چاپ با پرینتر جوهرافشان
}
}
public class LaserPrinter : IPrinter
{
public void Print(string content)
{
// چاپ با پرینتر لیزری
}
}
public class Document
{
private IPrinter printer;
public Document(IPrinter printer)
{
this.printer = printer;
}
public void PrintDocument(string content)
{
printer.Print(content);
}
}
در این مثال، وابستگی به IPrinter باعث میشود که بتوانید انواع مختلف پرینترها را بدون تغییر در کد اصلی Document استفاده کنید.
مثال اصول SOLID در پایتون
مثال اصل SRP در پایتون
class Employee:
def __init__(self, name, salary):
self.name = name
self.salary = salary
def calculate_tax(self):
return self.salary * 0.1
مثال اصلOCP در پایتون
class Shape:
def area(self):
raise NotImplementedError(“Subclass must implement abstract method”)
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * (self.radius ** 2)
مثال اصلLSP در پایتون
class Bird:
def fly(self):
print(“Flying”)
class Ostrich(Bird):
def fly(self):
raise Exception(“Ostriches cannot fly!”)
مثال اصلISP در پایتون
class Printer:
def print_document(self, document):
pass
class Scanner:
def scan_document(self, document):
pass
class AllInOnePrinter(Printer, Scanner):
def print_document(self, document):
print(“Printing document:”, document)
def scan_document(self, document):
print(“Scanning document:”, document)
مثال اصلDIP در پایتون
from abc import ABC, abstractmethod
class Database(ABC):
@abstractmethod
def connect(self):
pass
class MySQLDatabase(Database):
def connect(self):
print(“Connecting to MySQL database”)
class Application:
def __init__(self, database: Database):
self.database = database
def start(self):
self.database.connect()
db = MySQLDatabase()
app = Application(db)
app.start()
اهمیت قوانین و اصول Solid در زبانهای برنامهنویسی مختلف
اهمیت اصول Solid در برنامه نویسی شیگرا بر هیچ توسعهدهندهای پوشیده نیست. اما اصول Solid نه تنها در برنامه نویسی شیءگرا، بلکه در اکثر زبانهای برنامه نویسی نقش تاثیرگذاری روی کیفیت کدها و قابلیت نگهداری آنها دارد. نقش تاثیرگذار اصول Solid در زبانهای برنامه نویسی مختلف، بهشکل زیر هستند.
کاهش وابستگی
اصول Solid در زبانهای برنامه نویسی مختلف این امکان را برای برنامهنویسان فراهم میکنند تا وابستگیهای غیرضروری بین کلاسها را کاهش دهند. با کاهش وابستگی کلاسها، احتمال اثرات جانبی و تغییرات ناخواسته روی دیگر بخشهای کد کمتر میشود.
قابلیت تست
اصول Solid در c# و زبانهای برنامه نویسی دیگر، ساختاری واضح و منظم برای کدها ایجاد میکند؛ از همینرو تست و نوشتن تستهای واحد آسانتر میشود. شما میتوانید با اصول Solid بهراحتی تستهایی واحد برای هر قسمت از کدها ایجاد کنید.
قابلیت توسعه
با رعایت اصول Solid در asp net core، جاوا، سی شارپ، پایتون و زبان برنامه نویسی شیءگرا، کدهای برنامه قابل توسعه و اصلاح خواهند بود. شما میتوانید با رعایت این اصول تغییرات را بهراحتی در برنامه اعمال کرده و کارایی برنامه را حفظ کنید.
خوانایی
اصول Solid به ساختارمند شدن و خواناتر شدن کدهای برنامه کمک میکنند؛ از همینرو فهمیدن کدها راحتتر میشود و اعمال تغییرات لازم در کدها دیگر چندان سخت نیست.
افزایش بهرهوری
اصول Solid به افزایش بهرهوری در توسعه و نگهداری کدها کمک میکند. با این اصول، زمان و هزینه مربوط به توسعه و نگهداری کدها تا حد زیادی کاهش پیدا کرده و پروژه به شکل پایدارتری پیش میرود.
اهمیت رعایت اصول SOLID در سی شارپ و پایتون
در زبانهایی مانند سی شارپ و پایتون، رعایت اصول SOLID به برنامه نویسان کمک میکند تا کدهایی ساختاریافته و قابل توسعه داشته باشند. این اصول در پروژههای بزرگ و تیمی نقش اساسی دارند. بهعنوان مثال:
- در سی شارپ: استفاده از Interface و Abstract Class باعث پیادهسازی صحیح اصل وارونگی وابستگی و جداسازی رابط میشود.
- در پایتون: پیادهسازی الگوهای طراحی مانند استفاده از متدهای انتزاعی و ارثبری صحیح به رعایت اصول SOLID کمک میکند.
کلام آخر
در این مطلب سعی کردیم در رابطه با اصول سالید در برنامه نویسی شیگرا اطلاعاتی در اختیار شما قرار دهیم. همانطور که دریافتید، اصول Solid به ایجاد کدهایی با قابلیت نگهداری بالا و توسعه راحت منجر میشوند. اصول Solid در پنج دسته تقسیمبندی شده و علاوهبر تاثیر روی برنامهنویسی شیءگرا در تمامی زبانهای برنامهنویسی موثر هستند.
منابع
دیدگاهتان را بنویسید