Капсулирането е едно от трите основнихарактеристики на обектно-ориентираното програмиране (ООП). Другите две са полиморфизъм и наследяване. Заедно те представляват OOP рамка, която определя набор от възможности за писане на програми на различни езици, използвайки тези три принципа. От своя страна обектно-ориентираните езици са длъжни да ги следват ясно.
Основи на ООП
Обектно-ориентираното програмиране се основава на три стълба на своята вселена:
- Полиморфизъм, който отговаря на въпроса как определен език за програмиране третира обекти, които са свързани помежду си по подобен начин.
- Наследяване, което дава отговор на начина, по който се стимулира повторното използване на кода.
- Капсулиране, което е отговорът на въпроса как е скрито изпълнението и следователно целостта на данните е запазена.
терминология
Капсулирането (програмирането) еизползването на модификатори за достъп, за да се скрият части от програмния код от крайния потребител. Това от своя страна означава разработчик или обект на наследяване.
Същността на понятието "капсулиране"
Определението дефинира какво е под капсулиранекрие се изцяло или частично от програмния код. Същността на концепцията за "капсулиране" е манипулирането на модификаторите за достъп. Това означава, че разработчикът сам решава кои свойства, методи и класове ще бъдат изложени на клиентския клас и кои ще бъдат скрити.
Модификатори на достъпа
- публичен („публичен“ - публичен, отворен, достъп) - публичен достъп както за текущи обекти и класове, така и за външния свят;
- частен („частен“ - частен, частен, скрит достъп) - затворен достъп, чиято същност е напълно противоположна на предишната. Осигурява достъп само от текущия клас;
- защитен („защитен“ - защитен, полускрит, достъп) - достъп за текущия клас и неговите производни;
- по подразбиране - неопределен модификатор на достъп предполага, че полето / методът е видим за целия текущ пакет на класа.
В езика C # ("C Sharp"), освен посочените (с изключение на последния), има и такива модификатори:
- вътрешен ("вътрешен" - вътрешен достъп) - публична наличност в текущата колекция, затворен достъп във всички останали случаи;
- вътрешно защитен ("вътрешно защитен" - вътрешно защитен достъп) - комбинацията от два модификатора в един, в който се проявяват свойствата и на двамата.
Ролята на капсулирането
Механизмът за капсулиране ви позволява да изключите външно влияние върху програмния код и неправилно използване на съдържащите се в него данни. Това се прави чрез комбиниране на код и данни в едно цяло.
Обект и капсулиране
Комбиниране на изпълнението на софтуерния модул иданните, вградени в кода, се наричат обект в програмирането. Същността на връзката му с капсулирането се крие във факта, че именно такава техника позволява поддържане и осигуряване на интегралното функциониране на разглеждания механизъм.
Предимството на капсулирането
Капсулирането е начин за опростяване на процеса на кодиране. Многобройни редове код остават „зад кулисите“, а в основния клас се работи с екземпляри на обекти.
Идея за защита на данните
Капсулирането също е механизъм, койтореализира идеята за защита на данните. Логиката на програмиране на обектно-ориентираното програмиране се основава на факта, че по-голямата част от данните ще бъдат скрити от модификатора за достъп private (private) или защитен (защитен). Външният свят, клиентът, случайно или умишлено, не може да повреди изпълнението на софтуерния модул. Тъй като всъщност е много лесно да се направи това, дори и да не е нарочно, капсулирането е много добър принцип.
Капсулационни единици
Клас, като основна единица на капсулиране,описва данни и съдържа код, който може да работи с тези данни. Той е и основата за изграждане на обекта. Последният от своя страна е представен като екземпляр на класа.
- членовете са кодът и данните, които влизат в класа;
- полета или променливи на екземпляра - това е името на данните, които класът дефинира;
- членски функции - те съдържат самия код. Функциите на членовете са общо име. Методите са частен случай.
Капсулиране със специфичен пример
Пример за капсулиране (програмиране):
* Забележка:
description е описание на метод / свойство / променлива, т.е. коментиране на това, което всъщност се случва в програмата. Демонстрирано с етикети за отваряне / затваряне
използване на система;
пространство от имена OOPLibrary.Auto
{
///
/// Този клас е предназначен да опише свойствата и действията на автомобила
///
публичен клас Auto
{
///
/// Променлива, създадена, за да се запише в нея на колко години е колата, тъй като разработчикът смята външната намеса в това свойство за излишна
/// той е маркиран с частния модификатор, т.е. затворен, частен достъп (вижте описанието по-горе).
///
private int _age;
///
/// Булева променлива (само две възможни стойности - или да, или не), която описва дали автомобилът се движи в момента
/// Също така не трябва да е отворен за крайния потребител, който и да е той. Ето защо модификаторът за частен достъп "private" е присвоен на тази променлива.
///
private bool _isMoving;
///
/// Тази променлива на низ трябва да съдържа информация за цвета на автомобила. Той може да бъде обект на промени от външни влияния
/// следователно за цвета е избран „публичният“ модификатор на отворен достъп.
///
публичен низ Цвят;
///
/// В този конкретен случай предполагаме, че името на автомобила също може да бъде променено
/// е зададен публичният модификатор (отворен достъп за всички, независимо от класа или сглобката).
///
публичен низ Име;
///
/// Конструкторът на класа се отваря и всички свойства, изразени с променливи и зададени малко по-рано, получават своите стойности
///
обществен автоматичен ()
{
_възраст = 5;
_isMoving = false;
Цвят = "Лилав";
Име = "Skoda Octavia";
}
///
/// Методът осъществява връщането на възрастовата стойност на автомобила. Защо е необходимо това?
/// модификатор на частен достъп предотвратява промяната му от клиента.
///
/// Връща възрастта на автомобила.
публичен низ GetAge ()
{
return "Избраната в момента машина" + _age + "е на години.";
}
///
/// Ако колата не се движи, този методосъществява началото на движението. Извършва се проверка на променлива, която показва състоянието на автомобила (независимо дали се движи или не), и в зависимост от резултатите се извършва подходящо действие / показва се съответно съобщение.
///
публична невалидност Начало ()
{
if (_isMoving)
{
Console.WriteLine ("Движението вече е стартирано");
}
друго
{
_isMoving = вярно;
Console.WriteLine ("Готово, внимание .. Да вървим! Да тръгваме!");
}
}
///
/// Ако движението е стартирано, тогава този метод го спира. Същата програмна логика, както в предишния разгледан случай.
///
публична невалидност Стоп ()
{
if (_isMoving)
{
_isMoving = false;
Console.WriteLine („Спиране, кола“);
}
друго
{
Console.WriteLine ("Грешка. Колата вече стои неподвижна, не се движи");
}
}
///
/// Обръща се наляво, ако превозното средство се движи
///
публична празнота MoveLeft ()
{
if (_isMoving)
{
Console.WriteLine („Направих ляв завой“);
}
друго
{
Console.WriteLine („Грешка. Колата е неподвижна. Функцията за въртене в момента не е налична“);
}
}
///
/// Подобен метод с завиване надясно
///
публична празнота MoveRight ()
{
if (_isMoving)
{
Console.WriteLine („Завъртането надясно беше направено успешно“);
}
друго
{
Console.WriteLine ("Грешка. Колата все още не се е движила. В момента завъртането надясно е действие, което не може да бъде извършено.");
}
}
}
}