Budowa i wykorzystanie obiektów w języku C++
Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która definiuje programy za pomocą "obiektów" - elementów łączących stan (czyli dane) i zachowanie (czyli procedury, 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.
Obiekt to podstawowe pojęcie wchodzące w skład paradygmatu obiektowości w analizie i projektowaniu oprogramowania oraz w programowaniu.
Każdy obiekt ma trzy cechy:
• tożsamość, czyli cechę umożliwiającą jego identyfikację i odróżnienie od innych obiektów;
• stan, czyli aktualny stan danych składowych;
• zachowanie (ang. behaviour), czyli zestaw metod wykonujących operacje na tych danych.
Podstawowe założenia paradygmatu obiektowego
. Jeśli dzieje się to w czasie działania programu, to nazywa się to późnym wiązaniem lub wiązaniem dynamicznym. Niektóre języki udostępniają bardziej statyczne (w trakcie kompilacji) rozwiązania polimorfizmu - na przykład szablony i przeciążanie operatorów w C++.
DziedziczenieIstnieje pewna różnica zdań co do tego, jakie cechy metody czy języka programowania czynią je "orientowanymi obiektowo", jednak powszechnie uważa się, że najważniejsze są następujące cechy:
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. Procesy, funkcje lub metody mogą być również abstrahowane, a kiedy tak się dzieje, konieczne są rozmaite techniki rozszerzania abstrakcji.
Enkapsulacja
Czyli ukrywanie implementacji, hermetyzacja. Zapewnia, że obiekt nie może zmieniać stanu wewnętrznego innych obiektów w nieoczekiwany sposób. Tylko wewnętrzne metody obiektu są uprawnione do zmiany jego stanu. Każdy typ obiektu prezentuje innym obiektom swój "interfejs", który określa dopuszczalne metody współpracy. Pewne języki osłabiają to założenie, dopuszczając pewien poziom bezpośredniego (kontrolowanego) dostępu do "wnętrzności" obiektu. Ograniczają w ten sposób poziom abstrakcji.
Polimorfizm
Referencje i kolekcje obiektów mogą dotyczyć obiektów różnego typu, a wywołanie metody dla referencji spowoduje zachowanie odpowiednie dla pełnego typu obiektu wywoływanego
Porządkuje i wspomaga polimorfizm i enkapsulację dzięki umożliwieniu definiowania i tworzenia specjalizowanych obiektów na podstawie bardziej ogólnych. Dla obiektów specjalizowanych nie trzeba redefiniować całej funkcjonalności, lecz tylko tę, której nie ma obiekt ogólniejszy. W typowym przypadku powstają grupy obiektów zwane klasami, oraz grupy klas zwane drzewami. Odzwierciedlają one wspólne cechy obiektów.
Tworzenie obiektów
Zanim stworzymy jakiś obiekt, należy ustalić, czym ten obiekt będzie. W zależności od tego, czy chcemy stworzyć wirtualny samochód, czy samolot, należy określić dwie rzeczy:
Właściwości, jakie będzie miał ten obiekt i metody działania
Oprócz tego może istnieć wiele obiektów danego typu. Dlatego przed stworzeniem jakiegokolwiek obiektu należy przedstawić kompilatorowi jego projekt(wzorzec), czyli określić jego klasę. Klasa jest to byt programistyczny określający, jakie właściwości i metody będą miały obiekty, utworzone na jej podstawie.
Jednak projekt nie sprawi jeszcze, że dostaniemy gotowe obiekty, trzeba jeszcze obiekt utworzyć, co oznacza po prostu deklarację obiektu na podstawie pewnej klasy np.
NazwaKlasy MojObiekt;
Wygląda to jak deklaracja zwykłej zmiennej i tak jest w istocie. W C++ tworząc klasę definiuje się nowy typ danych. W C++ klasy deklaruje się w następujący sposób:
class NazwaKlasy{
public://właściwości i metody publiczne
//definiowanie pól
int poleInt;
float poleFloat;
//definiowanie metod
int Metoda1();
void Metoda2()};
Po słowie kluczowym class następuje nazwa naszej klasy (prawidła jej nazywania są takie same jak dla zmiennych).
W nawiasach klamrowych umieszcza się definicje wszystkich pól(czyli właściwości), oraz metod. Słowo kluczowe public: oznacza, że poniższe pola i metody są dostępne z zewnątrz (są publiczne).
Przykład
Stwórzmy klasę kostki do gry:
class Kostka{
public:
unsigned int wartosc;
unsigned int maks;
void Losuj();
};
Metoda - w programowaniu obiektowym jest to funkcja składowa klasy, której zadaniem jest działanie na rzecz określonych elementów danej klasy lub klas z nią spokrewnionych (zob. też dziedziczenie).
Metody wiąże się z klasami głównie po to, aby nie zaśmiecać kodu źródłowego i samego programu nadmierną ilością funkcji globalnych, które i tak nie zostaną użyte w celu innym, niż na rzecz konkretnej klasy. Inną ich zaletą jest to, że metoda wewnętrzna danej klasy ma dostęp do wszystkich składników tej klasy (także prywatnych i chronionych), bez konieczności deklarowania zaprzyjaźnienia. Metody mają też szerokie zastosowanie w programowaniu obiektowo orientowanym, w postaci tzw. funkcji polimorficznych (metod wirtualnych).