• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Hermetyzacja danych

Object Storage Arubacloud
0 głosów
793 wizyt
pytanie zadane 12 lutego 2016 w C i C++ przez marekl91 Początkujący (380 p.)
Moje pytanie dotyczy hermetyzacji danych

Wzorując się odcinkiem 3 C++ object Mirosława Zelenta - chciałbym żeby w moim programie atrybuty klasy pozostały prywatne, a publiczne były tylko metody składowe tej klasy.

Problem w tym, że funkcja main () - zawiera tablicę obiektów i licznik tablicy, a w moim programie występuje funkcja load (), która wczytuje dane z pliku tekstowego. Jeśli funkcja load() znajduje się w main (), niemożliwy jest dostęp do prywatnych atrybutów tej klasy, więc nie można przypisać obiektom zapisanych uprzednio w pliku tekstowym zmiennych.  Kiedy dodaję w klasie klauzulę public wszystko jest ok, program działa i czyta prawidłowo z pliku, ale nie ma w programie zachowanej hermetyzacji danych.

Co w takim razie należy zrobić aby atrybuty klasy pozostały prywatne?   Gdzie zamieścić funkcję load() czytającą z pliku tekstowego?

Wiem, długie pytanie, ale chciałbym dobrze zrozumieć zasadę hermetyzacji danych i strukturę programu obiektowego.

2 odpowiedzi

+1 głos
odpowiedź 12 lutego 2016 przez Szykem2 Nałogowiec (29,510 p.)
wybrane 12 lutego 2016 przez marekl91
 
Najlepsza

Jeśli dobrze rozumiem to rozwiązaniem twojego problemu jest deklaracja przyjaźni. Jest to informacja że dana funkcja czy obiekt danej  klasy ma dostęp do prywatnych pól klasy.

void load();

class A {
   int x;
public:
    friend void load(); //mówisz kompilatorowi, że funkcja load może zrobić co chce z obiektem tej klasy
    //pozostałe metody
};

 

komentarz 12 lutego 2016 przez marekl91 Początkujący (380 p.)

Dzięki Ci  Szykem2 ,  rzeczywiście to jest rozwiązanie mojego problemu - wszystko działa jak chciałem.  Pełna hermetyzacja danych w programie obiektowym.  Tego mi właśnie brakowało, nie zrozumiałem dobrze mechanizmu przyjaźni.

+1 głos
odpowiedź 12 lutego 2016 przez mbabane Szeryf (79,280 p.)

Prywatne pola jak i metody sa dostepne w wewnatrz klasy. Zmienną prywatną mozna przyrównać do zmiennej lokalnej w funkcji czy w metodzie, nie jest ona widoczna poza nią, tak jak zmienna prywatna nie jest dostepna/widoczna poza klasa, nie da sie bezposrednio odwolac do prywatnego pola klasy w  taki sposob:
egzemplarz_klasy->pole_prywatne

Jednak wiemy ze wewnatrz klasy (czyli np. w jakiejs metodzie tej klasy) mozemy bezproblemu i do woli korzystać ze zmiennej/metody prywatnej. Trzeba więc stworzyć publiczną metodę, za pomocą której bedziemy mogli albo wydostać wartość zmiennej prywatnej, albo przypisać do niej jakąś inną wartość. 

Chcac dostać wartość z pola prywatnego stosuje się metode publiczna, która zwróci tą konkretną wartość np.:

class A
{
    private:
        int polePrywatne;

    public:
        int podajPolePrywatne()
        {
            return polePrywatne;
        }

}


int main()
{
     A obiekt;
     int wartoscPola = obiekt->podajPolePrywatne();

   return 0;
}

Analogicznie robi się chcac zmienic/dodac wartosc do pola prywatnego klasy, wowczas metoda publiczna bedzie przyjmowala jakis argument np.:

class A
{
    private:
        int polePrywatne;

    public:
       void ustawPolePrywatne( int wartosc)
        {
           polePrywatne = wartosc;
        }

}

int main()
{
     A obiekt;
     obiekt->ustawPolePrywatne( 1000 );

   return 0;
}

 

 

Podobne pytania

0 głosów
2 odpowiedzi 252 wizyt
pytanie zadane 26 lutego 2017 w C i C++ przez John Doe Obywatel (1,720 p.)
+1 głos
2 odpowiedzi 879 wizyt
pytanie zadane 25 marca 2021 w Python przez Patryk01 Obywatel (1,270 p.)
+1 głos
1 odpowiedź 1,237 wizyt
pytanie zadane 10 marca 2019 w Rozwój zawodowy, nauka, praca przez Teslum_369 Gaduła (4,190 p.)

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...