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