logo

Zapouzdření v Javě

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>