Иди на текст

Енкапсулација

Енкапсулација омогућује контролу приступа члановима класе. Односи се на сакривање унутрашњих детаља имплементације класе и излагање само оних делова који су неопходни за коришћење класе. Представља један од основних принципа објектно-оријентисаног програмирања који је кључан за стварање сигурног и одрживог кода. Уместо термина "енкапсулација" у литератури на српском језику можеш наићи и на термин "учауривање", јер се одређени чланови класе "учаурују", или "стављају у чауру" у оквиру које се могу користити.

Енкапсулација се реализује коришћењем модификатора приступа (енгл. Access Modifiers), који се имплицитно или експлицитно дефинишу за све чланове класе. То значи да сви чланови класе имају дефинисан ниво приступачности.

Опет, у различитим објектно-оријентисаним програмским језицима могу да постоје различити типови модификатора приступа, названи различитим именима. Међутим, сâм принцип ограничавања приступачности је исти - могу да постоје приватни чланови класе којима се не може приступити ван класе и могу да постоје јавни чланови класе којима се може приступити и ван класе. Разлике се огледају у финесама, на пример, да ли се приступа из истог фајла, или из исте класе, или из изведене класе у истом склопу, или из изведене класе у различитом склопу итд.

На пример, нека постоји дефинисана класа која се тиче твог банковног рачуна...

  • класа Bankovni_racun
  • атрибут balans мора бити приватан,
  • метода priliv_sredstava() мора бити јавна,
  • метода odliv_sredstava() мора бити јавна и
  • метода prikazi_balans() мора бити јавна.

...и нека је програм службеника на шалтеру у банци написан у класи Program која користи класу Bankovni_racun.

Зашто атрибут balans мора бити приватан? Програм службеника на шалтеру у банци не сме да има могућност директног приступа атрибуту balans, тј. не сме се дозволити службенику у банци да једноставно промени баланс твог рачуна, мењајући директно вредност атрибута balans! Баланс твог рачуна може да се мења једино приливом и одливом средстава (уплатама и исплатама), односно методама priliv_sredstava() и odliv_sredstava() које јесу јавне. Значи, када уплатиш новац на шалтеру у банци, програм службеника може да приступи методи priliv_sredstava() јер је јавна, а та метода може да приступи атрибуту balans јер су у истој класи. Исто важи и за методе odliv_sredstava() и prikazi_balans().

На овај начин могу да се бележе све твоје уплате, исплате и увиди у стање рачуна. Не може се оптужити службеник банке да је мењао баланс твог рачуна или кришом гледао његову вредност, јер ће за сваку промену атрибута balans или увид у стање постојати евиденција.

Сада ти је јасније зашто није добра пракса да све чланове класе учиниш доступним свима и свуда. Неки од многих разлога су:

  • Скривање детаља имплементације. Ограничавањем приступа члановима класе, скривају се детаљи имплементације класе од спољног утицаја. Тиме се спречавају други делови програма да директно приступају члановима класе или их мењају, што чува целовитост и конзистентност података.
  • Побољшање безбедности. Ограничавањем приступа најосетљивијим деловима кода смањује се ризик од неовлашћене манипулације подацима.
  • Олакшавање одржавања и развоја. Контрола приступа чини класу модуларном и омогућава извршавање измена унутар класе без утицаја на друге делове програма. Промене у интерним детаљима класе могу се вршити без потребе за изменама у коду који користи ту класу.
  • Флексибилност и поновна употреба кода. Једном написана и тестирана класа може се користити у различитим деловима програма без потребе за поновним писањем и тестирањем.