Elektroda.pl
Elektroda.pl
X
Szkolenia elektronika Udemy
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

c++ - Hermetyzacja, jakaś sprytna metoda.

Ripper-PL 28 Maj 2014 20:36 882 3
  • #1 28 Maj 2014 20:36
    Ripper-PL
    Poziom 9  

    Witam, aktualnie piszę grę w c++ i musi ona zawierać tak zwaną hermetyzację, jako że opanowałem już w miarę programowanie obiektowe a kuleje właśnie w tym aspekcie chciałem zapytać o jakąś dobrą metodę na "dobieranie się" do plików skoro według idei hermetyzacji mają być typu private. Znajomy pokazał mi metodę z tworzeniem metod na każdą zmienną z osobna, lecz jako że w mojej klasie jest około 30 różnych zmiennych to troszkę miejsca i czasu by to zajęło. Zależy mi głównie na jakimś schemacie który pozwoliłby mi w miarę szybko pozmieniać wiersze w moim programie i wszystkie zmienne zmienić na private. Jako że program jest już napisany prosiłbym, aby ta metoda nie potrzebowała zbyt dużo modernizacji jeśli chodzi o kod, ponieważ pisałem go ze zmiennymi typu public a co za tym idzie każda metoda używała tych zmiennych i je modyfikowała. Dodam jeszcze, że o ile to możliwe prosiłbym, aby obyło się bez wskaźników ,bo po prostu staram się ich nie używać ze względu na np. ich brak w c#(chyba ze użyjemy UNSAFE) oraz javie. Z góry dzięki za pomoc.

    0 3
  • Szkolenia elektronika Udemy
  • #2 29 Maj 2014 10:34
    gaskoin
    Poziom 38  

    Pokaż ten kod, bo nie ma na to uniwersalnego rozwiązania.

    Hermetyzacja nie polega na stworzeniu getterów i setterów do zmiennych prywatnych, tylko ukryciu wszystkiego, czego nie powinno się używać na zewnątrz klasy.

    Dziwi mnie, że "opanowałeś programowanie obiektowe", z tego co piszesz, to bardziej tworzysz jakieś anemiczne encje, analogiczne do sturktur w C niż programujesz obiektowo. W programowaniu obiektowym modelujemy zachowania a nie struktury.

    0
  • Szkolenia elektronika Udemy
  • #3 30 Maj 2014 10:06
    Ripper-PL
    Poziom 9  

    Nie mówię, że opanowałem jakoś dobrze, po prostu rozumiem ideę polimorfizmu, dziedziczenia, interfejsy, no i tym podobne oraz wiem jak się ich używa. Natomiast tą całą hermetyzację zawsze omijałem. Już podsyłam przykładową klasę i kawałek kodu z klasy głównej, które mają znaczenie.

    klasa główna :

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    przykładowa metoda używająca zmiennych zamieszczonych powyżej:
    Kod: cpp
    Zaloguj się, aby zobaczyć kod


    Nie mogę wstawić wszystkiego bo tego jest multum, jakieś 10-15 metod no i kodu w niektórych naprawdę sporo więc wklejam tylko część.
    Z tego co mówiłeś hermetyzacja polega "TYLKO" i wyłącznie na ukryciu zmiennych których nie chcę używać poza klasą (główną + pochodne), ale praktycznie wszystkich zmiennych używam w metodach klas, no i co mam zrobić, żeby idea Hermetyzacji została spełniona ?? w moim przypadku jest to np. zmienna "name", bo nie wiem czy dobrze zrozumiałem. Jeśli nadal tego nie łapię mógłbyś mi to po krótce wytłumaczyć co i jak ?? Z góry dzięki

    0
  • #4 31 Maj 2014 16:04
    McMonster
    Poziom 32  

    Hermetyzacja, czy raczej enkapsulacja, sama w sobie jest nic nie warta. Dochodzi jeszcze coś takiego, jak podział odpowiedzialności. Każda klasa i funkcja powinna robić JEDNĄ rzecz. Nie ma definicji, czym jest jedna rzecz, ale jak masz w klasie tyle pól, to ta klasa na pewno ma kilka lub nawet kilka odpowiedzialności. Żywy przykład to używanie publicznego pola jednej klasy w metodzie innej, takie rzeczy powinny być w jednym miejscu. Takich zasad jest więcej, ale to chyba podstawowa.

    Poprawnego programowania obiektowego nie da się wytłumaczyć tak sobie w poście na forum. Zobacz sobie źródła jakiegoś dużego projektu znalezionego w Internecie i poanalizuj działanie, np. rozrysowując sobie interakcje między klasami.

    Poszukaj też książki Roberta Martina "Czysty kod" (ang. "Clean Code") i książek, do których się w tej odwołuje. Tylko ta książka nauczy cię więcej o programowaniu, niż całe studia informatyczne.

    0