Enkapsulacja Java

W tym samouczku nauczysz się hermetyzacji i ukrywania danych w Javie na podstawie przykładów.

Enkapsulacja Java

Hermetyzacja jest jedną z kluczowych cech programowania obiektowego. Hermetyzacja odnosi się do grupowania pól i metod w ramach jednej klasy.

Uniemożliwia klasom zewnętrznym dostęp do pól i metod klasy oraz zmianę ich. Pomaga to również w ukrywaniu danych .

Przykład 1: Enkapsulacja Java

 class Area ( // fields to calculate 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) ( // create object of Area // pass value of length and breadth Area rectangle = new Area(5, 6); rectangle.getArea(); ) )

Wynik

 Powierzchnia: 30

W powyższym przykładzie utworzyliśmy klasę o nazwie Area. Głównym celem tej klasy jest obliczenie powierzchni.

Aby obliczyć powierzchnię, potrzebujemy dwóch zmiennych: długość i szerokość oraz sposób: getArea(). W związku z tym umieściliśmy te pola i metody w jednej klasie.

Tutaj do pól i metod można również uzyskać dostęp z innych klas. Dlatego nie jest to ukrywanie danych .

To tylko hermetyzacja . Po prostu trzymamy razem podobne kody.

Uwaga : ludzie często uważają hermetyzację za ukrywanie danych, ale to nie do końca prawda.

Hermetyzacja odnosi się do grupowania powiązanych pól i metod razem. Można to wykorzystać do ukrycia danych. Hermetyzacja sama w sobie nie oznacza ukrywania danych.

Dlaczego kapsułkowanie?

  • W Javie hermetyzacja pomaga nam zachować razem powiązane pola i metody, dzięki czemu nasz kod jest czystszy i łatwy do odczytania.
  • Pomaga kontrolować wartości naszych pól danych. Na przykład,
     class Person ( private int age; public void setAge(int age) ( if (age>= 0) ( this.age = age; ) ) )

    Tutaj zmieniamy wiek privatei stosujemy logikę wewnątrz setAge()metody. Otóż ​​wiek nie może być liczbą ujemną.
  • Metody pobierające i ustawiające zapewniają dostęp tylko do odczytu lub tylko do zapisu do naszych pól klas. Na przykład,
     getName() // provides read-only access setName() // provides write-only access
  • Pomaga odsprzęgać komponenty systemu. Na przykład możemy hermetyzować kod w wielu pakietach.
    Te oddzielone komponenty (pakiet) można projektować, testować i debugować niezależnie i jednocześnie. Wszelkie zmiany w konkretnym komponencie nie mają żadnego wpływu na inne komponenty.
  • Możemy również uzyskać ukrywanie danych za pomocą enkapsulacji. W powyższym przykładzie, jeśli zmienimy długość i szerokość zmiennej na prywatną, to dostęp do tych pól jest ograniczony.
    I są trzymani w ukryciu przed klasami zewnętrznymi. Nazywa się to ukrywaniem danych .

Ukrywanie danych

Ukrywanie danych to sposób na ograniczenie dostępu naszych członków danych poprzez ukrycie szczegółów implementacji. Hermetyzacja umożliwia także ukrywanie danych.

Możemy użyć modyfikatorów dostępu, aby uzyskać ukrywanie danych. Na przykład,

Przykład 2: ukrywanie danych przy użyciu prywatnego specyfikatora

 class Person ( // private field private int age; // getter method public int getAge() ( return age; ) // setter method public void setAge(int age) ( this.age = age; ) ) class Main ( public static void main(String() args) ( // create an object of Person Person p1 = new Person(); // change age using setter p1.setAge(24); // access age using getter System.out.println("My age is " + p1.getAge()); ) )

Wynik

 Mam 24 lata

W powyższym przykładzie mamy privatewiek pola. Ponieważ tak jest private, nie można uzyskać do niego dostępu spoza klasy.

Aby uzyskać dostęp do wieku, użyliśmy publicmetod: getAge()i setAge(). Metody te nazywane są metodami pobierającymi i ustawiającymi.

Ustalenie wieku jako prywatnego pozwoliło nam ograniczyć nieautoryzowany dostęp spoza zajęć. To jest ukrywanie danych .

Jeśli spróbujemy uzyskać dostęp do pola wieku z klasy głównej, otrzymamy błąd.

 // error: age has private access in Person p1.age = 24;

Interesujące artykuły...