Hermetyzacja w Javie to podstawowe pojęcie w programowaniu obiektowym (OOP), które odnosi się do łączenia danych i metod działających na tych danych w ramach jednej jednostki, zwanej w Javie klasą. Enkapsulacja Java to sposób na ukrycie szczegółów implementacji klasy przed dostępem z zewnątrz i udostępnienie jedynie publicznego interfejsu, którego można używać do interakcji z klasą.
W Javie enkapsulację osiąga się poprzez zadeklarowanie zmiennych instancji klasy jako prywatnych, co oznacza, że można uzyskać do nich dostęp tylko wewnątrz klasy. Aby umożliwić zewnętrzny dostęp do zmiennych instancji, zdefiniowano metody publiczne zwane getterami i setterami, które służą odpowiednio do pobierania i modyfikowania wartości zmiennych instancji. Używając modułów pobierających i ustawiających, klasa może narzucać własne reguły sprawdzania poprawności danych i zapewniać spójność swojego stanu wewnętrznego.

wartość logiczna na ciąg Java
Implementacja enkapsulacji Java
Poniżej znajduje się przykład z enkapsulacją Java:
Jawa
// 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());> >}> }> |
>
>Wyjście
Name: John Age: 30>
Kapsułkowanie definiuje się jako pakowanie danych w pojedynczą jednostkę. Jest to mechanizm, który łączy kod i dane, którymi manipuluje. Innym sposobem myślenia o enkapsulacji jest to, że jest to tarcza ochronna, która uniemożliwia dostęp do danych kodowi znajdującemu się poza tą osłoną.
- Technicznie rzecz biorąc, w enkapsulacji zmienne lub dane klasy są ukryte przed jakąkolwiek inną klasą i można uzyskać do nich dostęp tylko poprzez dowolną funkcję członkowską własnej klasy, w której jest zadeklarowana.
- Podobnie jak w przypadku enkapsulacji, dane w klasie są ukrywane przed innymi klasami przy użyciu koncepcji ukrywania danych, którą osiąga się poprzez uczynienie członków lub metod klasy prywatnymi, a klasa jest udostępniana użytkownikowi końcowemu lub światu bez podawania żadnych szczegółów za wdrożeniem przy użyciu koncepcji abstrakcji, dlatego jest również znany jako połączenie ukrywania danych i abstrakcji .
- Enkapsulację można osiągnąć poprzez zadeklarowanie wszystkich zmiennych w klasie jako prywatnych i zapisanie metod publicznych w klasie w celu ustawienia i pobrania wartości zmiennych.
- Jest to bardziej zdefiniowane za pomocą metody ustawiającej i pobierającej.
Zalety enkapsulacji
- Ukrywanie danych: jest to sposób na ograniczenie dostępu naszych członków danych poprzez ukrycie szczegółów implementacji. Hermetyzacja umożliwia także ukrywanie danych. Użytkownik nie będzie miał pojęcia o wewnętrznej implementacji klasy. Użytkownik nie będzie widział, w jaki sposób klasa przechowuje wartości w zmiennych. Użytkownik będzie wiedział jedynie, że przekazujemy wartości do metody ustawiającej i zmienne są inicjowane tą wartością.
- Większa elastyczność: W zależności od naszych wymagań możemy ustawić zmienne klasy tylko do odczytu lub tylko do zapisu. Jeśli chcemy, aby zmienne były tylko do odczytu, musimy pominąć metody ustawiające, takie jak setName(), setAge() itp. z powyższego programu lub jeśli chcemy, aby zmienne były tylko do zapisu, musimy pominąć pobierz metody takie jak getName(), getAge() itp. z powyższego programu
- Możliwość ponownego użycia: Hermetyzacja poprawia również możliwość ponownego użycia i można ją łatwo zmienić w przypadku nowych wymagań.
- Testowanie kodu jest łatwe: Kod kapsułkowany jest łatwy do przetestowania pod kątem testów jednostkowych.
- Swoboda programisty we wdrażaniu szczegółów systemu: Jest to jedna z głównych zalet enkapsulacji, ponieważ daje programiście swobodę w implementowaniu szczegółów systemu. Jedynym ograniczeniem programisty jest utrzymanie abstrakcyjnego interfejsu widocznego dla osób z zewnątrz.
Na przykład: Programista kodu menu edycji w graficznym interfejsie użytkownika edytora tekstu może początkowo zaimplementować operacje wycinania i wklejania, kopiując rzeczywiste obrazy ekranowe do i z zewnętrznego bufora. Później może być niezadowolony z tej implementacji, gdyż nie pozwala ona na kompaktowe przechowywanie zaznaczenia, nie rozróżnia obiektów tekstowych i graficznych. Jeśli programista zaprojektował interfejs „wytnij i wklej” z myślą o enkapsulacji, zmiana podstawowej implementacji na taką, która przechowuje tekst jako obiekty tekstowe i graficzne w odpowiednim, kompaktowym formacie, nie powinna powodować żadnych problemów dla funkcji, które muszą współpracować z tym GUI . Zatem hermetyzacja zapewnia możliwość adaptacji, ponieważ pozwala na zmianę szczegółów implementacji części programu bez negatywnego wpływu na inne części.
porządek leksykograficzny
Wady enkapsulacji w Javie
- Może prowadzić do większej złożoności, szczególnie jeśli nie jest właściwie używany.
- Może utrudnić zrozumienie działania systemu.
- Może ograniczać elastyczność wdrożenia.
Przykłady pokazujące enkapsulację danych w Javie
Przykład 1:
Poniżej realizacja powyższego tematu:
Jawa
// 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();> >}> }> |
>
>Wyjście
Area: 32>
Przykład 2:
Poniżej przedstawiono program umożliwiający dostęp do zmiennych klasy EncapsulateDemo:
Jawa
usuń pamięć podręczną npm
// 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);> >}> }> |
>
>Wyjście
Geek's name: Harsh Geek's age: 19 Geek's roll: 51>
Przykład 3:
W powyższym programie klasa Encapsulate jest hermetyzowana, ponieważ zmienne są zadeklarowane jako prywatne. Metody get, takie jak getAge(), getName() i getRoll() są ustawione jako publiczne i te metody służą do uzyskiwania dostępu do tych zmiennych. Metody ustawiające, takie jak setName(), setAge(), setRoll() są również deklarowane jako publiczne i służą do ustawiania wartości zmiennych.
Poniżej znajduje się implementacja zdefiniowanego przykładu:
Jawa
// 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());> >}> }> |
program do dziedziczenia w Pythonie
>
>Wyjście
The age of the person is: 19>
Przykład 4:
Poniżej znajduje się implementacja enkapsulacji Java:
Jawa
Słownik sortowania Pythona
// 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());> >}> }> |
>
>Wyjście
90482098491 ABC [email protected] 100000.0>