انتزاع را میتوان دنباله طبیعی کپسولهسازی دانست.
در طراحی شیگرا، برنامهها اغلب بسیار بزرگند. و اشیای جداگانه بسیار با یکدیگر در ارتباط هستند. بنابراین نگهداری یک مجموعه کد بزرگ، به مدت چندین سال - با تمام تغییراتی که در طول مسیر اعمال میشود - دشوار است.
هدف مفهوم انتزاع، کمک به رفع این مشکل است.
اعمال انتزاع به این معنی است که هر شی تنها باید یک سازوکار سطح بالا برای استفاده از خود ارائه دهد.
این سازوکار باید جزییات پیادهسازی داخلی را پنهان کند. این سازوکار باید صرفا عملیات مرتبط با سایر اشیا را در معرض نمایش قرار دهد و آشکار سازد.
یک دستگاه قهوهساز را درنظر بگیرید. این دستگاه برای درست کردن قهوه در "داخل محفظهاش" کارهای زیادی انجام میدهد و صداهای متفاوتی ایجاد میکند. اما تمام آنچه شما برای کار کردن با آن باید بدانید ریختن قهوه و فشردن یک دکمه است. قهوهساز فقط موارد مورد نیاز شما - دکمه و محفظه ریختن قهوه - را به شما نشان میدهد و جزییات نحوه آمادهسازی قهوه را از شما پنهان میکند.
در صورت امکان، استفاده از این سازوکار باید ساده بوده و در طی زمان به ندرت تغییر کند. به این مطلب به صورت مجموعهای از متدهای public که هر کلاسی بدون "دانستن" نحوه کار آنها، میتواند فراخوانی کند نگاه کنید.
یک مثال واقعی و ملموس دیگر از انتزاع نحوه استفاده شما از تلفن همراهتان است.
شما تنها با استفاده از چند دکمه با تلفن همراهتان کار میکنید. وقتی دکمهای را فشار میدهید در پشت پرده چه اتفاقاتی میافتد؟ نیازی نیست بدانید. جزییات پیادهسازی از دید کاربر پنهانند. برای استفاده از تلفن کافی است مجموعهای محدود از دستورالعملها را یاد بگیرید.
تغییرات پیادهسازی - به عنوان مثال بهروزرسانی یک نرمافزار - به ندرت بر انتزاعی که شما از آن استفاده میکنید تاثیر میگذارد. به عنوان مثال برای شمارهگیری صفحهای از شمارهها همراه دکمههایی برای تماس یا جستجو یا اسپیکر در دسترس شماست. گرچه ممکن است ظاهر این صفحه تغییر کند اما این مفهوم کلی در تمام تلفنها برقرار است.
قسمت اول را اینجا بخوانید.