Капсулација је једна од три главнекарактеристике објектно оријентисаног програмирања (ООП). Друга два су полиморфизам и наследство. Заједно чине ООП оквир који дефинише низ могућности за писање програма на различитим језицима користећи ова три принципа. Објектно оријентисани језици, заузврат, морају их јасно следити.
Основе ООП-а
Објектно оријентисано програмирање заснива се на три стуба свог универзума:
- Полиморфизам, који одговара на питање како се одређени програмски језик на сличан начин односи према објектима који су међусобно повезани.
- Наслеђивање, које даје одговор на то како се стимулише поновна употреба кода.
- Инкапсулација, што је одговор на питање како је примена скривена, а самим тим и очуван интегритет података.
Терминологија
Капсулација (програмирање) јеупотреба модификатора приступа ради сакривања делова програмског кода од крајњег корисника. То заузврат значи програмер или наследни објекат.
Суштина концепта "инкапсулације"
Дефиниција дефинише шта је под капсулацијомподразумева се скривање целокупног или дела програмског кода. Суштина концепта „инкапсулације“ је манипулација модификаторима приступа. То значи да програмер сам одлучује која својства, методе и класе ће бити изложене клијентској класи, а које скривене.
Модификатори приступа
- јавни („јавни“ - јавни, отворен, приступ) - јавни приступ како тренутним објектима и класама, тако и спољном свету;
- приватни („приватни“ - приватни, приватни, скривени приступ) - затворени приступ, чија је суштина потпуно супротна претходној. Пружа приступ само из тренутне класе;
- заштићен („заштићен“ - заштићен, полусакривен, приступ) - приступ тренутној класи и њеним дериватима;
- подразумевано - неодређени модификатор приступа подразумева да је поље / метода видљиво читавом тренутном пакету класе.
У језику Ц # („Ц Схарп“), поред назначених (изузимајући последњи), постоје и такви модификатори:
- интерни („интерни“ - интерни приступ) - општа доступност у тренутној колекцији, затворени приступ у свим осталим случајевима;
- интерно заштићен („Интернал протецтед“ - унутрашњи заштићени приступ) - комбинација два модификатора у један, у коме се испољавају својства оба.
Улога инкапсулације
Механизам енкапсулације омогућава вам да искључите спољни утицај на програмски код и нетачну употребу података који се у њему налазе. То чини комбиновањем кода и података у јединствену целину.
Предмет и инкапсулација
Комбиновањем имплементације софтверског модула иподаци уграђени у код називају се објектом у програмирању. Суштина његове повезаности са капсулацијом лежи у чињеници да управо таква техника омогућава одржавање и осигуравање интегралног функционисања разматраног механизма.
Предност инкапсулације
Инкапсулација је начин за поједностављење процеса кодирања. Бројни редови кода остају „иза кулиса“, а у главној класи се ради са инстанцама објеката.
Идеја заштите података
Капсулација је такође механизам којиспроводи идеју заштите података. Програмска логика објектно оријентисаног програмирања заснива се на чињеници да ће већина података сакрити модификатор приступа привате (привате) или заштићен (заштићен). Спољни свет, клијент, случајно или намерно, не може оштетити имплементацију софтверског модула. Будући да је ово заправо врло лако, чак и ако није намерно, инкапсулација је врло добар принцип.
Јединице за капсулацију
Класа, као главна јединица инкапсулације,описује податке и садржи код који може радити са тим подацима. Такође је основа за изградњу објекта. Потоњи је, пак, представљен као инстанца класе.
- чланови су шифра и подаци који иду у разред;
- поља или променљиве инстанце - ово је име података које класа дефинише;
- функције члана - садрже сам код. Функције чланова су заједнички назив. Методе су посебан случај.
Капсулација са конкретним примером
Пример енкапсулације (програмирања):
* Белешка:
десцриптион је опис методе / својства / променљиве, односно коментарисање онога што се заправо дешава у програму. Демонстрирано ознакама за отварање / затварање
коришћење система;
простор имена ООПЛибрари.Ауто
{
///
/// Ова класа је намењена описивању својстава и деловања аутомобила
///
јавна класа Ауто
{
///
/// Променљива креирана да би се у њу записало колико је аутомобил стар, јер програмер спољне сметње у овом својству сматра сувишним
/// означен је приватним модификатором, односно затвореним, приватним приступом (види опис горе).
///
привате инт _аге;
///
/// Булова променљива (само две могуће вредности - да или не) која описује да ли се аутомобил тренутно креће
/// Такође не би требало да буде отворен за крајњег корисника, ко год он био. Због тога је овој променљивој додељен модификатор приватног приступа „привате“.
///
привате боол _исМовинг;
///
/// Ова променљива низа треба да садржи информације о боји аутомобила. Може бити подложан променама услед спољних утицаја
/// стога је за боју одабран „јавни“ модификатор отвореног приступа.
///
јавни низ Цолор;
///
/// У овом конкретном случају претпостављамо да се назив аутомобила такође може променити
/// додељен је јавни модификатор (отворен приступ свима, без обзира на класу или склоп).
///
јавни низ Име;
///
/// Отвара се конструктор класе и сва својства изражена променљивим и постављеним мало раније добијају своје вредности
///
јавни Ауто ()
{
_ старост = 5;
_исМовинг = нетачно;
Боја = "Љубичаста";
Наме = "Шкода Октавија";
}
///
/// Метода примењује враћање вредности старости аутомобила. Зашто је ово неопходно?
/// модификатор приватног приступа спречава да га клијент модификује.
///
/// Враћа старост аутомобила.
јавни низ ГетАге ()
{
ретурн "Тренутно изабрана машина" + _ старост + "је стара година.";
}
///
/// Ако се аутомобил не креће, овај методспроводи почетак покрета. Провера се врши на променљивој која означава стање аутомобила (да ли се вози или не) и, у зависности од резултата, извршава се одговарајућа радња / приказује се одговарајућа порука.
///
јавна празнина Старт ()
{
иф (_исМовинг)
{
Цонсоле.ВритеЛине („Покрет је већ започет“);
}
иначе
{
_исМовинг = тачно;
Цонсоле.ВритеЛине („Спремни, пажња .. Идемо! Идемо!“);
}
}
///
/// Ако је покрет покренут, онда га овај метод зауставља. Иста програмска логика као у претходном разматраном случају.
///
јавна празнина Стоп ()
{
иф (_исМовинг)
{
_исМовинг = нетачно;
Цонсоле.ВритеЛине ("Стани, ауто");
}
иначе
{
Цонсоле.ВритеЛине („Грешка. Ауто већ стоји, не миче се“);
}
}
///
/// Скреће се улево ако се возило креће
///
јавна празнина МовеЛефт ()
{
иф (_исМовинг)
{
Цонсоле.ВритеЛине („Направио скретање улево“);
}
иначе
{
Цонсоле.ВритеЛине („Грешка. Ауто стоји мирно. Функција скретања тренутно није доступна“);
}
}
///
/// Слична метода са скретањем удесно
///
јавна празнина МовеРигхт ()
{
иф (_исМовинг)
{
Цонсоле.ВритеЛине („Скретање удесно је успешно изведено“);
}
иначе
{
Цонсоле.ВритеЛине („Грешка. Аутомобил се још није померио. Окретање удесно је тренутно радња коју није могуће извршити.“);
}
}
}
}