C++: Klasy i obiekty
Programowanie obiektowe
(ang. object-oriented programming – OOP ) – metodologia tworzenia programów komputerowych, która definiuje programy za pomocą “obiektów” – elementów łączących stan (czyli dane) i zachowanie (czyli procedury, tu: metody).
Obiektowy program komputerowy wyrażony jest jako zbiór takich obiektów, komunikujących się pomiędzy sobą w celu wykonywania zadań. Podejście to różni się od tradycyjnego programowania proceduralnego, gdzie dane i procedury nie są ze sobą bezpośrednio związane.
Programowanie obiektowe ma ułatwić pisanie, konserwację i wielokrotne użycie programów lub ich fragmentów.
Język programowania obiektowego to typ języka programowania, w którym programista tworzy moduły programowe (obiekty zawierające dane i procedury manipulowania tymi danymi), a kod programu tworzy przez operowanie obiektami i tworzenie powiązań między nimi.
Język programowania strukturalnego (inaczej język algorytmiczny) to typ języka programowania, w którym programista, tworząc kod programu, nie operuje na obiektach, lecz tworzy kod programu linijka po linijce, pisząc procedury i funkcje.
Definicja klasy
class NaszaNazwaKlasy { ... // pola i metody składowe klasy };
Definicja klasy składa się ze słowa kluczowego class oraz nazwy klasy. Zasady tworzenia nazw klas są takie same jak dla zmiennych. Wewnątrz klasy znajdują się pola i metody klasy oraz ich specyfikatory dostępu.
Przykładowa definicja klasy:
class mojaKlasa { public: //pola i metody są publicznie dostępne (specyfikator dostępu) //deklaracja pól int liczbaCalkowita; float liczbaZmiennoprzecinkowa; //deklaracja metod int Metoda1(); void Metoda2(); }; //średnik na końcu
Specyfikatory dostępu
Służą one do kontroli możliwości dostępu do poszczególnych składowych klasy.
Public – składowe publiczne, dostępne wszędzie, również poza klasą
Private – składowe prywatne, widoczne jedynie wewnątrz samej klasy – dla jej własnych metod
Protected – zasady dostępu są takie same jak w przypadku specyfikatora Private, z jedną tylko różnicą – składowe oznaczone jako Protected będą widoczne w klasach pochodnych, jako Private, nie.
Jeśli w definicji klasy nie znajduje się żaden specyfikator dostępu, domyślnie stosowany jest Private
Przykład zastosowania:
class mojaKlasa { public: double liczba; char tablica[10]; void wypisz(); private: int abc; char znak; std::string napis; protected: unsigned wartosc; };
Pola klasy
Są to zmienne znajdujące się wewnątrz klasy, zgrupowane wewnątrz obiektu w jedną całość, przechowujące stan obiektu – wartości zmiennych. Są to najważniejsze elementy, do których dostęp zazwyczaj określamy jako prywatny (Private). Wartości pól klasy modyfikujemy bądź pobieramy za pomocą metod klasy.
Metody klasy
To nic innego jak funkcje będące częścią składową klasy. Dostęp do nich ograniczony jest odpowiednimi specyfikatorami.
Przykład:
class mojaKlasa { private : int TajnaLiczba; public : int TajemnicoZdradzacz() { return TajnaLiczba; } };
Obiekt
No dobrze, klasę mamy omówioną, jej pola, metody, specyfikatory dostępu. Czas naszą klasę ożywić, utworzyć jej tak zwaną instancję – czyli po prostu utworzyć jej obiekt.
Zapamiętać – obiekt – instancja klasy – stworzenie konkretnego wystąpienia danej klasy.
Przykładowo, mamy klasę Pies, jej obiektem będzie konkretne wystąpienie, np. Burek.
Jak tworzymy obiekt ?
Załóżmy, że mamy przykładową klasę, o znanej już nazwie: Pies.
class Pies(){ private: int wiek; int wysokosc; public: void szczekaj(); }
Obiekt tej klasy utworzymy w sposób następujący:
Pies Burek;
Wykonanie metody klasy przez nasz nowo utworzony obiekt:
Burek.szczekaj();
W kolejnym temacie porozmawiamy sobie o konstruktorach i destruktorach klasy.
A na zakończenie przykład ogólny przedstawiający wszystko to, co powyżej napisałem 😉
#include <cstdlib> #include <iostream> using namespace std; class Pies{ private: string kolor; int wzrost; public: void ustawKolor( string wybrany_kolor ){ kolor = wybrany_kolor; } void ustawWzrost( int wybrany_wzrost ){ wzrost = wybrany_wzrost; } string wypiszKolor(){ return kolor; } int wypiszWzrost(){ return wzrost; } void szczekaj(int ile){ cout<<endl; for (int i=0; i<ile; i++){ cout<<"Hau "; } cout<<endl<<endl<<endl; } }; int main(int argc, char *argv[]) { Pies Burek; Burek.ustawKolor("Czarny"); Burek.ustawWzrost( 90 ); string kolor = Burek.wypiszKolor(); int wzrost = Burek.wypiszWzrost(); cout<<endl<<"Kolor: "<<kolor<<", Wzrost: "<<wzrost<<endl<<endl; Burek.szczekaj(5); system("PAUSE"); return EXIT_SUCCESS; }
Efekt działania programu: