|
|
|
|
Чем
принципиально отличаются классы от объектов?
»»»
Palladin (28.07.00 12:39) Чем принципиально отличаются классы от
объектов?
»»» Диман - makaev@pisem.net (28.07.00 13:05) Объект -
это экземпляр класса.
»»» ASCRUS - ascrus@aport.ru (28.07.00
13:47) если ты имеешь ввиду под понятием обьекты: обьектыне типы, которые
описывались ранее в Object Pascal (ключевое слово object), то в Delphi class
- это то же самое плюс свойства, события и RTTI (то есть возможность делать
публицируемые свойства).
»»» Alexander - avolkov@infostroy.ru
(28.07.00 13:48) Согласен с предыдущим с точки зрения анализа. Еще -
объект отличается наличием данных (атрибутов или в терминологии Delphi
полей, свойств, указателей на обработчиков событий). Класс данных не имеет,
кроме реализованных в виде функций класса и предопределенных в TClass
атрибутов, например ClassName.
»»» SergSuper - sergsuper@mail.ru
(28.07.00 14:24) Не совсем так. Класс тоже ведь имеет данные. t=class
X:char end - X это что, не данные? Дело в следующем. Первоначально
появился object - что-то вроде record-а, но с процедурами, наследованием и
т.д. Использовались обычно объекты динамически, т.е. приходилось описывать
тип данных объект и тип ссылку на него. Чтобы создать нечто динамическое
надо было использовать функцию New. В итоге всё получалось несколько
громоздко. В Delphi решили работать с объектами по-другому, т.е.
объект(который class) это уже сразу ссылка, еще один тип объявлять не надо,
New тоже не надо вызывать. Все новые возможности реализовали только в
классах, а object оставили для совместимости.
Ну а принципиальные
различия между class и object, как видно из вышеописаного: 1. Класс это
ссылка 2. В классы реализованы новые возможности. Если не имеются в
виду паскалевские термины, то объект и класс это обычно одно и тоже, ну
может быть "объект - это экземпляр класса".
»»» Alexander -
avolkov@infostroy.ru (28.07.00 15:13) Да, тут нечего сказать. Super
поставил жирную точку в дискусси, не удосужившись понять о чем я
писал. Написав "t=class X: char; end;" Вы не сможете обратиться к данным
"t.X := #13;", поскольку память под эти "данные" не выделена. Понятно? Не
верите, можете попробовать. И вообще, прежде чем писать пример кода, неплохо
было бы его хотя-бы откомпилировать без ошибок.
»»» Диман -
makaev@pisem.net (28.07.00 15:38) Вот я и говорю: Объект - это экземпляр
класса. т.е. объект, это тотже класс, под который выделена память и с
которым уже можно работать.
»»» SergSuper - sergsuper@mail.ru
(28.07.00 16:02) Ну зачем же так. Очень я даже удосужился. А Ваш
последний мессаждь действительно мне непонятен, чего я не скрываю. Написав
t=class Вы объявляете тип и естественно не можете присвоить данные типу.
Естественно такое компилироваться не будет и я не пытался его компилировать.
Вам же не придет в голову писать "t=record X: char; end" и потом обращаться
к данным "t.X := #13;". Так что Ваши возражения не принимаю. Чтобы
окончательно снять вопросы приведу пример идентичного объекта реализованного
через object и через class
---object----- type to=object(TObject) x:byte end; po=^to; var o:po; begin o:=New(po,Init) o^.x=#13; Dispose(o,Done) end
---class----- type to=class(TObject) x:byte end; var o:to; begin o:=to.Create o.x=#13; o.Free end
Т.е.
когда пишется через object есть и объект(to) и ссылка на него (po). Когда
пишется через class есть только ссылка(to). Я думаю, что для Alexander-а
я ничего нового не написал, спор имеет чисто теоритический характер, но
может кому-то, кто не писал на Паскале 6 или 7, будет интересно.
»»» Palladin (31.07.00 17:40) Короче, я понял, что объекты в
Delphi еще можно использовать. И тут вопрос возник другой. На счет того что
имя класса сразу является указателем я понял, но тогда вопрос: можно ли
написать класс с нуля или без TObjecta не обойтись?
»»» ASCRUS -
ascrus@aport.ru (01.08.00 08:34) Да ты прав - даже если ты напишешь типа
to = class, то все равно это будет означать to = class(TObject). Естественно
это сделанно из-за RTTI
»»» SergSuper - sergsuper@mail.ru (01.08.00
09:07) Если использовать object - то будет без без TObject, чисто твой
объект. Если class - то прицепляется автоматом.
-= Из конференции
сайта MASTERS OF DELPHI
(http://delphi.mastak.com) =-
|
Copyright ©
"Мастера DELPHI" E-mail:
delphi@mastak.com
http://www.delphimaster.ru |
Источник получения информации: http://www.delphimaster.ru
|
|