اصل انتزاع (برنامه‌نویسی)

این مقاله در حال ترجمه از ویکی انگلیسی است . لطفا حذف نشود.

در مهندسی نرم‌افزار و نظریه زبان‌های برنامه‌نویسی، **اصل انتزاع** یک اصل پذیرفته‌شده و پایه‌ای در مهندسی نرم‌افزار است که هدف آن کاهش تکرار اطلاعات در یک برنامه (عموماً با تأکید بر استفاده از کد تکراری) در مواقع عملی با استفاده از انتزاع های ارائه شده توسط زبان برنامه‌نویسی یا کتابخانه های نرم افزاری می‌باشد. این اصل گاهی به‌عنوان توصیه‌ای به برنامه‌نویس مطرح می‌شود و گاهی به‌عنوان یک الزام در زبان برنامه‌نویسی بیان می‌شود، با فرض اینکه دلیل مطلوبیت استفاده از انتزاع‌ها به‌طور ضمنی قابل درک است. منشاء این اصل نامشخص است و بارها با نام‌های متفاوت و با تغییرات جزئی بازآفرینی شده است.

وقتی به‌عنوان توصیه‌ای به برنامه‌نویس خوانده می‌شود، اصل انتزاع می‌تواند به‌طور کلی به عنوان اصل "خودت را تکرار نکن" (DRY) تعمیم یابد، که توصیه می‌کند از تکرار اطلاعات به‌طور کلی و همچنین از تکرار تلاش انسانی در فرایند توسعه نرم‌افزار اجتناب شود.

## اصل انتزاع
به‌عنوان یک توصیه به برنامه‌نویس، در بیان بنجامین سی. پیرس در کتاب *[[Types and Programming Languages]]* (۲۰۰۲)، اصل انتزاع به این صورت بیان می‌شود:

به‌عنوان یک الزام در زبان برنامه‌نویسی، در بیان دیوید ای. اشمیت در کتاب *The Structure of Typed Programming Languages* (۱۹۹۴)، اصل انتزاع این‌گونه بیان می‌شود:

## تاریخچه و گونه‌ها
اصل انتزاع در چندین کتاب ذکر شده است. برخی از این کتاب‌ها، به‌همراه بیان مختصر این اصل (در صورت وجود)، در زیر فهرست شده‌اند:

* آلفرد جان کول و رونالد موریسون (۱۹۸۲) در کتاب *An Introduction to Programming with S-algol*: "[انتزاع] هنگامی که در طراحی زبان به کار می‌رود، به معنای تعریف تمامی دسته‌های نحوی با معنای معنایی در زبان و امکان انتزاع‌پذیری از آن‌هاست".
* بروس جی. مک‌لنن (۱۹۸۳) در کتاب *Principles of Programming Languages: Design, Evaluation, and Implementation*: "از الزام به بیان مجدد یک چیز خودداری کنید؛ الگوی تکرارشونده را استخراج کنید".
* جان پیرس (۱۹۹۸) در کتاب *Programming and Meta-Programming in Scheme*: "ساختار و عملکرد باید مستقل باشند".

این اصل نقشی اساسی در الگوهای طراحی در برنامه‌نویسی شیءگرا ایفا می‌کند، اگرچه در اغلب نوشته‌های مربوط به این حوزه، نام مشخصی برای این اصل ذکر نمی‌شود. کتاب الگوهای طراحی نوشتهٔ گروه مشهور «چهار نفر» (Gang of Four) بیان می‌کند: "آنچه در اینجا مورد تأکید است، کپسوله‌سازی مفاهیمی است که تغییر می‌کنند؛ مفهومی کلیدی در بسیاری از الگوهای طراحی." این جمله توسط نویسندگان دیگر به این صورت بازنویسی شده است: "آنچه تغییر می‌کند را بیاب و آن را کپسوله کن."

در قرن حاضر، این اصل در برنامه‌نویسی مفرط (Extreme Programming) با شعار "فقط یک‌بار و فقط یک‌بار" مجدد مطرح شده است. تعریف این اصل در نخستین بیان خود بسیار مختصر بود: "هیچ کد تکراری نباید وجود داشته باشد". بعدها این اصل به سایر جنبه‌های توسعه نرم‌افزار نیز تعمیم داده شد: "هر فرآیندی که ارزش خودکارسازی دارد را خودکار کن. اگر متوجه شدی کاری را بارها انجام می‌دهی، آن را اسکریپت‌نویسی کن."

