Strona startowa Ludzie pragną czasami się rozstawać, żeby móc tęsknić, czekać i cieszyć się z powrotem.---------------{t_lucretius_carus} Lukrecjusz{t_lucretius_carus_desc}Wiedza o naturze i jej aspektach, jak rwnie| swoboda w poezji, czyni z tego przedstawiciela epikureizmu miBego towarzysza dla my[lcego czBowieka************************************************************************************************************************************************************************************** Changes made after 01/03/2004 5:11:34 PM*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** Changes made after 21/04/2004 9:00:00 AM*********************************************************************************************************************************************************************************{actor_effects_desc}WpBywy +1{aged_retainer_effects_desc}Zarzdzanie +1, +1 do osobistego bezpieczeDstwa (zwiksza szanse odkrycia i zapobiegnicia prbie zabjstwa){agriculturalist_effects_desc}+1 do produkcji rolniczej{animal_trader_effects_desc}WpBywy +1{architect_effects_desc}10% zni|ki do kosztw budowy, -1 do ndzy (zwiksza porzdek publiczny i wzrost populacji){armourer_effects_desc}+1 do morale dla wszystkich |oBnierzy na polu bitwy{artist_effects_desc}WpBywy +1, 10% zni|ki do kosztw Bapwki{astrologer_effects_desc}Dowodzenie +1, Zarzdzanie -1---------------{barbarian_slave} BarbarzyDski niewolnik{barbarian_slave_desc}"Drobna pamitka z podr|y za granicJeeli maonkowie nie maj obywatelstwa tego samego pastwa i nie maj miejsca zamieszkania w tym samym pastwie, to wwczas wedug niektrych umw waciwe s sdy obu...— A więc pan Jowett od miesiąca nie wyjeżdżał? Czy pani jest tego pewna?— Czy jestem pewna? Chyba...Tego samego wieczora wędrowny rękopis Szaleństwa Almayera został wypakowany i położony bez ostentacji na biurku w moim pokoju, w gościnnym pokoju, który —...— Nie zniosę tego dłużej! — zawołał cofając się, przewrócona zaś lampa zamigotała, spadła na brzeg lady sklepowej, odskoczyła, rozbiła...„Widzę, iż osiągnięto naukowy konsensus w sprawie tego, że jest jakieś globalne ocieplenie, poza tym większość naukowców uważa, iż emisje wytworzonego...124Odpowiadam wreszcie na drugie pytanie: Jaką korzyśćma z tego zły duch? Nie ma żadnej korzyści, on kieruje się tylko czystą perfidią... Tego samego jeszcze miesiąca, w którym objął rządy Pomorza, dnia 26-go Lipca 1295 roku, koronował się Przemysław w Gnieźnie na króla polskiego, za...30 Zagadnienie, dlaczego Platon wybrał trójkąty o takich kształtach, doczekało się wielu interpretacji, lecz omówienie tej kwestii wykracza poza ramy tego...Tego dnia skaza na saidinie dawała się wyjątkowo we znaki, gęsty, brudny olej, który sączył się z wszystkich porów skóry i plamił aż do kości...
 

Ludzie pragną czasami się rozstawać, żeby móc tęsknić, czekać i cieszyć się z powrotem.

tłum.).
Zamiast tego zaleca się jednak wywołanie metody Free():
FooObject.Free;

Metoda ta sprawdza wpierw, czy zmienna obiektowa (FooObject) nie zawiera pustego wskazania (NIL) —
jeżeli nie, następuje wywołanie metody Destroy() dla wskazywanego obiektu.


Ostrzeżenie
W C++ destruktor obiektu zadeklarowanego statycznie wywoływany jest automatycznie w momencie, gdy sterowanie opuszcza zasięg deklaracji tego obiektu; obiekty tworzone dynamicznie muszą być jednak zwalniane w sposób jawny, za pomocą słowa kluczowego delete. W Delphi nie ma obiektów statycznych, musimy więc jawnie zwalniać każdy egzemplarz obiektu, mając na uwadze dwa (z szeregu innych) uwarunkowania. Po pierwsze, zwalniany obiekt dokonuje jednoczesnego zwolnienia wszystkich innych obiektów, dla których jest właścicielem; po drugie — istnieją współdzielone przez kilka aplikacji obiekty, których wykorzystanie opiera się na tzw. liczniku odwołań ( reference counter), i które są zwalniane dopiero wówczas, gdy licznik ten osiągnie wartość 0 (czyli ostatnia z aplikacji zakończy swe operacje na obiekcie).
Przykładami takich współdzielonych obiektów są obiekty klas TInterfacedObject i TComObject.
Nasuwa się pytanie, skąd bierze się obecność konstruktora Create(), destruktora Destroy() i metody Free() w każdym typie obiektowym? Odpowiedź na to pytanie wskazuje jeszcze jedną różnicę między Turbo Pascalem a Delphi. W Delphi każdy obiekt bez wskazanej jawnie klasy bazowej jest traktowany jako typ pochodny klasy TObject, tak więc deklaracja
Type TFoo = class;
równoważna jest deklaracji
Type TFoo = class (TObject);
Wymienione metody — Create(), Destroy() i Free() są częścią klasy TObject — powrócimy za chwilę do tej kwestii.




