Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Autor: Piotr Szawdyński
Kurs C++

Programowanie obiektowe - podstawowe pojęcia

[lekcja] Rozdział 25. Niniejszy rozdział opisuje podstawowe pojęcia występujące w programowaniu obiektowym. Pojęcia te są dostosowane do poziomu osób początkujących i mają na celu przede wszystkim umożliwienie poprawnego komunikowania się z czytelnikiem w kolejnych rozdziałach niniejszego kursu.
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?
C/C++
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:
C/C++
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:
C/C++
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:
C/C++
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ć :)
Poprzedni dokument Następny dokument
Przekazywanie argumentów funkcji przez referencję Wczytywanie tekstu - standardowy strumień wejścia