Zapouzdření v Javě je základní koncept v objektově orientovaném programování (OOP), který odkazuje na sdružování dat a metod, které s těmito daty pracují, do jedné jednotky, která se v Javě nazývá třída. Java Encapsulation je způsob, jak skrýt detaily implementace třídy před přístupem zvenčí a pouze odhalit veřejné rozhraní, které lze použít k interakci s třídou.
V Javě je zapouzdření dosaženo deklarováním instančních proměnných třídy jako soukromých, což znamená, že k nim lze přistupovat pouze v rámci třídy. Pro umožnění přístupu zvenčí k instančním proměnným jsou definovány veřejné metody zvané getter a setter, které se používají k získávání a úpravě hodnot instančních proměnných. Pomocí getterů a setterů může třída vynutit svá vlastní pravidla ověřování dat a zajistit, že její vnitřní stav zůstane konzistentní.
Implementace Java Encapsulation
Níže je uveden příklad s Java Encapsulation:
Jáva
// 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());> > }> }> |
>
co to znamená xd
>Výstup
Name: John Age: 30>
Zapouzdření je definováno jako zabalení dat do jedné jednotky. Je to mechanismus, který spojuje kód a data, s nimiž manipuluje. Dalším způsobem, jak přemýšlet o zapouzdření, je, že se jedná o ochranný štít, který zabraňuje přístupu kódu mimo tento štít k datům.
- Technicky v zapouzdření jsou proměnné nebo data třídy skryty před jakoukoli jinou třídou a lze k nim přistupovat pouze prostřednictvím jakékoli členské funkce vlastní třídy, ve které jsou deklarovány.
- Stejně jako v zapouzdření jsou data ve třídě skryta před ostatními třídami pomocí konceptu skrývání dat, kterého je dosaženo tím, že členové nebo metody třídy jsou soukromé, a třída je vystavena koncovému uživateli nebo světu bez poskytnutí jakýchkoli podrobností. za implementací pomocí konceptu abstrakce, takže je také známý jako a kombinace skrývání dat a abstrakce .
- Zapouzdření lze dosáhnout deklarováním všech proměnných ve třídě jako soukromých a zápisem veřejných metod do třídy pro nastavení a získání hodnot proměnných.
- Více se definuje pomocí metody setter a getter.
Výhody zapouzdření
- Skrytí dat: je to způsob, jak omezit přístup našich datových členů skrytím podrobností implementace. Zapouzdření také poskytuje způsob, jak data skrýt. Uživatel nebude mít žádnou představu o vnitřní implementaci třídy. Pro uživatele nebude viditelné, jak třída ukládá hodnoty do proměnných. Uživatel bude vědět pouze to, že předáváme hodnoty metodě setter a proměnné se inicializují s touto hodnotou.
- Zvýšená flexibilita: V závislosti na našich požadavcích můžeme nastavit proměnné třídy pouze pro čtení nebo pouze pro zápis. Pokud chceme, aby proměnné byly pouze pro čtení, musíme z výše uvedeného programu vynechat metody setter jako setName(), setAge() atd. nebo pokud chceme, aby proměnné byly pouze pro zápis, musíme vynechat získat metody jako getName(), getAge() atd. z výše uvedeného programu
- Opětovná použitelnost: Zapouzdření také zlepšuje opětovnou použitelnost a lze jej snadno měnit podle nových požadavků.
- Testování kódu je snadné: Zapouzdřený kód lze snadno testovat pro testování jednotek.
- Svoboda programátorovi při implementaci detailů systému: To je jedna z hlavních výhod zapouzdření, která dává programátorovi volnost při implementaci detailů systému. Jediným omezením pro programátora je udržovat abstraktní rozhraní, které vidí lidé zvenčí.
Například: Programátor kódu nabídky úprav v grafickém uživatelském rozhraní textového editoru může nejprve implementovat operace vyjmutí a vložení zkopírováním skutečných obrázků obrazovky do a z externí vyrovnávací paměti. Později může být s touto implementací nespokojen, protože neumožňuje kompaktní uložení výběru a nerozlišuje textové a grafické objekty. Pokud programátor navrhl rozhraní pro vyjmutí a vložení s ohledem na zapouzdření, přepnutí základní implementace na takovou, která ukládá text jako text a grafické objekty ve vhodném kompaktním formátu, by nemělo způsobit žádné problémy funkcím, které potřebují rozhraní s tímto GUI. . Zapouzdření tedy přináší adaptabilitu, protože umožňuje měnit detaily implementace částí programu, aniž by to nepříznivě ovlivnilo ostatní části.
Nevýhody zapouzdření v Javě
- Může vést ke zvýšené složitosti, zvláště pokud není správně používán.
- Může ztížit pochopení toho, jak systém funguje.
- Může omezit flexibilitu implementace.
Příklady ukazující zapouzdření dat v Javě
Příklad 1:
Níže je implementace výše uvedeného tématu:
Jáva
// 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();> > }> }> |
>
alya manasa
>Výstup
Area: 32>
Příklad 2:
Program pro přístup k proměnným třídy EncapsulateDemo je zobrazen níže:
Jáva
jak zjistím velikost monitoru
// 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ýstup
Geek's name: Harsh Geek's age: 19 Geek's roll: 51>
Příklad 3:
Ve výše uvedeném programu je třída Encapsulate zapouzdřena, protože proměnné jsou deklarovány jako soukromé. Metody get jako getAge(), getName() a getRoll() jsou nastaveny jako veřejné, tyto metody se používají k přístupu k těmto proměnným. Metody setter jako setName(), setAge(), setRoll() jsou také deklarovány jako veřejné a používají se k nastavení hodnot proměnných.
Níže je uvedena implementace definovaného příkladu:
Jáva
// 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());> > }> }> |
metody seznamu java
>
>Výstup
The age of the person is: 19>
Příklad 4:
Níže je uvedena implementace Java Encapsulation:
Jáva
// 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ýstup
90482098491 ABC [email protected] 100000.0>