Metody Metody są tym aspektem typu obiektowego, który pobudza obiekt do życia i decyduje o jego zachowaniu (trudno to powiedzieć o polach obiektu, które są co najwyżej „pożywką” dla metod). Przykładami metod są poznane przed chwilą konstruktory i destruktory.
Deklarowanie własnej metody przebiega dwuetapowo. Etap pierwszy to umieszczenie nagłówka metody wewnątrz deklaracji klasy, na przykład:
Type
TDyskoteka = class;
Taniec : Boolean;
Procedure ZatanczSambe;
End;
Konkretyzacja treści procedury odbywa się w drugim etapie, w części implementacyjnej modułu zawierającego deklarację klasy:
Procedure TDyskoteka.ZatanczSambe;
begin
Taniec := TRUE;
end;
Zwróć uwagę na to, iż właściwa nazwa procedury poprzedzona jest nazwą klasy, dla której ta procedura jest metodą. Podobną (kwalifikowaną) postać mają odwołania do metody — nazwa metody poprzedzona jest określeniem obiektu, na rzecz którego metoda ta jest wywoływana:
Var
Maxim : TDyskoteka;

........

Maxim.ZatanczSambe;

Podobnie jak w przypadku rekordów, odwołania kwalifikowane można zastąpić instrukcją with: with Maxim do
ZatanczSambe;
W treści metod danej klasy odwołania do pól jej obiektów nie mają postaci kwalifikowanej, gdyż treść metody jest dla tych pól zakresem ich widoczności (vide pole Taniec w metodzie TDyskoteka.ZatanczSambe).

Typy metod Metoda klasy w Object Pascalu może być metodą statyczną, wirtualną, dynamiczną i komunikacyjną. Oto przykład deklaracji metod każdego z wymienionych rodzajów
TFoo = class
Procedure Statyczna;
Procedure Wirtualna;virtual;
Procedure Dynamiczna;dynamic;
Procedure Komunikacyjna ( var M: TMessage ); message wm_SomeMessage;
End;
Metody statyczne Metoda, której deklaracja nie jest opatrzona żadnymi dodatkowymi klauzulami, jest metodą statyczną.
Funkcjonuje ona podobnie do „zwykłej” procedury lub funkcji, jej adres znany jest już w czasie kompilacji, a jej wywołanie przebiega bardzo efektywnie. Metody statyczne nie udostępniają jednak żadnych korzyści płynących z polimorfizmu.

Wskazówka
W przeciwieństwie do C++, klasy Object Pascala nie mogą posiadać statycznych pól. W Object Pascalu pole jest zawsze częścią egzemplarza klasy (czyli obiektu) — zmiana zawartości pola w jednym obiekcie nie ma wpływu na jego zawartość w innym; pole statyczne jest natomiast częścią klasy, wspólną dla wszystkich jej obiektów, ma więc dla nich charakter globalny. Symulacją (do pewnego stopnia) globalnych pól klasy może być w Object Pascalu wykorzystanie zmiennych globalnych modułu (w jego części prywatnej) — w treści metod zmienne takie zachowują się tak, jak zachowywałyby się pola statyczne (gdyby istniały)15.
Metody wirtualne Dziedziczenie wiąże się z możliwością przedefiniowywania ( overriding) metod obiektu. Oznacza to, że metoda o danej nazwie może mieć zupełnie różne działanie dla różnych klas (macierzystej i pochodnej). Innymi słowy, kompilator, znając nazwę metody, nie potrafi określić jej konkretnego adresu, gdy nie zna konkretnego obiektu (a właściwie jego typu), na rzecz którego jest ona aktywowana.