logo

Încapsulare în Java

Încapsularea în Java este un concept fundamental în programarea orientată pe obiecte (OOP) care se referă la gruparea de date și metode care operează pe acele date într-o singură unitate, care se numește clasă în Java. Java Encapsulation este o modalitate de a ascunde detaliile de implementare ale unei clase de accesul din exterior și de a expune doar o interfață publică care poate fi utilizată pentru a interacționa cu clasa.

În Java, încapsularea se realizează prin declararea variabilelor de instanță ale unei clase ca private, ceea ce înseamnă că pot fi accesate numai în cadrul clasei. Pentru a permite accesul extern la variabilele de instanță, sunt definite metode publice numite getters și setters, care sunt utilizate pentru a prelua și, respectiv, a modifica valorile variabilelor de instanță. Folosind gettere și setari, clasa își poate aplica propriile reguli de validare a datelor și se poate asigura că starea sa internă rămâne consecventă.



Implementarea Java Encapsulation

Mai jos este exemplul cu Java Encapsulation:

Java




joc pigeon android





// 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());> >}> }>

>

>

Ieșire

Name: John Age: 30>

Încapsulare este definită ca împachetarea datelor într-o singură unitate. Este mecanismul care leagă codul și datele pe care le manipulează. Un alt mod de a ne gândi la încapsulare este că este un scut de protecție care împiedică accesarea datelor de către codul din afara acestui scut.

  • Din punct de vedere tehnic, în încapsulare, variabilele sau datele unei clase sunt ascunse de orice altă clasă și pot fi accesate numai prin intermediul oricărei funcții membru a propriei clase în care este declarată.
  • Ca și în încapsulare, datele dintr-o clasă sunt ascunse de alte clase folosind conceptul de ascundere a datelor care se realizează prin privatizarea membrilor sau a metodelor unei clase, iar clasa este expusă utilizatorului final sau lumii fără a furniza detalii. în spatele implementării folosind conceptul de abstractizare, deci este cunoscut și ca a combinație de ascundere a datelor și abstractizare .
  • Încapsularea poate fi realizată prin Declararea tuturor variabilelor din clasă ca private și prin scrierea metodelor publice în clasă pentru a seta și obține valorile variabilelor.
  • Este mai definit cu metoda setter și getter.

Avantajele încapsulării

  • Ascunderea datelor: este o modalitate de a restricționa accesul membrilor noștri la date prin ascunderea detaliilor de implementare. Încapsularea oferă, de asemenea, o modalitate de ascunderea datelor. Utilizatorul nu va avea idee despre implementarea interioară a clasei. Nu va fi vizibil pentru utilizator modul în care clasa stochează valori în variabile. Utilizatorul va ști doar că trecem valorile unei metode setter și variabilele sunt inițializate cu acea valoare.
  • Flexibilitate sporită: Putem face variabilele clasei doar în citire sau doar în scriere, în funcție de cerințele noastre. Dacă dorim să facem variabilele doar în citire, atunci trebuie să omitem metodele de setare precum setName(), setAge(), etc. din programul de mai sus sau dacă dorim să facem variabilele doar în scris, atunci trebuie să omitem obțineți metode precum getName(), getAge(), etc. din programul de mai sus
  • Reutilizabilitate: Încapsularea îmbunătățește, de asemenea, reutilizarea și este ușor de schimbat cu noile cerințe.
  • Testarea codului este ușoară: Codul încapsulat este ușor de testat pentru testarea unitară.
  • Libertatea programatorului în implementarea detaliilor sistemului: Acesta este unul dintre avantajele majore ale încapsulării că oferă programatorului libertatea de a implementa detaliile unui sistem. Singura constrângere asupra programatorului este să mențină interfața abstractă pe care o văd cei din afară.

De exemplu: Programatorul codului meniului de editare într-un editor de text GUI ar putea la început să implementeze operațiunile de tăiere și lipire prin copierea imaginilor reale ale ecranului într-un tampon extern. Mai târziu, el/ea poate fi nemulțumit de această implementare, deoarece nu permite stocarea compactă a selecției și nu distinge obiectele text și grafice. Dacă programatorul a proiectat interfața de tăiere și lipire având în vedere încapsularea, trecerea implementării de bază la una care stochează text ca text și obiecte grafice într-un format compact adecvat nu ar trebui să provoace probleme funcțiilor care trebuie să interfațeze cu această interfață grafică. . Astfel, încapsularea oferă adaptabilitate, deoarece permite modificarea detaliilor de implementare a unor părți ale unui program fără a afecta negativ celelalte părți.

Dezavantajele încapsulării în Java

  • Poate duce la creșterea complexității, mai ales dacă nu este utilizat corespunzător.
  • Poate face mai dificilă înțelegerea modului în care funcționează sistemul.
  • Poate limita flexibilitatea implementării.

Exemple care arată încapsularea datelor în Java

Exemplul 1:

Mai jos este implementarea subiectului de mai sus:

Java


metoda substring în 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();> >}> }>

>

>

Ieșire

Area: 32>

Exemplul 2:

Programul de accesare a variabilelor clasei EncapsulateDemo este prezentat mai jos:

Java


serial în postgres



// 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);> >}> }>

>

>

Ieșire

Geek's name: Harsh Geek's age: 19 Geek's roll: 51>

Exemplul 3:

În programul de mai sus, clasa Encapsulate este încapsulată deoarece variabilele sunt declarate private. Metodele get precum getAge(), getName() și getRoll() sunt setate ca publice, aceste metode sunt folosite pentru a accesa aceste variabile. Metodele setter precum setName(), setAge(), setRoll() sunt, de asemenea, declarate publice și sunt folosite pentru a seta valorile variabilelor.

Mai jos este implementarea exemplului definit:

Java


adăugarea java la o matrice



// 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());> >}> }>

>

>

import scanner java
Ieșire

The age of the person is: 19>

Exemplul 4:

Mai jos este implementarea Java Encapsulation:

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());> >}> }>

>

>

Ieșire

90482098491 ABC [email protected] 100000.0>