Programowanie w języku Delphi

TObject

  • 2008-09-10 01:27
  • 12 komentarzy
  • 3114 odsłon
  • Oceń ten tekst jako pierwszy
TObject to klasa w Delphi będąca najwyżej w hierarchii dziedziczenia. Jest zatem klasą bazową dla wszystkich innych klas. Dlatego też zdefiniowanie klasy w taki oto sposób:

TMyClass = class(TObject)
      procedure MyProcedure(arg: Int64);
end;

jest równoważne z:

TMyClass = class {  <- Nie ma zdefiniowanego dziedziczenia!!! }
      procedure MyProcedure(arg: Int64);
end;


W klasie TObject zdefiniowany jest podstawowy zestaw metod służących między innymi do:
  • tworzenia, destrukcji i inicjalizacji obiektów (np. konstruktor Create, destruktor Destroy, Free)
  • introspekcji w czasie działania programu, tzw. RTTI (np. ClassType, ClassInfo, ClassName)
  • obsługi wyjątków i komunikatów (np. Dispatch, SafeCallException)
Po dokładny opis metod odsyłam do dokumentacji Delphi lub freepascala.
Pewna część tych metod nie wykonuje żadnych operacji, lecz służy za wskazówkę, jaką funkcjonalność mogą implementować klasy dziedziczące z TObject (np. procedura DefaultHandlerStr).

Jakie są korzyści z posiadania takiej klasy - jednego wspólnego korzenia hierarchii dziedziczenia? Pierwsze co przychodzi na myśl to zastosowania rodem z Javy, czyli generyczne kontenery oraz funkcje wykonujące różne operacje w zależności od typu obiektu. Ponieważ każdy obiekt dziedziczy z TObject, można na niego wskazać wskaźnikiem lub referencją do TObject. Zatem do procedury o następującej sygnaturze:

procedure jakas (var argument: TObject);

można przekazać argument dowolnej klasy.


Zobacz też:

12 komentarzy

pootek 2008-09-10 01:31

Mam nadzieję, iż autor mi wybaczy, ale nie dało się tego czytać. Redundancja była wręcz porażająca. Opis poziomów dostępu czy słów kluczowych można znaleźć w innych artykułach. Postanowiłem przepisać artykuł po swojemu. Specjalistą od Delphi nie jestem, ale mam doświadczenie w innych językach.
Proszę o wybaczenie i poprawienie ewentualnych błędów/niedomówień.
Jeśli ktoś ma wystarczającą determinację, by opisać wszystkie metody i dane w klasie TObject, to byłoby super.

Potwoor_ 2008-07-13 02:24

niom... teraz niby coś w nim jest ale trochę pomieszane =] to w ogóle chyba powinno być w temacie klasy, czyż nie?

madmike 2008-07-12 13:49

Albo za duży upał, albo ten artykuł dalej nadaje się do napisania od nowa...

programik3 2008-07-12 10:02

No - jest poprawione po raz szósty :P

Potwoor_ 2008-07-12 00:07

uff.... tak ciutkę myślałem że wina braku zrozumienia leży po mojej stronie ale jednak nie =] ktoś to potrafi na ludzki przełożyć ?

Misiekd 2008-07-11 22:59

"Dyrektywa reintroduce dziedziczy starą wersję procedury lub funkcji i w klasie która odziedziczyła starą wersję procedury lub funkcji jest przykrywana nową wersją ale instukcję w starej wersji procedury lub funkcji nadal są realizowane. Tym zapisem np. można odziedziczoną starą wersję procedury lub funkcji ją zmienić."

czy ty umiesz zdania z sensem składać czy tak piszesz co ci ślina na palce przyniesie?? Generalnie daj sobie spokój z poprawianiem tego, bo coraz gorsze bzdury piszesz

madmike 2008-07-11 22:06

klasą potomną?
<quote>właściwości są tylko i wyłącznie jest widoczna</quote>
<quote>efekt w modułach jest inna</quote>
<quote>Konstruktor i destruktor aby mógł poprawnie chodzić trzeba trzeba</quote>

może na razie dam sobie jednak spokój z czytaniem :>

programik3 2008-07-11 21:18

Eh... Jest funkcja ClassName - daję nazwę klasy.
Dobra poprawię po raz piąty xD

Dobra poprawiono - definicja jak należy :)

Potwoor_ 2008-07-11 00:55

- Nazwę klasy
- Rodzica klasy

pisał pierwszy autor a nie "pyszczek" =]
a z jakiej byś klasy nie dziedziczył to i tak dostaniesz flaki od TObject =]

a zamiast narzekać to coś popraw =]

brodny 2008-07-11 00:36

"Z klasy TObject można dziedziczyć:

- Nazwę klasy
- Rodzica klasy
- Konstruktor, Destruktor oraz ponad 20 procedur i funkcji"

Nie bardzo rozumiem. Co miałeś na myśli pisząc "dziedziczyć nazwę klasy"? Albo w jaki sposób z klasy TObject można dziedziczyć rodzica klasy? Jeśli masz na myśli klasę bazową, to mimo wszystko nadal nie rozumiem, gdyż TObject, jako klasa bazowa dla wszystkich innych klas w Delphi (ta na samym początku w hierarchii dziedziczenia) nie posiada swojej klasy bazowej. "Konstruktor, Destruktor oraz ponad 20 procedur i funkcji" można odziedziczyć również po każdej innej klasie, nie tylko TObject (z dokładnością do stałej).

Generalnie zgadzam się z Misiekd: bardziej do śmieci niż tu. Moim zdaniem wymaga porządnego poprawienia.

=] 2008-07-10 11:11

pochwali mnie ktoś? ( albo okrzyczy ? )

Misiekd 2008-07-09 19:42

nie komponent a klasa, nie najwyższy a bazowy, nie virtual a visual, nie są tworzone na podstawie a dziedziczą po,każda klasa ma destruktor i konstruktor, free to nie jest destruktor tylko metoda, no i można pobrać deczko więcej.

Ogólnie bardziej do śmieci niż tu