ROZDZIAŁ 1. PODSTAWY
Programowanie w Prologu polega na „definiowaniu” obiektów i określaniu wiążących ich relacji. Odmienne jednakże od tradycyjnego (tzn. występującego w klasycznym programowaniu obiektowym) jest pojmowanie obiektu.
1.2.1 Obiekt „klasyczny”
Pomimo, iż zajmujemy się Prologiem to aby uświadomić sobie co jest w nim tak odmiennego od innych języków, poświęćmy trochę miejsca na przypomnienie, czym jest ,klasyczny” obiekt, znany z takich języków jak np. C++ czy Java. W tym ujęciu obiekt to podstawowe pojęcie wchodzące w skład paradygmatu obiektowości w analizie i projektowaniu oprogramowania oraz w programowaniu. Jego koncepcja ma ułatwić cyfrową reprezentację realnych obiektów. Czym charakteryzują się rzeczywiste obiekty?
Obiekty jakie otaczją nas w rzeczywistym świecie posiadają dwie istotne cechy: stan w jakim w danej chwili się znajdują1 oraz zachowanie jakie dla nich jest typowe. I tak psy mają swój stan (kolor, wagę, są głodne lub najedzone...) oraz zachowanie (szczekanie, bieg, leżenie, merdanie ogonem...). Także telewizory mają swój stan (włączony lub wyłączony, głośność, numer programu...) oraz zachowanie (zmiana głośności lub programu, włączenie, wyłączenie...). Prawidłowe określenie stanu i zachowania ma bardzo duże znaczenie dla dalszego sposobu i komfortu „obsługi” obiektu w programie.
Obiekt w ujęciu języków obiektowych jest bardzo podobny do obiektów świata rzeczywistego: także posiada stany (cechy) i przypisane jemu „zachowanie”. Taki obiekt przechowuje swoje stany w zmiennych zwanych polami a wpływ na jego zachowanie mamy za pośrednictwem funkcji, nazywanych też metodami. Metody operując na polach dostarczają jednocześnie podstawowych mechanizmów komunikacji obiekt-obiekt. Zasada ukrywania stanów wewnętrznych obiektu i interakcja z nim tylko poprzez dobrze zdefiniowany zbiór metod znana jest pod nazwą enkapsulacji danych i stanowi fundamentalną zasadę programowania zorientowanego obiektowo.
Każdy utworzony przez programistę obiekt jest instancją pewnej klasy. W tym ujęciu, klasa zdefiniowana przez programistę, staje się nowym typem, który może być używany na równi z typami wbudowanymi. Jako przykład takiej klasy rozważmy klasę Punkt umożliwiającą utworzenie dowolnej ilości obiektów opisujących (różne) punkty.
class Punkt
{
private: double x; double y;
public:
Punkt(double x, double y); void Przesuń(Wektor w);
Jeśli ponad to założymy, że mamy dostępną klasę Wektor, wówczas staje się możliwe napisanie kodu jak poniżej
Punkt p(l.0,2.0);
Lub cechy jakie posiadają.