W tym samouczku nauczymy się hermetyzacji w C ++ na podstawie przykładów.
Hermetyzacja jest jedną z kluczowych cech programowania obiektowego. Obejmuje łączenie składowych danych i funkcji w ramach jednej klasy.
Łączenie podobnych członków danych i funkcji w klasie razem pomaga również w ukrywaniu danych.
Hermetyzacja w C ++
Ogólnie hermetyzacja to proces pakowania podobnego kodu w jednym miejscu.
W C ++ możemy łączyć składowe danych i funkcje, które działają razem w ramach jednej klasy. Na przykład,
class Rectangle ( public: int length; int breadth; int getArea() ( return length * breadth; ) );
W powyższym programie funkcja getArea()
oblicza pole prostokąta. Aby obliczyć powierzchnię, potrzebna jest długość i szerokość.
Dlatego składowe danych (długość i szerokość) oraz funkcja getArea()
są przechowywane razem w Rectangle
klasie.

Przykład 1: Hermetyzacja w C ++
// Program to calculate the area of a rectangle #include using namespace std; class Rectangle ( public: // Variables required for area calculation int length; int breadth; // Constructor to initialize variables Rectangle(int len, int brth) : length(len), breadth(brth) () // Function to calculate area int getArea() ( return length * breadth; ) ); int main() ( // Create object of Rectangle class Rectangle rect(8, 6); // Call getArea() function cout << "Area = " << rect.getArea(); return 0; )
Wynik
Powierzchnia = 48
W powyższym przykładzie obliczamy pole prostokąta.
Aby obliczyć powierzchnię, potrzebujemy dwóch zmiennych: długość i szerokość oraz funkcję: getArea()
. W związku z tym umieściliśmy te zmienne i funkcje w jednej klasie o nazwie Rectangle.
Tutaj do zmiennych i funkcji 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 C ++ hermetyzacja pomaga nam zachować powiązane dane i funkcje razem, dzięki czemu nasz kod jest bardziej przejrzysty i czytelny.
- Pomaga kontrolować modyfikację naszych członków danych.
Rozważmy sytuację, w której chcemy, aby pole długości w klasie było nieujemne. Tutaj możemy ustawić zmienną długości jako prywatną i zastosować logikę wewnątrz metodysetAge()
. Na przykład,
class Rectangle ( private: int age; public: void setLength(int len) ( if (len>= 0) length = len; ) );
- Funkcje pobierające i ustawiające zapewniają dostęp tylko do odczytu lub tylko do zapisu dla członków naszej klasy. Na przykład,
getLength() // provides read-only access setLength() // provides write-only access
- Pomaga odsprzęgać komponenty systemu. Na przykład możemy hermetyzować kod w wielu pakietach.
Te oddzielone komponenty (pakiety) można opracowywać, testować i debugować niezależnie i jednocześnie. Wszelkie zmiany w danym komponencie nie mają żadnego wpływu na inne komponenty. - Możemy również uzyskać ukrywanie danych za pomocą enkapsulacji. W przykładzie 1 , jeśli zmienimy zmienne długości i szerokości na
private
lubprotected
, 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 w C ++. Na przykład,
Przykład 2: Ukrywanie danych w C ++ przy użyciu prywatnego specyfikatora
#include using namespace std; class Rectangle ( private: // Variables required for area calculation int length; int breadth; public: // Setter function for length void setLength(int len) ( length = len; ) // Setter function for breadth void setBreadth(int brth) ( breadth = brth; ) // Getter function for length int getLength() ( return length; ) // Getter function for breadth int getBreadth() ( return breadth; ) // Function to calculate area int getArea() ( return length * breadth; ) ); int main() ( // Create object of Rectangle class Rectangle rectangle1; // Initialize length using Setter function rectangle1.setLength(8); // Initialize breadth using Setter function rectangle1.setBreadth(6); // Access length using Getter function cout << "Length = " << rectangle1.getLength() << endl; // Access breadth using Getter function cout << "Breadth = " << rectangle1.getBreadth() << endl; // Call getArea() function cout << "Area = " << rectangle1.getArea(); return 0; )
Wynik
Długość = 8 Szerokość = 6 Powierzchnia = 48
Tutaj utworzyliśmy zmienne długości i szerokości private
.
Oznacza to, że do tych zmiennych nie można uzyskać bezpośredniego dostępu poza Rectangle
klasą.
Aby uzyskać dostęp do tych zmiennych prywatnych, użyliśmy public
funkcji setLength()
, getLength()
, setBreadth()
, i getBreadth()
. Nazywa się to funkcjami pobierającymi i ustawiającymi.
Uczynienie zmiennych prywatnymi pozwoliło nam ograniczyć nieautoryzowany dostęp spoza klasy. To jest ukrywanie danych .
Jeśli spróbujemy uzyskać dostęp do zmiennych z main()
klasy, otrzymamy błąd.
// error: rectangle1.length is inaccessible rectangle1.length = 8; // error: rectangle1.breadth is inaccessible rectangle1.length = 6;