## پیامدها
اصل انتزاع اغلب در قالب مکانیزمی بیان می‌شود که هدف آن تسهیل در ایجاد انتزاع است. مکانیزم پایه‌ای برای «انتزاع کنترلی» تابع یا **زیرروال** (subroutine) است. انتزاع‌های داده شامل انواع مختلفی از **[[چندریختی (برنامه‌نویسی) | چندریختی نوعی]]** می‌شوند. مکانیزم‌های پیشرفته‌تری که می‌توانند انتزاع داده و کنترل را ترکیب کنند شامل: **[[نوع داده انتزاعی]]**، از جمله **[[کلاس (برنامه‌نویسی) | کلاس‌ها]]**، **[[پولیتیپیسم]]** و غیره هستند. تلاش برای دستیابی به انتزاع‌های غنی‌تر به‌منظور کاهش تکرار در سناریوهای پیچیده، یکی از نیروهای محرکه‌ی مهم در پژوهش و طراحی زبان‌های برنامه‌نویسی به شمار می‌رود.

برنامه‌نویسان تازه‌کار ممکن است وسوسه شوند که انتزاع‌هایی بیش از حد در برنامه‌شان اعمال کنند — انتزاع‌هایی که ممکن است حتی بیش از یک‌بار هم مورد استفاده قرار نگیرند.  اصلی مکمل که بر این مسئله تأکید دارد، اصل "تو که بهش نیاز نداری" (You Ain’t Gonna Need It) است؛ و در حالت کلی‌تر، اصل سادگی.

از آنجا که کد معمولاً در طول زمان بازنویسی و بازبینی می‌شود، پیروی از اصل انتزاع می‌تواند شامل باسازی کد باشد.  تلاش برای بازنویسی یک قطعه کد به‌صورت انتزاعی باید در برابر منافع احتمالی آینده‌ی آن انتزاع، سنجیده شود. یک قاعده‌ی تجربی برای این موضوع توسط مارتین فاولر ارائه شده و تحت عنوان قاعده‌ی سه‌تایی در برنامه‌نویسی شناخته می‌شود. این قاعده می‌گوید: اگر یک قطعه کد بیش از دو بار کپی شود (یعنی سه یا بیشتر)، آن‌گاه باید آن کد به صورت انتزاعی پیاده‌سازی شود.

## تعمیم‌ها
اصل "خودت را تکرار نکن" یا "اصل DRY" یک تعمیم از اصل انتزاع است که در زمینهٔ معماری چندلایه توسعه یافته است؛ جایی که کدهای مرتبط ناگزیر تا حدی در لایه‌های مختلف (معمولاً با زبان‌های برنامه‌نویسی متفاوت) تکرار می‌شوند. در عمل، توصیه این است که برای پرهیز از تکرار، از ابزارهای خودکار مانند تولید خودکار کد و تبدیل داده‌ها استفاده شود.

## رابط‌های برنامه‌نویسی سخت‌افزار
علاوه بر بهینه‌سازی کد، مفهوم سلسله‌مراتبی یا بازگشتی سطح انتزاع در برنامه‌نویسی به رابط‌های بین لایه‌های ارتباطی سخت‌افزار نیز اشاره دارد که به آن‌ها "سطوح انتزاع" یا "لایه‌های انتزاع" گفته می‌شود. در این حالت، سطح انتزاع اغلب مترادف با رابط (interface) در نظر گرفته می‌شود. برای مثال، هنگام بررسی شل‌کد (shellcode) و رابط بین زبان‌های سطح بالا و سطح پایین، سطح انتزاع از دستورات سیستم‌عامل (مثلاً در زبان C) به فراخوانی‌ها و دستورات در سطح رجیستر و مدار (مثلاً در اسمبلی و باینری) تغییر می‌کند. در این مثال، مرز یا رابط بین سطوح انتزاع، پشته (stack) است.

## منابع

رده:اصول برنامه‌نویسی
رده:موضوعات مربوط به زبان‌های برنامه‌نویسی