Капсулация срещу абстракция
Капсулирането и абстракцията са две различни, но свързани понятия, открити в OOP (обектно-ориентирано програмиране) езици. Капсулирането е концепцията за комбиниране на данни и поведение заедно като едно цяло. От друга страна, абстракцията е процесът на представяне как едно образувание се държи \ изглежда, а не как се прилага.
Какво е капсулация?
Капсулирането е процес на опаковане на данни и операции, които работят върху тях в едно цяло. Това по същество означава, че за достъп до данни трябва да се използват определени предварително определени методи. С други думи, капсулираните данни не са пряко достъпни. Това гарантира, че целостта на данните е запазена, тъй като потребителят не е в състояние директно да достъпва и променя данните, както желае. Потребителите ще получават или задават стойностите на данните само чрез методите, които са обществено достъпни за потребителите. Тези методи обикновено предоставят валидиране на данни, така че да се разрешава да се вмъкват само данните в подходящ формат. Следователно, ползите от капсулирането са трикратни. Чрез капсулиране програмистът може да прави полета от клас само за четене или само за запис. Второ, клас може да има пълен контрол върху това, което се съхранява в полетата му. И накрая, потребителите на даден клас не трябва да се притесняват как се съхраняват неговите данни. В Java програмистът може да декларира всички променливи инстанции за частни и да предостави методи за получаване и задаване (които са публични) за достъп и промяна на частните полета.
Какво е абстракция?
Абстракция е процесът на отделяне на детайлите на презентацията от детайлите за изпълнение. Това се прави така, че програмистът да се освободи от по-сложните детайли за внедряването. Вместо това програмистът може да се съсредоточи върху презентацията или поведенческите детайли на субекта. Казано по-просто, абстракцията се фокусира върху това как може да се използва определено образувание, а не върху това как се прилага. Абстракцията по същество крие подробности за внедряването, така че дори и методологията на внедряване да се промени с течение на времето, програмистът не би трябвало да се тревожи как ще се отрази на неговата програма. Една система може да бъде абстрахирана в няколко слоя или нива. Например, ниско ниво на абстракция ще разкрие подробности за хардуера, докато абстракцията на високо ниво ще разкрие само бизнес логиката на предприятието. Терминът абстракция може да се използва както за субект, така и за процес и това води до известно объркване. Като процес абстракция означава извличане на съществени подробности, като същевременно се пренебрегват несъществените детайли на даден елемент или група от елементи, докато като цяло, абстракция означава модел или изглед на образувание, съдържащо само съществените детайли. В Java програмистът може да използва ключовата дума абстракт, за да декларира клас като абстрактно образувание, което представлява съществените определящи характеристики на реалния свят.
Каква е разликата между капсулацията и абстракцията?
Въпреки че капсулирането и абстракцията са силно свързани понятия, открити в обектно-ориентираните езици за програмиране, те имат ключови разлики. Абстракцията е техника, която ни помага да идентифицираме какво трябва да се вижда и какво трябва да се скрие. Капсулирането е техники за опаковане на информацията, така че тя да прави видимо това, което трябва да бъде видимо, и да скрие това, което трябва да бъде скрито. С други думи, капсулацията може да бъде идентифицирана като една стъпка отвъд абстракцията. Докато абстракцията намалява обект от реален свят до неговите основни определящи характеристики, капсулирането разширява тази идея, като моделира и свързва тази функционалност на това образувание.