Encapsulation در مقابل Abstraction
Encapsulation و Abstraction دو مفهوم متفاوت اما مرتبط هستند که در زبان های OOP (برنامه نویسی شی گرا) یافت می شوند. کپسولاسیون مفهوم ترکیب داده ها و رفتار با هم به عنوان یک موجودیت واحد است. از سوی دیگر، انتزاع فرآیندی است که نشان میدهد چگونه یک موجودیت رفتار میکند برخلاف نحوه اجرای آن.
Encapsulation چیست؟
Encapsulation فرآیند بسته بندی داده ها و عملیاتی است که بر روی آنها در یک موجودیت واحد عمل می کند. این اساسا به این معنی است که برای دسترسی به داده ها باید از روش های از پیش تعریف شده خاصی استفاده کرد.به عبارت دیگر، داده های کپسوله شده مستقیماً قابل دسترسی نیستند. این اطمینان می دهد که یکپارچگی داده ها حفظ می شود زیرا کاربر نمی تواند مستقیماً به داده ها دسترسی داشته باشد و آن طور که می خواهد تغییر دهد. کاربران مقادیر داده ها را فقط از طریق روش هایی که به طور عمومی در دسترس کاربران است، دریافت یا تنظیم می کنند. این روشها معمولاً اعتبار دادهها را فراهم میکنند به طوری که فقط دادهها در قالب مناسب مجاز به درج در فیلدها هستند. بنابراین، مزایای کپسولاسیون سه برابر است. از طریق Encapsulation، برنامه نویس می تواند فیلدهای یک کلاس را فقط خواندنی یا فقط نوشتنی بسازد. ثانیاً، یک کلاس می تواند کنترل کاملی بر آنچه در فیلدهایش ذخیره می شود داشته باشد. در نهایت، کاربران یک کلاس نیازی به نگرانی در مورد نحوه ذخیره داده های آن ندارند. در جاوا، برنامه نویس می تواند تمام متغیرهای نمونه را خصوصی اعلام کند و متدهای get و set (که عمومی هستند) را برای دسترسی و اصلاح فیلدهای خصوصی ارائه دهد.
انتزاع چیست؟
انتزاع فرآیند جداسازی جزئیات ارائه از جزئیات پیاده سازی است.این کار به این دلیل انجام می شود که توسعه دهنده از جزئیات پیاده سازی پیچیده تر خلاص شود. در عوض، برنامه نویس می تواند بر روی ارائه یا جزئیات رفتاری موجودیت تمرکز کند. به عبارت ساده، انتزاع بر نحوه استفاده از یک موجودیت خاص به جای نحوه پیاده سازی آن تمرکز دارد. Abstraction اساساً جزئیات پیاده سازی را پنهان می کند، به طوری که حتی اگر متدولوژی پیاده سازی در طول زمان تغییر کند، برنامه نویس نگران تأثیر آن بر برنامه خود نباشد. یک سیستم را می توان در چندین لایه یا سطح انتزاع کرد. برای مثال، لایههای انتزاعی سطح پایین جزئیات سختافزار را نشان میدهند، در حالی که انتزاع سطح بالا تنها منطق تجاری موجودیت را نشان میدهد. اصطلاح انتزاع ممکن است برای اشاره به یک موجود و یک فرآیند استفاده شود و این منجر به سردرگمی می شود. به عنوان یک فرآیند، انتزاع به معنای استخراج جزئیات اساسی است در حالی که جزئیات غیر ضروری یک آیتم یا گروهی از موارد را نادیده می گیرد، در حالی که به عنوان یک موجودیت، انتزاع به معنای مدل یا نمای یک موجودیت تنها با جزئیات اساسی است.در جاوا، برنامه نویس می تواند از کلمه کلیدی abstract برای اعلام یک کلاس به عنوان یک موجودیت انتزاعی استفاده کند، که نشان دهنده ویژگی های اساسی یک موجودیت دنیای واقعی است.
تفاوت بین Encapsulation و Abstraction چیست؟
اگرچه Encapsulation و Abstraction مفاهیم بسیار مرتبطی هستند که در زبان های برنامه نویسی شی گرا یافت می شوند، اما تفاوت های کلیدی دارند. انتزاع تکنیکی است که به ما کمک می کند تشخیص دهیم چه چیزی باید قابل مشاهده باشد و چه چیزی باید پنهان شود. کپسولهسازی تکنیکهایی برای بستهبندی اطلاعات است به طوری که آنچه را که باید قابل رویت باشد قابل مشاهده میکند و آنچه را که باید پنهان شود پنهان میکند. به عبارت دیگر، کپسولاسیون را می توان به عنوان یک گام فراتر از انتزاع شناسایی کرد. در حالی که انتزاع یک شی دنیای واقعی را به ویژگی های اصلی آن کاهش می دهد، کپسوله سازی این ایده را با مدل سازی و پیوند دادن این عملکرد آن موجودیت گسترش می دهد.