Enkapsulacija v Javi je temeljni koncept v objektno usmerjenem programiranju (OOP), ki se nanaša na povezovanje podatkov in metod, ki delujejo na teh podatkih znotraj ene same enote, ki se v Javi imenuje razred. Java Encapsulation je način skrivanja podrobnosti izvedbe razreda pred zunanjim dostopom in izpostavljanje samo javnega vmesnika, ki se lahko uporablja za interakcijo z razredom.
V Javi je enkapsulacija dosežena z razglasitvijo spremenljivk primerka razreda kot zasebnih, kar pomeni, da je do njih mogoče dostopati samo znotraj razreda. Za omogočanje zunanjega dostopa do spremenljivk primerka so definirane javne metode, imenovane getters in setterji, ki se uporabljajo za pridobivanje in spreminjanje vrednosti spremenljivk primerka. Z uporabo pridobivalnikov in nastavljalcev lahko razred uveljavi lastna pravila za preverjanje veljavnosti podatkov in zagotovi, da njegovo notranje stanje ostane konsistentno.

Implementacija Java Encapsulation
Spodaj je primer z Java Encapsulation:
Java
// Java Program to demonstrate> // Java Encapsulation> // Person Class> class> Person {> >// Encapsulating the name and age> >// only approachable and used using> >// methods defined> >private> String name;> >private> int> age;> >public> String getName() {>return> name; }> >public> void> setName(String name) {>this>.name = name; }> >public> int> getAge() {>return> age; }> >public> void> setAge(>int> age) {>this>.age = age; }> }> // Driver Class> public> class> Main {> >// main function> >public> static> void> main(String[] args)> >{> >// person object created> >Person person =>new> Person();> >person.setName(>'John'>);> >person.setAge(>30>);> >// Using methods to get the values from the> >// variables> >System.out.println(>'Name: '> + person.getName());> >System.out.println(>'Age: '> + person.getAge());> >}> }> |
>
>Izhod
Name: John Age: 30>
Enkapsulacija je opredeljen kot zajem podatkov v eno enoto. Je mehanizem, ki povezuje kodo in podatke, s katerimi manipulira. Drug način razmišljanja o enkapsulaciji je, da je to zaščitni ščit, ki preprečuje dostop do podatkov s kodo zunaj tega ščita.
- Tehnično gledano pri enkapsulaciji so spremenljivke ali podatki razreda skriti pred vsemi drugimi razredi in do njih je mogoče dostopati le prek katere koli funkcije članice lastnega razreda, v katerem so deklarirani.
- Tako kot pri enkapsulaciji so podatki v razredu skriti pred drugimi razredi z uporabo koncepta skrivanja podatkov, ki se doseže tako, da so člani ali metode razreda zasebni, razred pa je izpostavljen končnemu uporabniku ali svetu brez zagotavljanja kakršnih koli podrobnosti za izvedbo z uporabo koncepta abstrakcije, zato je znan tudi kot a kombinacija skrivanja podatkov in abstrakcije .
- Enkapsulacijo lahko dosežete tako, da vse spremenljivke v razredu razglasite za zasebne in v razred napišete javne metode za nastavitev in pridobivanje vrednosti spremenljivk.
- To je bolj definirano z metodo setter in getter.
Prednosti enkapsulacije
- Skrivanje podatkov: je način omejevanja dostopa naših podatkovnih članov s skrivanjem podrobnosti izvedbe. Enkapsulacija omogoča tudi način za skrivanje podatkov. Uporabnik ne bo imel pojma o notranji izvedbi razreda. Uporabniku ne bo vidno, kako razred shranjuje vrednosti v spremenljivkah. Uporabnik bo vedel le, da posredujemo vrednosti nastavitveni metodi in da se spremenljivke inicializirajo s to vrednostjo.
- Povečana fleksibilnost: Spremenljivke razreda lahko naredimo samo za branje ali samo za pisanje, odvisno od naših zahtev. Če želimo, da so spremenljivke samo za branje, moramo iz zgornjega programa izpustiti nastavitvene metode, kot so setName(), setAge() itd., ali če želimo, da so spremenljivke samo za pisanje, moramo izpustiti pridobi metode, kot so getName(), getAge() itd. iz zgornjega programa
- Ponovna uporabnost: Enkapsulacija prav tako izboljša ponovno uporabnost in jo je enostavno spremeniti z novimi zahtevami.
- Testiranje kode je enostavno: Enkapsulirano kodo je enostavno testirati za testiranje enot.
- Svoboda programerju pri izvajanju podrobnosti sistema: To je ena od glavnih prednosti enkapsulacije, saj daje programerju svobodo pri izvajanju podrobnosti sistema. Edina omejitev za programerja je vzdrževanje abstraktnega vmesnika, ki ga vidijo tujci.
Na primer: Programer kode menija za urejanje v grafičnem uporabniškem vmesniku urejevalnika besedil bi lahko najprej izvedel operacije izrezovanja in lepljenja s kopiranjem dejanskih slik zaslona v zunanji medpomnilnik in iz njega. Kasneje bo morda nezadovoljen s to implementacijo, saj ne omogoča kompaktnega shranjevanja izbire in ne razlikuje besedilnih in grafičnih objektov. Če je programer zasnoval vmesnik izreži in prilepi z mislijo na enkapsulacijo, preklop osnovne izvedbe na tisto, ki shranjuje besedilo kot besedilne in grafične predmete v ustreznem kompaktnem formatu, ne bi smel povzročati težav funkcijam, ki potrebujejo vmesnik s tem GUI . Enkapsulacija tako zagotavlja prilagodljivost, saj omogoča spreminjanje podrobnosti izvedbe delov programa, ne da bi to negativno vplivalo na druge dele.
Slabosti enkapsulacije v Javi
- Lahko povzroči povečano kompleksnost, zlasti če se ne uporablja pravilno.
- Lahko oteži razumevanje delovanja sistema.
- Lahko omeji fleksibilnost izvedbe.
Primeri, ki prikazujejo enkapulacijo podatkov v Javi
Primer 1:
Spodaj je izvedba zgornje teme:
Java
// Java Program to demonstrate> // Java Encapsulation> // fields to calculate area> class> 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)> >{> >Area rectangle =>new> Area(>2>,>16>);> >rectangle.getArea();> >}> }> |
>
>
shilpa shettyIzhod
Area: 32>
Primer 2:
Program za dostop do spremenljivk razreda EncapsulateDemo je prikazan spodaj:
Java
// Java program to demonstrate> // Java encapsulation> class> Encapsulate {> >// private variables declared> >// these can only be accessed by> >// public methods of class> >private> String geekName;> >private> int> geekRoll;> >private> int> geekAge;> >// get method for age to access> >// private variable geekAge> >public> int> getAge() {>return> geekAge; }> >// get method for name to access> >// private variable geekName> >public> String getName() {>return> geekName; }> >// get method for roll to access> >// private variable geekRoll> >public> int> getRoll() {>return> geekRoll; }> >// set method for age to access> >// private variable geekage> >public> void> setAge(>int> newAge) { geekAge = newAge; }> >// set method for name to access> >// private variable geekName> >public> void> setName(String newName)> >{> >geekName = newName;> >}> >// set method for roll to access> >// private variable geekRoll> >public> void> setRoll(>int> newRoll) { geekRoll = newRoll; }> }> public> class> TestEncapsulation {> >public> static> void> main(String[] args)> >{> >Encapsulate obj =>new> Encapsulate();> >// setting values of the variables> >obj.setName(>'Harsh'>);> >obj.setAge(>19>);> >obj.setRoll(>51>);> >// Displaying values of the variables> >System.out.println(>'Geek's name: '> + obj.getName());> >System.out.println(>'Geek's age: '> + obj.getAge());> >System.out.println(>'Geek's roll: '> + obj.getRoll());> >// Direct access of geekRoll is not possible> >// due to encapsulation> >// System.out.println('Geek's roll: ' +> >// obj.geekName);> >}> }> |
>
>Izhod
Geek's name: Harsh Geek's age: 19 Geek's roll: 51>
Primer 3:
V zgornjem programu je razred Encapsulate enkapsuliran, saj so spremenljivke razglašene za zasebne. Metode get, kot so getAge(), getName() in getRoll(), so nastavljene kot javne, te metode se uporabljajo za dostop do teh spremenljivk. Metode nastavitve, kot so setName(), setAge(), setRoll(), so prav tako deklarirane kot javne in se uporabljajo za nastavitev vrednosti spremenljivk.
Spodaj je implementacija definiranega primera:
Java
// Java Program to demonstrate> // Java Encapsulation> class> Name {> >// Private is using to hide the data> >private> int> age;> >// getter> >public> int> getAge() {>return> age; }> >// setter> >public> void> setAge(>int> age) {>this>.age = age; }> }> // Driver Class> class> GFG {> >// main function> >public> static> void> main(String[] args)> >{> >Name n1 =>new> Name();> >n1.setAge(>19>);> >System.out.println(>'The age of the person is: '> >+ n1.getAge());> >}> }> |
>
mysql pokaži uporabnike
>Izhod
The age of the person is: 19>
Primer 4:
Spodaj je implementacija enkapsulacije Java:
Java
// Java Program to demonstrate> // Java Encapsulation> class> Account {> >// private data members to hide the data> >private> long> acc_no;> >private> String name, email;> >private> float> amount;> >// public getter and setter methods> >public> long> getAcc_no() {>return> acc_no; }> >public> void> setAcc_no(>long> acc_no)> >{> >this>.acc_no = acc_no;> >}> >public> String getName() {>return> name; }> >public> void> setName(String name) {>this>.name = name; }> >public> String getEmail() {>return> email; }> >public> void> setEmail(String email)> >{> >this>.email = email;> >}> >public> float> getAmount() {>return> amount; }> >public> void> setAmount(>float> amount)> >{> >this>.amount = amount;> >}> }> // Driver Class> public> class> GFG {> >// main function> >public> static> void> main(String[] args)> >{> >// creating instance of Account class> >Account acc =>new> Account();> >// setting values through setter methods> >acc.setAcc_no(90482098491L);> >acc.setName(>'ABC'>);> >acc.setEmail(>'[email protected]'>);> >acc.setAmount(100000f);> >// getting values through getter methods> >System.out.println(> >acc.getAcc_no() +>' '> + acc.getName() +>' '> >+ acc.getEmail() +>' '> + acc.getAmount());> >}> }> |
>
>Izhod
90482098491 ABC [email protected] 100000.0>