logo

Zapuzdrenie v jazyku Java

Zapuzdrenie v jazyku Java je základným konceptom objektovo orientovaného programovania (OOP), ktorý sa týka spájania údajov a metód, ktoré pracujú s týmito údajmi, v rámci jednej jednotky, ktorá sa v jazyku Java nazýva trieda. Java Encapsulation je spôsob, ako skryť detaily implementácie triedy pred vonkajším prístupom a odhaliť iba verejné rozhranie, ktoré možno použiť na interakciu s triedou.

V jazyku Java sa zapuzdrenie dosiahne deklarovaním premenných inštancií triedy ako súkromných, čo znamená, že k nim možno pristupovať iba v rámci triedy. Na umožnenie vonkajšieho prístupu k premenným inštancie sú definované verejné metódy nazývané getter a setter, ktoré sa používajú na získanie a úpravu hodnôt premenných inštancie, resp. Pomocou getterov a nastavovačov môže trieda presadiť svoje vlastné pravidlá overovania údajov a zabezpečiť, aby jej vnútorný stav zostal konzistentný.



Implementácia Java Encapsulation

Nižšie je uvedený príklad s 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());> >}> }>

>

šedý kód
>

modem vs router
Výkon

Name: John Age: 30>

Zapuzdrenie je definovaný ako zabaľovanie údajov do jednej jednotky. Je to mechanizmus, ktorý spája kód a údaje, s ktorými sa manipuluje. Ďalším spôsobom, ako uvažovať o zapuzdrení, je, že ide o ochranný štít, ktorý zabraňuje prístupu kódu mimo tohto štítu k údajom.

  • Technicky v zapuzdrení sú premenné alebo údaje triedy skryté pred akoukoľvek inou triedou a možno k nim pristupovať iba prostredníctvom akejkoľvek členskej funkcie vlastnej triedy, v ktorej sú deklarované.
  • Rovnako ako v zapuzdrení sú údaje v triede skryté pred ostatnými triedami pomocou konceptu skrývania údajov, ktorý sa dosiahne tým, že sa členovia alebo metódy triedy stanú súkromnými a trieda je vystavená koncovému používateľovi alebo svetu bez poskytnutia akýchkoľvek podrobností. za implementáciou pomocou konceptu abstrakcie, preto je známy aj ako a kombinácia skrývania údajov a abstrakcie .
  • Zapuzdrenie je možné dosiahnuť vyhlásením všetkých premenných v triede za súkromné ​​a napísaním verejných metód v triede na nastavenie a získanie hodnôt premenných.
  • Je viac definovaná pomocou metódy setter a getter.

Výhody zapuzdrenia

  • Skrytie údajov: je to spôsob, ako obmedziť prístup našich údajových členov skrytím detailov implementácie. Zapuzdrenie tiež poskytuje spôsob skrytia údajov. Používateľ nebude mať žiadnu predstavu o vnútornej implementácii triedy. Používateľovi nebude viditeľné, ako trieda ukladá hodnoty do premenných. Používateľ bude vedieť iba to, že hodnoty odovzdávame metóde setter a premenné sa inicializujú s touto hodnotou.
  • Zvýšená flexibilita: Premenné triedy môžeme nastaviť len na čítanie alebo len na zápis v závislosti od našich požiadaviek. Ak chceme, aby premenné boli iba na čítanie, musíme z vyššie uvedeného programu vynechať metódy nastavovania ako setName(), setAge() atď. získať metódy ako getName(), getAge() atď. z vyššie uvedeného programu
  • Opätovná použiteľnosť: Zapuzdrenie tiež zlepšuje opätovnú použiteľnosť a ľahko sa mení podľa nových požiadaviek.
  • Testovanie kódu je jednoduché: Zapuzdrený kód sa dá ľahko otestovať na testovanie jednotiek.
  • Sloboda programátora pri implementácii detailov systému: Toto je jedna z hlavných výhod zapuzdrenia, ktorá dáva programátorovi slobodu pri implementácii detailov systému. Jediným obmedzením pre programátora je zachovať abstraktné rozhranie, ktoré vidia cudzinci.

Napríklad: Programátor kódu ponuky úprav v GUI textového editora môže najskôr implementovať operácie vystrihnutia a prilepenia skopírovaním skutočných obrazov obrazovky do externej vyrovnávacej pamäte a von z nej. Neskôr môže byť s touto implementáciou nespokojný, keďže neumožňuje kompaktné uloženie výberu a nerozlišuje textové a grafické objekty. Ak programátor navrhol rozhranie na vystrihnutie a prilepenie s ohľadom na zapuzdrenie, prepnutie základnej implementácie na takú, ktorá ukladá text ako textové a grafické objekty vo vhodnom kompaktnom formáte, by nemalo spôsobiť žiadne problémy funkciám, ktoré potrebujú prepojenie s týmto GUI. . Zapuzdrenie teda poskytuje prispôsobivosť, pretože umožňuje meniť detaily implementácie častí programu bez nepriaznivého ovplyvnenia iných častí.

Nevýhody zapuzdrenia v Jave

  • Môže viesť k zvýšenej zložitosti, najmä ak sa nepoužíva správne.
  • Môže to sťažiť pochopenie fungovania systému.
  • Môže obmedziť flexibilitu implementácie.

Príklady zobrazujúce zapuzdrenie údajov v jazyku Java

Príklad 1:

Nižšie je uvedená implementácia vyššie uvedenej témy:

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

>

>

Výkon

Area: 32>

Príklad 2:

Program na prístup k premenným triedy EncapsulateDemo je zobrazený nižšie:

Java


IMMS hry s Androidom



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

>

>

Výkon

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

Príklad 3:

Vo vyššie uvedenom programe je trieda Encapsulate zapuzdrená, pretože premenné sú deklarované ako súkromné. Metódy get ako getAge(), getName() a getRoll() sú nastavené ako verejné, tieto metódy sa používajú na prístup k týmto premenným. Metódy setter ako setName(), setAge(), setRoll() sú tiež deklarované ako verejné a používajú sa na nastavenie hodnôt premenných.

Nižšie je uvedená implementácia definovaného príkladu:

Java




pridať do poľa 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());> >}> }>

>

>

Výkon

The age of the person is: 19>

Príklad 4:

Nižšie je uvedená implementácia Java Encapsulation:

Java


podreťazec metódy 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());> >}> }>

>

>

Výkon

90482098491 ABC [email protected] 100000.0>