Ucząc się programowania w C++ mamy do wyboru dwie drogi - pierwszą z nich jest nauka języka C, czyli wałkowaniem wszystkiego po kolei i często rzeczy tych, które tak na dobrą sprawę są przeżytkiem i nie będziesz miał najmniejszego zamiaru z nich korzystać wiedząc, że istnieje coś lepszego. Drugą metodą jest poznawanie świata C++ ucząc się już na narzędziach, które mają uzasadnienie swego istnienia i stosuje się je na co dzień w tworzonych aplikacjach. Pierwsza metoda jest wygodna dla osób piszących zarówno kursy jak i książki - niestety przy nich często można ducha wyzionąć. Druga metoda to pójść z duchem czasu i skupić się na praktycznej części programowania. Tu niestety w przypadku języka C++ jest to trudne, bowiem wkraczamy w programowanie obiektowe, a tego nikt nie chce specjalnie robić zanim nie omówi się większości standardu wywodzącego się z C i kilku procent języka C++. Osobiście uważam, że takie podejście jest nudne i delikatnie mówiąc mało praktyczne, dlatego też pójdziemy ścieżką nowoczesną i będziemy się uczyli wykorzystywać narzędzia obiektowe intensywnie już od następnego rozdziału. Zanim jednak to nastąpi potrzebna jest nam teoria z zakresu obiektowości, która umożliwi nam swobodną komunikację w dalszej części kursu. Ten rozdział jest właśnie temu poświęcony.
Pojęcia, które zostaną omówione w niniejszym rozdziale są dostosowane przede wszystkim do poziomu osób początkujących. Wytrawny programista oczywiście może spokojnie wytknąć, że o wielu rzeczach nie zostało wspomniane w niniejszym rozdziale, niemniej jednak nimi specjalnie bym się nie przejmował - oni programują zapewne kilka lat, a Ty dopiero się uczysz. Poza tym gdy przyjdzie odpowiedni moment dowiesz się o pozostałych rzeczach, o których na chwilę obecną nie ma sensu wspominać, bowiem tylko by zaciemniały obraz tego co faktycznie jest istotne dla sprawy.
Czym jest klasa?
Klasa jest to zbiór zmiennych i
metod, które są ze sobą logicznie powiązane. Klasy często przypominają czarne skrzynki, które potrafią zrealizować określone zadania. Zadania te można wykonywać zazwyczaj tylko i wyłącznie poprzez wywoływanie
metod, które należą do
obiektu. Klasa tylko i wyłącznie określa jakie zmienne i metody są w niej dostępne oraz określa ich działanie. Można powiedzieć, że
klasa jest to własny typ danych o złożonej budowie i tak należy rozumieć znaczenie tego słowa.
Przykładem klasy jest
std::string
czyli narzędzie z którym zetknąłeś się już w poprzednim rozdziale.
Nazywanie narzędzia std::string klasą nie jest do końca prawidłowym stwierdzeniem - w rzeczywistości std::string jest aliasem wskazującym na znacznie bardziej zaawansowany twór języka C++, który również ma swoją nazwę. Niemniej jednak nie warto na chwilę obecną wdawać się w tak daleko idące szczegóły nazewnicze i można ze spokojnym sumieniem nazywać narzędzie std::string klasą. Gdy przyjdzie właściwy moment z pewnością zostaniesz uświadomiony czym tak naprawdę jest narzędzie std::string oraz jak należy rozmumieć znaczenie słowa alias w programowaniu.
|
Czym jest obiekt?
Obiekt jest to zmienna, której typem jest
klasa. Skoro tak, to w poniższym przykładzie co nazwiemy obiektem?
std::string tekst1;
std::string tekst2;
Obiektem w powyższym przykładzie będzie zarówno
tekst1 jak i
tekst2. Zmienne
tekst1 i
tekst2 są typu
std::string
i zmienne te są obiektami, a jak ustaliliśmy już wcześniej typ
std::string
jest klasą. Proste? Proste :) Ale zapisz sobie to na kartce, bo zaraz Ci się będzie mieszało, a te dwa słowa będą się z uporem maniaka przewijały w dalszej części kursu. Im szybciej opanujesz te terminy tym łatwiej będzie Ci czytać dalszą część kursu i komunikować się z innymi programistami np. na forum :)
Czym jest metoda?
Metodami nazywamy funkcje, które należą do
obiektu. Tak więc jeżeli napiszę zdanie: 'wywołaj metodę
c_str() należącą do klasy
std::string
', to oznaczać to będzie, że musisz posiadać najpierw obiekt typu
std::string, a następnie na podanym obiekcie wywołać metodę o podanej nazwie. Przelewając więc powyższe zdanie na język C++ będzie to wyglądało tak:
std::string moja_zmienna;
moja_zmienna.c_str();
Choć sensu większego nie ma w takim wywołaniu metody, jakie zostało tu zaprezentowane to przedstawia ono ogólną ideę jak należy rozumieć podobne sformułowania w czytanym kursie.
Jak się wywołuje metody
Wywoływanie metod już widziałeś kilkukrotnie. Warto jednak w tym miejscu jeszcze wspomnieć o składni, a konkretniej jak wygląda zapis ogólny wywoływania metod. Jak zapewne się już domyślasz jest to:
nazwa_zmiennej.nazwa_metody();
Zmienna musi oczywiście być obiektem, a obiekt musi posiadać metodę by było możliwe jej wywołanie. Oczywista oczywistość :) Dobrze też będzie jeżeli zmienna zanim zostanie użyta będzie wcześniej zadeklarowana, a typem będzie jakaś istniejąca klasa - w przeciwnym wypadku otrzymamy błąd kompilacji, co niekoniecznie będzie przez nas pożądane :)
Tablice jednowymiarowe, a obiekty
Prędzej czy później będziesz miał potrzebę tworzenia tablic, której typem dla elementów będzie klasa. O ile utworzenie takiej tablicy będzie dla Ciebie proste to możesz natrafić na problem wywoływania metod należących do utworzonych obiektów. Oczywiście problemem nie będzie język C++, tylko Twoja niewiedza, którą zapobiegliwie uzupełnimy właśnie w tym paragrafie. Krótki przykład będzie wystarczjąco pouczający:
std::string tablica[ 10 ];
tablica[ 0 ].c_str();
Jak widać zasady posługiwania tablicami pozostają te same - niezależnie od typu danych. Jak się zastanowisz to zauważysz też, że reguła z kropką i nazwą metody, którą chcemy wywołać również się nie zmieniła, także nie pozostaje nic innego tylko się cieszyć z tego jakie jest to proste :)
Podsumowanie
Jak widzisz pojęć do zapamiętania zbyt wielu nie masz, więc nie możesz powiedzieć, że dużo od Ciebie wymagam :) Z pewnością wkrótce będziesz usatysfakcjonowany z posiadania tej wiedzy teoretycznej. Tymczasem na zakończenie przeczytaj sobie jeszcze raz opis tych trzech pojęć ku pamięci byś mógł z ręką na sercu powiedzieć, że chociaż się starałeś je zapamiętać, a w skrajnie optymistycznym przypadku zrozumieć :)