عنوان:

‫جفت‌شدگی (Coupling) و انسجام (Cohesion) در مهندسی نرم‌افزار


نویسنده: وحید نصیری
تاریخ: ۱۴۰۳/۱۲/۱۴ ۰۸:۱۰
آدرس: www.dntips.ir
این مقاله بر اهمیت جفت‌شدگی پایین و انسجام بالا برای کد قابل نگهداری تأکید می‌کند.

جفت‌شدگی (Coupling)
  • تعریف: جفت‌شدگی میزان وابستگی بین اجزای مختلف کد (ماژول‌ها) را اندازه‌گیری می‌کند. به عبارت ساده‌تر، نشان می‌دهد که چقدر تغییر در یک بخش از کد، بر بخش‌های دیگر تأثیر می‌گذارد.
  • هدف: دستیابی به جفت‌شدگی پایین برای کاهش تأثیر تغییرات. یعنی سعی می‌کنیم وابستگی بین اجزا را به حداقل برسانیم تا تغییر در یک بخش، باعث ایجاد مشکلات در بخش‌های دیگر نشود.
  • جفت‌شدگی بالا (Tight Coupling): منجر به پیچیدگی‌های اشکال‌زدایی و مشکلات سیستمی گسترده می‌شود. وقتی تغییر کوچک در یک بخش، باعث ایجاد مشکلات در کل سیستم می‌شود، یعنی با جفت‌شدگی بالا مواجه هستیم.
  • جفت‌شدگی پایین (Loose Coupling): امکان تعویض و اصلاح اجزا را بدون ایجاد مشکلات غیرمنتظره فراهم می‌کند. یعنی می‌توانیم اجزای مختلف را به راحتی تغییر دهیم یا جایگزین کنیم، بدون اینکه نگران تأثیر آن بر سایر بخش‌ها باشیم.
    • مثال: مقاله نشان می‌دهد که چگونه استفاده از یک رابط (interface) به نام IEmailRecipient به جای یک کلاس مشخص (concrete class) به نام Customer، جفت‌شدگی را در یک سرویس ایمیل (EmailService) کاهش می‌دهد.
    • همچنین، نشان می‌دهد که چگونه تزریق وابستگی (dependency injection) با تکیه بر انتزاعات (abstractions)، جفت‌شدگی را بیشتر کاهش می‌دهد.
  • اصل کلیدی: اصل وارونگی وابستگی (Dependency Inversion Principle) (حرف 'D' در SOLID). SOLID مجموعه‌ای از اصول طراحی نرم‌افزار است که برای ایجاد نرم‌افزارهای قابل فهم، انعطاف‌پذیر و قابل نگهداری استفاده می‌شود.

انسجام (Cohesion)
  • تعریف: انسجام میزان ارتباط مسئولیت‌ها در یک ماژول را اندازه‌گیری می‌کند. به عبارت دیگر، نشان می‌دهد که وظایف یک بخش از کد چقدر به هم مرتبط هستند.
  • هدف: دستیابی به انسجام بالا، به طوری که یک ماژول دارای یک هدف واحد و مشخص باشد. یعنی سعی می‌کنیم هر بخش از کد، فقط یک وظیفه مشخص را انجام دهد.
  • انسجام پایین (Low Cohesion): منجر به ماژول‌های پیچیده و دشوار برای نگهداری با مسئولیت‌های متعدد می‌شود. وقتی یک بخش از کد، وظایف زیادی را انجام می‌دهد، درک و نگهداری آن دشوار می‌شود.
  • انسجام بالا (High Cohesion): وضوح و قابلیت نگهداری کد را افزایش می‌دهد. یعنی هر بخش از کد، وظیفه مشخصی دارد و به راحتی قابل درک و نگهداری است.
    • مثال: مقاله نشان می‌دهد که چگونه جدا کردن عملکردهای اعلان ایمیل و پیامک به کلاس‌های جداگانه EmailService و SmsService، انسجام را افزایش می‌دهد.
    • همچنین نشان می‌دهد که چگونه یک کلاس هماهنگ‌کننده اعلان (NotificationCoordinator) می‌تواند از طریق ترکیب (composition) از هر دو سرویس استفاده کند.
  • اصل کلیدی: اصل مسئولیت واحد (Single Responsibility Principle) (حرف 'S' در SOLID).

تعادل جفت‌شدگی-انسجام (Coupling–Cohesion Balance)
  • دستیابی به تعادل بین جفت‌شدگی پایین و انسجام بالا، برای طراحی مؤثر نرم‌افزار بسیار مهم است.
  • جفت‌شدگی پایین و انسجام بالا، وابستگی‌ها را کاهش داده و قابلیت نگهداری را بهبود می‌بخشد.
  • محدودیت‌های دنیای واقعی ممکن است نیاز به مصالحه‌ای در این زمینه داشته باشند.
  • انتزاع بیش از حد (Over-abstraction) می‌تواند تأثیر منفی بر قابلیت نگهداری داشته باشد.
  • مقاله بر اهمیت فکر کردن در مورد مسئولیت‌های یک کلاس قبل از ایجاد آن تأکید می‌کند.

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


مشاهده مطلب اصلی