اصل یگانگی مسئولیت

از ویکی‌پدیا، دانشنامهٔ آزاد

اصل یگانگی وظیفه یک اصل برنامه‌نویسی رایانه است که براساس آن هر ماژول، کلاس، یا تابع باید مسئولیت تنها یک بخش از ویژگی‌های ارائه شده توسط نرم‌افزار را برعهده داشته باشد. همچنین باید وظیفهٔ فوق به‌طور کامل توسط کلاس، ماژول یا تابع محصور شده باشد. ماژول یا عملکرد. کلیهٔ خدمات باید با این مسئولیت تنگاتنگ باشد. رابرت سسیل مارتین این اصل را چنین بیان می‌کند: «یک کلاس فقط باید یک دلیل برای تغییر داشته باشد»[۱] اگرچه به دلیل سردرگمی پیرامون کلمه «دلیل» او اخیراً اظهار داشت «این اصل در مورد مردم است.»[۲]

تاریخچه[ویرایش]

این اصطلاح توسط رابرت سی مارتین در مقاله‌ای با همین نام به عنوان بخشی از اصول طراحی شیءگرا،[۳] که به‌وسیلهٔ کتاب خود «توسعهٔ نرم‌افزار نرم‌افزار چابک، اصول، الگوها و تمرینات» مشهور شده‌است.[۴] مارتین این اصل را مبتنی بر اصل انسجام توصیف کرد. همین‌طور تام دمرکو در کتاب خود «توصیف ساختار یافته و مشخصات سیستم»[۵] و میلیر پیجونز در «راهنمای عملی طراحی سیستم‌های ساختاری»[۶] این اصل را به همین شکل توصیف کرده‌اند. در سال ۲۰۱۴ مارتین یک پست وبلاگ با عنوان «اصل یگانگی وظیفه» با هدف توضیح عبارت «دلیل تغییر» منتشر کرد.

مثال[ویرایش]

مارتین «مسئولیت» یا «وظیفه» را به عنوان دلیلی برای تغییر تعریف می‌کند و نتیجه می‌گیرد که یک کلاس یا ماژول باید یک دلیل و تنها یک دلیل برای تغییر (یعنی بازنویسی) داشته باشد. به عنوان مثال، ماژولی را در نظر بگیرید که گزارش‌ها را گردآوری و چاپ می‌کند. تصور کنید چنین ماژولی به دو دلیل قابل تغییر است. اول، محتوای گزارش می‌تواند تغییر کند. دوم، قالب گزارش می‌تواند تغییر کند. این دو چیز به دلایل بسیار متفاوتی تغییر می‌کنند. یکی به دلایل ماهوی و دیگری به دلایل زیبایی‌شناختی. اصل یگانگی مسئولیت می‌گوید که این دو جنبه مسئله در واقع دو مسئولیت جداگانه هستند و بنابراین باید در کلاس‌ها یا ماژول‌های جداگانه قرار گیرند. قرار دادن دو چیز مختلف که به دلایل متفاوتی تغییر می‌کنند در یک واحد نرم‌افزاری یک طراحی نامناسب به‌شمار می‌رود.

دلیل اهمیت تمرکز یک کلاس بر یک موضوع این است که باعث می‌شود کلاس سرراست شود. در ادامهٔ مثال قبلی، اگر تغییری در فرایند تهیهٔ گزارش ایجاد شود، کد چاپ (در صورتی که بخشی از همان کلاس باشد) احتمال شکست بالاتری دارد.

جستارهای وابسته[ویرایش]

منابع[ویرایش]

  1. Martin, Robert C. (2003). Agile Software Development, Principles, Patterns, and Practices. Prentice Hall. p. 95. ISBN 978-0-13-597444-5.
  2. "The Single Responsibility Principle". ArticleS.UncleBob. 2014.
  3. "The Principles of OOD". ArticleS.UncleBob. 2005.
  4. Martin 2003
  5. DeMarco, Tom. (1979). Structured Analysis and System Specification. Prentice Hall. ISBN 0-13-854380-1.
  6. Page-Jones, Meilir (1988). The Practical Guide to Structured Systems Design. Yourdon Press Computing Series. p. 82. ISBN 978-8120314825.

پیوند به بیرون[ویرایش]