Programowanie obiektowe Programowanie obiektowe ogólnie biorąc polega na operowaniu w programie pewnymi obiektami, które zawierają dane wraz z tzw. metodami, umożliwiającymi wykonywanie operacji na tych danych. Jedną z idei programowania obiek-towego jest maksymalne ograniczenie niekontrolowanego dostępu do pól obiektu przechowujących dane. Dostęp do pól powinien się odbywać wyłącznie przy pomocy metod zdefiniowanych w obiekcie (jest tzw. hermetyzacja). Podstawowa różnica między programowaniem strukturalnym a obiektowym polega na tym, że przy wywołaniu funkcji są przekazy-wane dane, przy programowaniu obiektowym natomiast wywołuje się metody, które operują na odpowiednich danych zawartych w polach obiektu.
Deklaracja klasy:
class nazwa_klasy
{
public:
nazwa_klasy();
//konstruktor
~nazwa_klasy();
//destruktor
pola_klasy;
prototypy_metod_klasy();
private:
prototypy_metod_klasy();
pola_klasy;
};
• Deklaracje klasy umieszcza się zwyczajowo w plikach nagłówkowych z rozszerzeniem .h natomiast definicje metod klasy umieszcza się w plikach .cpp.
• Podczas deklaracji możliwe jest zagnieżdżanie obiektów polegające na korzystaniu w danej klasie z obiektów innej klasy.
• Obiekty typu danej klasy tworzy się analogicznie jak zmienne innych typów.
Słowa kluczowe
public, private, protected.
• Pola i metody umieszczone po słowie public dostępne są bezpośrednio w całym programie, dostęp uzyskuje się za pomocą operatora kropki (dla obiektów tworzonych statycznie).
• Słowo private ogranicza bezpośredni dostęp do pól i metod umieszczonych po nim tylko do wnętrza danego obiektu, gdzie zostały zadeklarowane.
• Słowo protected umożliwia bezpośredni dostęp do pól i metod w klasie gdzie zostały zadeklarowane jak rów-nież w klasach pochodnych od danej klasy podczas korzystania z własności dziedziczenia.
Konstruktory i destruktory – są to specjalne metody wywoływane podczas tworzenia obiektu oraz jego usuwania.
• konstruktor nie może posiadać definicji zwracanego typu
• konstruktor bez żadnych argumentów jest konstruktorem domyślnym
• nazwa destruktora musi być poprzedzona znakiem tyldy
• destruktor nie posiada definicji typu zwracanego oraz nie przyjmuje żadnych argumentów
• nazwy konstruktora i destruktora muszą być zgodne z nazwą klasy
• konstruktor i destruktor muszą być zadeklarowane w części publicznej klasy
• domyślny konstruktor może być przeciążany
Przykład deklaracji klasy: class pojazd
{
int rocznik;
char nazwa[15];
protected:
int rocznik1;
public:
pojazd();
pojazd(int r, char *n);
void ustaw_r (int r);
int pobierz_r ();
void ustaw_naz(char *n);
char *wyswietl_naz();
void ustaw_r1 (int r1)
{rocznik1=r1;};
int pojemnosc;
};
Definicje metod dla powyższej klasy: pojazd::pojazd()
{
rocznik=0;
strcpy(nazwa,"");
}
pojazd::pojazd(int r,char *n)
{
rocznik=r;
strcpy(nazwa,n);
}
void pojazd::ustaw_r(int r)
{
rocznik=r;
}
int pojazd::pobierz_r()
{
return rocznik;
}
void pojazd::ustaw_naz(char *n)
{
strcpy(nazwa,n);
}
char *pojazd::wyswietl_naz()
{
return nazwa;
}