Skip to content

Latest commit

 

History

History
85 lines (58 loc) · 2.79 KB

06-hermetization.md

File metadata and controls

85 lines (58 loc) · 2.79 KB

Programowanie obiektowe

Hermetyzacja

Coders School

Zabezpieczanie dostępu

Aby zabezpieczyć nasz obiekt, przed niepożądanymi modyfikacjami, możemy dokonać, tzw. hermetyzacji lub enkapsulacji.

Polega ona na umieszczeniu wszystkich właściwości (pól) w sekcji prywatnej, a ich modyfikacje umożliwiać przez publiczne funkcje.


Settery i gettery

Najprostszymi funkcjami umożliwiającymi modyfikacje są tzw. settery.

Setter to funkcja, która przypisuje daną wartość konkretnej zmiennej.

void setName(const std::string& name) { name_ = name; }

Ponieważ dane są prywatne, ich odczyt również nie jest możliwy, więc dokonujemy go przez tzw. gettery.

std::string getName() const { return name_; }

Oczywiście nie zawsze musimy umożliwiać modyfikacje wszystkich zmiennych, tak samo, jak nie wszystkie zmienne mogą mieć swoje gettery. Wybór zależy od programisty.


Nietrywialne przypisania

Jeśli w obiektach naszej klasy chcemy sprawdzać poprawność przypisywanych danych, to settery są wręcz obowiązkowe.

void setValue(int newValue) {
    if (newValue >= 0 or newValue < 100) {
        value_ = newValue;
    } // otherwise no effect, could also signal an error
}

Gdyby pole value_ było publiczne to taki warunek musielibyśmy sprawdzać w każdym miejscu, gdzie ustawiamy dane. Prościej jest po prostu zabronić bezpośredniego dostępu do value_ poprzez uczynienie go prywatnym i utworzenie publicznego settera jak powyżej. Dzięki temu mamy pewność, że nikt nie ustawi wartości spoza oczekiwanego zakresu.

Jeśli nie potrzebujemy kontroli danych to łatwiej jest używać pól publicznych.


const'owe gettery

Przypatrz się temu getterowi.

std::string getName() const { return name_; }

Gdzie on ma const? Co to robi? 🤔

Odpowiemy na to pytanie po zadaniach 💻