У овом упутству ћете научити о инкапсулацији и скривању података у Јави уз помоћ примера.
Јава Енцапсулатион
Инкапсулација је једна од кључних карактеристика објектно оријентисаног програмирања. Инкапсулација се односи на групирање поља и метода унутар једне класе.
Спречава спољне класе да приступају и мењају поља и методе класе. Ово такође помаже у постизању скривања података .
Пример 1: Јава енкапсулација
class Area ( // fields to calculate area int length; int breadth; // constructor to initialize values Area(int length, int breadth) ( this.length = length; this.breadth = breadth; ) // method to calculate area public void getArea() ( int area = length * breadth; System.out.println("Area: " + area); ) ) class Main ( public static void main(String() args) ( // create object of Area // pass value of length and breadth Area rectangle = new Area(5, 6); rectangle.getArea(); ) )
Оутпут
Површина: 30
У горњем примеру створили смо класу под називом Ареа. Главна сврха ове класе је израчунавање површине.
Да се израчуна површину, морамо две варијабле: уздуж и попреко и метод: getArea()
. Стога смо та поља и методе повезали у једну класу.
Овде се пољима и методама може приступити и из других класа. Дакле, ово није скривање података .
Ово је само инкапсулација . Ми само држимо сличне кодове заједно.
Напомена : Људи често сматрају инкапсулацију скривањем података, али то није сасвим тачно.
Инкапсулација се односи на повезивање повезаних поља и метода заједно. Ово се може користити за постизање скривања података. Инкапсулација сама по себи није скривање података.
Зашто енкапсулација?
- У Јави, енкапсулација нам помаже да сродна поља и методе држимо заједно, што наш код чини чишћим и лаким за читање.
- Помаже у контроли вредности наших поља података. На пример,
class Person ( private int age; public void setAge(int age) ( if (age>= 0) ( this.age = age; ) ) )
Овде правимо добну променљивуprivate
и примењујемо логику унутарsetAge()
методе. Старост сада не може бити негативна. - Методе гетера и постављача пружају приступ нашим пољима класе само за читање или само за писање . На пример,
getName() // provides read-only access setName() // provides write-only access
- Помаже у раздвајању компонената система. На пример, можемо енкапсулирати код у више снопова.
Ове раздвојене компоненте (сноп) могу се развијати, тестирати и исправљати грешке независно и истовремено. И, било какве промене у одређеној компоненти немају никакав ефекат на друге компоненте. - Сакривање података такође можемо постићи помоћу енкапсулације. У горњем примеру, ако променимо променљиву дужине и ширине у приватну, приступ тим пољима је ограничен.
И, они су скривени од спољних класа. То се назива скривање података .
Сакривање података
Сакривање података је начин ограничавања приступа нашим члановима података скривањем детаља о примени. Инкапсулација такође пружа начин за сакривање података.
Можемо користити модификаторе приступа да бисмо постигли сакривање података. На пример,
Пример 2: Сакривање података помоћу приватног спецификатора
class Person ( // private field private int age; // getter method public int getAge() ( return age; ) // setter method public void setAge(int age) ( this.age = age; ) ) class Main ( public static void main(String() args) ( // create an object of Person Person p1 = new Person(); // change age using setter p1.setAge(24); // access age using getter System.out.println("My age is " + p1.getAge()); ) )
Оутпут
Моје године су 24
У горњем примеру имамо private
пољско доба. Будући да јесте private
, не може му се приступити изван разреда.
Да бисмо приступили узрасту, користили смо public
методе: getAge()
и setAge()
. Ове методе се називају геттер и сеттер методе.
Прилагођавање старости омогућило нам је да ограничимо неовлашћени приступ изван разреда. Ово је скривање података .
Ако покушамо да приступимо добном пољу из класе Маин, добићемо грешку.
// error: age has private access in Person p1.age = 24;