Klasa = Obiekt ?

0

Witam serdecznie.

Ponieważ postanowiłem poznać Delphi kupiłem książkę pewnego autora (dla podpowiedzi powiem że jest on również autorem tego serwisu i jego imię zaczyna się na "A") "Kompedium programisty Delphi 7".

Czytanie szło sprawnie aż do strony 104 gdzie pojawia się rozdział "Klasy". Zaczyna się on od słów:

"Klasa jest obiektem". To sformułowanie często możesz napotkać podczas lektury tej książki ...

Według mnie (achtung - teraz jestem trochę złośliwy) w tych dwóch zdaniach tylko jedno jest prawdziwe - drugie.

Dopuszczam dwie możliwości:

  • Autor nie odróżnia pewnych elementarnych pojęć.
  • Delphi ma specyficzną definicję słów "Klasa", "Obiekt" - inną niż większość znanych mi realizacji paradygmatu programowania obiektowego, czyli: C++, Java, Smaltalk, UML, Haskell (Monady).

Jak to więc jest ?
Czy faktycznie w Delphi Klasa = Obiekt ?

Pozdrawiam gorąco

ps. Adam ja Ciebie naprawdę bardzo lubię (i podziwiam za ten serwis) ale niezależnie od tego - wprowadziłeś mnie w wielkie zakłopotanie.

0

Kwadrat jest prostokątem, a klasa jest obiektem.

<b>"jest" <> "=".</b>
0

Hm. Ja dotychczas sądziłem, że obiekt ma się do klasy mniej więcej tak, jak zmienna do typu zmiennej. Czyli że klasa to opis pewnej możliwej teoretycznie struktury, a obiekt - to jej praktyczna realizacja. Ja bym tak nie napisał jak autor, o którym mowa. No ale nie napisałem książki. Tylko współautorzyłem jeden rozdział, i to w innej książce i na inny temat, a w ogóle to jeszcze nie wyszła ;-)

0

Podejrzewam ze mozna slowo obiekt rozumiec na tyle abstrakcyjnie ze rowniez klasa bedzie w tym sensie obiektem , jednak mnie wystarcza takie rozumienie ja pq , to znaczy obiekt to zmienna "typu class" tajprosciej mowiac.

0

ale obiekt nie jest zmienną! obiekt też jest definicją typu - zresztą za dawnych czasów, kiedy jeszcze panował TP, to object oznaczało to samo, co teraz w Delphi class, dlatego ja bym się zgodził z Adamem i postawił znak równości pomiędzy nimi, z drobnymi zastrzeżeniami - formatka musi być zdefiniowana w klasie, a nie w obiekcie. i to IMHO wszystkie różnice. ktoś znajdzie więcej?

0

Coz... IMHO klasa != obiekt.
ŁF - ja sie nie zgodze z tym, ze obiekt to nie zmienna.
Zmienna to nic innego jak lokacja w pamieci. Obiekt to nic innego jak lokacja w pamieci. Wobec tego zmienna i obiekt to prawie to samo. Roznica jest w interpretacji tej zawartosci. I interpretacja to juz wlasnie klasa lub jakis inny typ. Klasa jest pojeciem abstrakcyjnym. Nie isnieje fizycznie. Obiekt tak. Moge sie odwolac do bajtu obiektu tak samo, jak do konkretnej zmiennej innego typu (np. Integer).
Jest jednak pewna rzecz, ktora w Delphi pozwala traktowac takze klasy jak obiekty: class of. Ale to juz troszke inna bajka.
Z "teologicznego" punktu widzenia Adam popelnil blad. Z praktycznego postapil slusznie... Dlaczego? Bo laikowi ciezko jest tlumaczyc, ze "klasa abstrakcji relacji...." :) Trzebaby zakladac, ze czytelnik ma teorie mnogosci opanowana w stopniu wiekszym niz podstawowy, a wiadomym jest, ze nie tylko absolwenci studiow matematycznych czytuja ksiazki Adama. Dlatego tez, nie wytykalbym tego jako ogromny blad.

0

Andrew: sugerujesz że Klasa jest szczególnym przypadkiem Obiektu ?

pq: w 100% publikacji (za wyjątkiem tej jednej książki) które czytałem właśnie tak jest to określone, czyli:
klasa - typ zmiennej
obiekt - zmienna

Niemniej nadal czekam na odpowiedzi - być może Delphi ma specyficzny sposób definiowania tych pojęć ?

w międzyczasie napisał Dryo ...
Właściwie jest to książka adresowana do wszystkich, ponadto Twoje wyjaśnienia są całkowicie czytelne nawet dla laika:
obiekt - zmienna, czyli ciąg bajtów
klasa - sposób interpretacji tych bajtów

Oczywiście większość z nas zdaje sobie sprawę, że jest to pewne uproszczenie, niemniej ...

niemniej pozdrawiam gorąco

0

Parę cytatów ze źródła podstawowego (help Delphi):

A class, or class type, defines a structure consisting of fields, methods, and properties. Instances of a class type are called objects.

Objects are dynamically allocated blocks of memory whose structure is determined by their class type.

A variable of a class type is actually a pointer that references an object. Hence more than one variable can refer to the same object.

A więc relacja typu do zmiennej odpowiada relacji klasy do wskaźnika obiektu, a nie klasy do obiektu. Jednak to ostatnie określenie, choć formalnie nieprecyzyjne, jest jednak z grubsza sensowne i wygodne. Tak jak mówimy, że zmienna S typu string zawiera np. 'srutututu', podczas gdy w rzeczywistości zawiera ona wyłącznie wskaźnik do obszaru pamięci, w którym zapisane jest 'srutututu'.

PS.Zacząłem pisać ok. 23:20, nie znając powyższych postów Dryobatesa i Kapustki.

0

Ja jako miś o bardzo małym rozumku zawsze uważałem że klasa jest obiektem, ale oczywiście nie każy dobiekt jest klasą - stąd to porównanie.

0

A więc relacja typu do zmiennej odpowiada relacji klasy do wskaźnika obiektu, a nie klasy do obiektu.

Jest to prawda w Delphi, jak rowniez w Javie, gdyz w obydwu jezykach istnieje automatyczna dereferencja (wsk^.pole i wsk.pole w Delphi jest rownowazne). W C++ nie jest to juz prawda :/ Niemniej wskazniki maja pewien typ, wiec klasa i tak mowi, jak interpretowac ten ciag bajtow wskazywany przez wskaznik. Bo wskaznik i tak jest tylko wskaznikiem i interpretacja jest taka sama :)

Tyle dyskusji nad tak malo istotym z punktu widzenia czytelnika problemem :)

0

(...) istnieje automatyczna dereferencja (wsk^.pole i wsk.pole w Delphi jest rownowazne). (...)

Aaaaaaaaaaaaaaaaaaaaaa to już wiem czemu jak pisałem Wsk^.Pole (tak jak się powinno pisać), a jak dla testów chciałem sprawdzić co będzie jak podam Wsk.Pole i ku memu zdziwieniu działało jednakowo.
Tak OT - luźna dygresja ;-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1