Kurs VBA – Klasy – Wstęp, teoria

Poniższy tekst rozpoczyna kilka rozdziałów na temat programowania obiektowego. Pewnie dało by się to wszystko skrócić i umieścić w jednej części, ale cóż, taka ze mnie gaduła. Pisząc kolejne wiersze zakładam, że czytelnik porusza się względnie swobodnie w programowaniu VBA. Nie istotne czy nabył tą wiedzę przy pomocy niniejszego kursu czy nie.
Nie można programować w VBA bez kontaktu z programowaniem obiektowym, czyli modelem obiektowym Excela. W tej i kolejnych częściach kursu dowiemy się po prostu jak rozszerzać nasz program o nasze własne klasy. Dzięki temu programy mogą stać się bardziej czytelna a ich projektowanie łatwiejsze.
Na temat programowania obiektowego napisano mnóstwo książek, na pewno nie mam zamiaru napisać tutaj kolejnej, tym bardziej, że trudno jest znaleźć język programowania, który by spełniał oczekiwania uczonych głów co do realizacji wszystkich cech programowania obiektowego. Sam nie uważam się za wielkiego specjalistę z tego zakresu. Na szczęście wiedza praktyczna i teoretyczna nie muszą iść w parze. Po poniższe części teoretycznej przejdziemy do różnych przykładów praktycznych.
Z pewnością VBA tylko w drobnym stopniu realizuje wymagania programowania obiektowego, ale wciąż możemy to wykorzystać do swoich celów. Programowanie obiektowe możemy realizować poprzez Abstrakcję i Hermetyzację.

Abstrakcja

Każdy obiekt w systemie służy jako model abstrakcyjnego „wykonawcy”, który może wykonywać pracę, opisywać i zmieniać swój stan oraz komunikować się z innymi obiektami w systemie bez ujawniania, w jaki sposób zaimplementowano dane cechy. Cyt. Wikipedia

Klasą nazywamy pewien schemat „realnego” bytu. Sama klasa jest dopiero definicją, która jest realizowana przez obiekty danej klasy. Często przytaczanym przykładem jest przypadek samochodu. Klasa to zbiór papierowych czy komputerowych schematów. Określają one rozmiar, możliwe kolory, budowę silnika, sposób użytkowania itd. Obiektem jest natomiast konkretna sztuka auta zbudowana no podstawie tego schematu. Klasę auto możemy zdefiniować w następujący sposób (w kolejnej części kursu napiszę dokładnie jak „pisać” kod klas):

Oczywiście pełna definicja klasy realizującej funkcje samochodu, zajęła by tysiące linii. Powyżej mamy tylko dwie metody, realizujące przyspieszanie i zwalnianie, oraz jeden atrybut przechowujący prędkość.

Wciąż jest to jedynie definicja klasy. Nazwałem ją Samochód. Żeby ją używać muszę zadeklarować obiekt. Tutaj już wchodzimy w znane nam rejony.
Kolejnym krokiem jest inicjalizacja obiektu:

Ostatecznie mogę przyspieszyć moim samochodem.

Podsumowując, dzięki klasom możemy w jednym miejscu zgromadzić wszystkie cechy modelowanego obiektu.

Hermetyzacja

Czyli ukrywanie implementacji, enkapsulacja. Zapewnia, że obiekt nie może zmieniać stanu wewnętrznego innych obiektów w nieoczekiwany sposób. Tylko własne metody obiektu są uprawnione do zmiany jego stanu. Cyt. Wikipedia

W jednej z poprzednich części kursu opisałem widoczność zmiennych. Daje ona nam gwarancję, że zmienne będą zmieniane w tylko w określonej części kodu. Programowanie obiektowe idzie krok naprzód. Spójrzmy na poniższy przykład:

Prędkość jest z pewnością kluczową cechą samochodu. Nie chcemy, żeby jakiś kod spoza klasy zwiększył nagle prędkość o 1000, bo pasażerowie umrą z powodu przeciążenia. Podobnie chcemy, żeby auto nie przekraczało pewnej maksymalnej wartości.

Atrybut prvSpeed jest prywatny, żaden kod spoza klasy nie może go zmieniać. Tworzymy jedynie dwie metody, naciśnij hamulec i naciśnij gaz, aby zmieniać prędkość. Te dwie metody nie tylko pilnują, że prędkość zmieniała się o określoną wartość, ale też aby utrzymywała się w określonych granicach. Takie dwie metody mogą być używane w różnych modułach w moim pliku.Podsumowując. Programowanie obiektowe pozwala nam budować program z pewnych klocków. Na przykład jeden klocek odpowiada za zapisywanie wyników pracy do pliku txt, inny klocek za obliczenia, kolejny za komunikaty błędów. Każdy z tych klocków udostępnia innym klockom tylko określone części.

Zalety
  • Możemy budować program cegła po cegle.
  • Łatwiej testować poszczególne części aplikacji.
  • Aktualizacja klasy może odbyć się bez korygowania reszty programu.
  • Obiekty można łatwo przenosić między plikami.
Przy okazji omawiania atrybutów, właściwości i metod obiektów poznamy dokładniej plusy stosowania programowania obiektowego.
Wady
  • Początkowo trzeba poświecić więcej czasu na stworzenie aplikacji.
  • Czasem trudno jest określić gdzie ma się kończyć jeden obiekt a zaczynać inny.
  • Programowanie obiektowe może być trudne do zrozumienia dla osoby przyzwyczajonej do programowania strukturalnego.
  • Źle zaprojektowany program obiektowy może być trudniejszy do zrozumienia niż program bez obiektów.

W kolejnej część pokarzę jak w praktyce definiować klasy.

Spis treści Tworzenie i inicjalizacja

Comments 2

  1. Witam,
    przy opisie hermetyzacji w metodzie PressAccPedal jest chyba błąd w linii:
    prvSpeed = pubSpeed + conStepSpeed
    Moim zdaniem powinno być prvSpeed zamiast pubSpeed. Czy mam rację czy nie rozumiem?

    1. Post
      Author

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *