Форум: "Потрепаться";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Внизклассы и объекты Найти похожие ветки
← →
Kolyan © (2004-03-28 14:49) [0]Вот люди,я понять не могу, помогите, растолкуйте и/или приведите примеры. Чем класс от объекта отличается а?
← →
Kerk © (2004-03-28 14:53) [1]В одном смысле, объект - это экземпляр класса.
В другом смысле, объект - object, класс - class.
object - это что-то вроде record"а, который может
хранить кроме полей еще и процедуры и функции.
отличие class от object в том, что class создается
динамически.
надеюсь ничего не напутал. :)
← →
Opuhshii © (2004-03-28 15:15) [2]Вот смотри, бывают бутылки с пивом,
бутылки с пивом - это класс,
а вот та которую я сейчас пью есть конкретная реализация этого класса - объект.
← →
Opuhshii © (2004-03-28 15:17) [3]"конкретная реализация" читать как "экземпляр"
← →
Kolyan © (2004-03-28 15:22) [4]
> Opuhshii © (28.03.04 15:17) [3]
По моему понял.
Например:
Библиотека - это класс. А книга по Делфи - это объект или экземпляр класса.Так что ли?
← →
vuk © (2004-03-28 15:23) [5]>Так что ли?
Не, не так. Класс - человек, Kolyan - экземпляр. ;o)
← →
Opuhshii © (2004-03-28 15:30) [6]идея не в "бутылки с пивом", а вообще "бывают бутылки с пивом"
← →
Kolyan © (2004-03-28 15:33) [7]
> vuk © (28.03.04 15:23) [5]
ДА. ДА. Программеры - класс. А vuk - экземпляр. ;o)
← →
vuk © (2004-03-28 15:40) [8]Факт! :o)
← →
ИМХО © (2004-03-28 17:35) [9]Голубые - класс. Борька Моисеев - объект... или субъект :o)
← →
vuk © (2004-03-28 18:09) [10]Он тип.
← →
ИМХО © (2004-03-28 18:17) [11]Тот еще.
← →
Nous Mellon © (2004-03-28 18:34) [12]Неужто сложно в ФАК посмотреть.
Там тот же самый вопрос выяснял ныне замастеревший Palladin
http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988619105&n=19
← →
ИМХО © (2004-03-28 18:46) [13]Молодца, Мауз Нейлон! Достал скелет из шкафа.
← →
Nous Mellon © (2004-03-28 19:06) [14]
> Молодца, Мауз Нейлон! Достал скелет из шкафа.
Хоми ты чего? Такие знания не устаревают..
← →
TButton © (2004-03-28 19:09) [15]>Неужто сложно в ФАК посмотреть
да.
← →
Nous Mellon © (2004-03-28 19:27) [16]
> >Неужто сложно в ФАК посмотреть
> да.
Ну тогда это ни что иное как леность и тупость человека которому это сложно
← →
SergP © (2004-03-28 19:34) [17]>Opuhshii © (28.03.04 15:15)
>бутылки с пивом - это класс,
И чем их больше - тем класснее... :-)))
← →
AZ © (2004-03-28 21:11) [18]Лучше, чем ЮЗ, тебе никто не объяснит.
← →
Kolyan © (2004-03-29 06:04) [19]
> Nous Mellon © (28.03.04 18:34) [12]
Вот блин не увидел это в факах. Спасибо всем. Просто теперь я действительно понял чем они отличаются
← →
Alex Konshin © (2004-03-29 07:28) [20]Дайте и мне вставить свою копейку (цент?).
Класс - это метаданные. Он описывает как работать с объектами (экземплярами) этого класса и может еще содержать данные, которые общие для всех объектов этого класса (кстати, в Delphi это не поддерживается).
Объект же содержит указатель на класс (чтобы знать, к какому классу он принадлежит и как как с ним работать) и данные именно этого объекта.
Теперь, чтобы окончательно вас запутать :)
В некоторых языках (например, в Java, но в Delphi этого нет) класс как таковой тоже является объектом некого класса (в Java - Class), который имеет методы для работы с классами, например, можно узнать родительский класс или имя класса.
В Delphi же указатель на класс это особый тип - "class of". Реально это указатель на VMT (virtual method table) этого класса - таблице указателей на все виртуальные методы этого класса, а также некоторые другие данные (например RTTI - run-time type information).
Конструкция
var pclass : class of TObject;
описывает переменную, которой можно присвоить указатель на класс.
В модуле TypInfo есть куча функций для работы с этими указателями.
Теперь вернемся к обектам в Delphi. Физически это record, у которой в первых 4 байтах находится указатель на класс. Далее идут поля, которые описаны при определении класса (точнее, сначала поля, описанные у всех предков этого класса, а потом уже поля собственно этого класса).
Запутал? :)
← →
Думкин © (2004-03-29 07:43) [21]Не останавливайся, продолжай. %))
← →
MeF88 © (2004-03-29 08:04) [22]Блин, ну людям хелп открыть почитать влом... Дожили.
← →
Alex Konshin © (2004-03-29 08:08) [23]А куда уж дальше? Про RTTI вроде не спрашивали. Про структуру VMT, конечно, можно рассказать, но нужно ли?
← →
Думкин © (2004-03-29 08:15) [24]смайл не помог. умолкаю. :((
← →
Kolyan © (2004-03-29 09:08) [25]
> MeF88 © (29.03.04 08:04) [22]
> Блин, ну людям хелп открыть почитать влом... Дожили.
Если ты это адресуешь мне и говоришь о хелпе в Делфи, то я в Английском практичеки полный нуль.
← →
wal © (2004-03-29 10:00) [26]А можно я скажу?
Как НЕТ?
А я все равно скажу!
Вот ты сидишь на стуле. Стул - это объект. Стул собирали по чертежу. Чертеж - это класс. Внимание вопрос. Чем чертеж стула отличается от стула? Из чертежа можно еще один стул сделать (Стул := TСтул.Create), можно взять этот чертеж за основу, и нарисовать еще один чертеж (ТСуперСтул = class(ТСтул)). Можно, конечно и на чертеже сидеть, но как-то не удобно :) .
С уважением.
← →
Reindeer Moss Eater © (2004-03-29 10:01) [27]Все это хорошо.
Но в OP класс - это тоже объект.
← →
Alex Konshin © (2004-03-29 10:05) [28]Но в Delphi это не так.
← →
Reindeer Moss Eater © (2004-03-29 10:12) [29]Это так и в Делфи потому что в Delphi - Object Pascal
← →
Alex Konshin © (2004-03-29 10:16) [30]Не, ты не прав. В Delphi class это отдельный тип данных, но он не является объектом. Вот в Java - да, там именно так.
← →
Reindeer Moss Eater © (2004-03-29 10:17) [31]Нет это ты не прав. А в Delphi класс - это тоже объект.
← →
int64 (2004-03-29 10:18) [32]Alex Konshin © (29.03.04 07:28) [20]
> может еще содержать данные, которые общие для всех объектов
> этого класса (кстати, в Delphi это не поддерживается).
Можно я спрашу? Почему все вспоминают, что в Delphi это не поддерживается. И какой практический смысл.
Фобия на глобальные переменные и методы класса? :|
← →
Alex Konshin © (2004-03-29 10:46) [33]Reindeer Moss Eater © (29.03.04 10:17) [31]
Нет это ты не прав. А в Delphi класс - это тоже объект.
Нет ты, нет ты! Что за детство? Аргументы есть?
Ты знаешь методы у указателей на класс? И еще более важно: ты можешь достать указатель на класс этого "объекта"?
← →
Anatoly Podgoretsky © (2004-03-29 10:47) [34]Что бы далее запутать, в Дельфи есть две модели - классовая и объектовая. Например КОЛ построен по объектовой модели.
← →
Alex Konshin © (2004-03-29 10:54) [35]int64 (29.03.04 10:18) [32]
Потому как проще и понятнее просто объявить поле - статический член класса, чем городить конструкцию со статическими методами класса и глобальными переменными.
← →
Плохиш (2004-03-29 11:10) [36]
> int64 (29.03.04 10:18) [32]
> Потому как проще и понятнее просто объявить поле - статический
> член класса, чем городить конструкцию со статическими методами
> класса и глобальными переменными.
А можно это ещё раз по-русски и по-медленнее?
← →
Alex Konshin © (2004-03-29 11:12) [37]Хм, вроде и так по-русски. Ты просто читай медленнее. :)
А что именно неясно?
← →
Плохиш (2004-03-29 11:55) [38]>Alex Konshin © (29.03.04 11:12) [37]
Да вроде слова все русские :-(
Может на примере продемонстрируете?
← →
Igorek © (2004-03-29 12:01) [39]Класс - множество, обьект - его элемент.
Теперь ответьте в таком же духе:
- что такое метакласс (class of T...)
- что такое предок класса
- что такое наследник класса
- что такое класс имеющий общий базовый с данным
- что такое TObject в ObjectPascal
- что такое два обьекта одного класса с разными значениями полей
- -..- с одинаковыми значениями полей
Если ответы будут клевые - оформим образовательную статью с философским уклоном. :-)
← →
Игорь Шевченко © (2004-03-29 12:16) [40]
> В некоторых языках (например, в Java, но в Delphi этого
> нет) класс как таковой тоже является объектом некого класса
> (в Java - Class), который имеет методы для работы с классами,
> например, можно узнать родительский класс или имя класса.
AFAIK, в Delphi все классы являюся наследниками TObject, у которого определены методы
class function ClassName: ShortString;
class function ClassNameIs(const Name: string): Boolean;
class function ClassParent: TClass;
class function ClassInfo: Pointer;
class function InstanceSize: Longint;
class function InheritsFrom(AClass: TClass): Boolean;
и т.д.
Чем не аналог Class в Java ?
← →
Alex Konshin © (2004-03-29 12:29) [41]Игорь Шевченко © (29.03.04 12:16) [40]
Сурогат, а не аналог. Я не говорю, что с этим жить нельзя, но в Java это логичнее - там не изобретается новой сущности, как в Delphi. А где конструкторы классов? А где рефлексия (и не надо мне говорить про RTTI - как мы знаем, там есть далеко не все)?
И еще в Java классы - это объекты класса Class, в Delphi же - и не объекты вовсе.
← →
Vuk © (2004-03-29 15:43) [42]to Alex Konshin © (29.03.04 12:29) [41]:
>А где конструкторы классов?
Какие конструкторы и что они должны конструировать? Если будете отвечать, не забывайте, что язык другой.
>А где рефлексия?
Угу, RTTI не катит. Следующий вопрос, видимо, должен быть из серии "И почему вообще язык не Java а како-то другой?" Давайте я спрошу, например, где в Java свойства? :o)
>И еще в Java классы - это объекты класса Class, в Delphi же - и
>не объекты вовсе.
Между прочим, вполне логично, т.к. класс - это нечто стоящее над объектами, т.е. обычным объектом быть не может. Для обозначения сущностей, экземплярами которых являются классы, существует понятие метакласса. Вот как раз ссылки на класс в Delphi и являются аналогами метаклассов.
← →
Kolyan © (2004-03-29 17:37) [43]Дай программерам тему. :) . Я просил объяснить подробно и понятно. Сначала объяснили. Потом поперло...... Всё сложнее и сложнее, затем java приплели. Потом еще че-то, уже смотрю и рефлексии какие-то. Или у вас девиз сначала объяснить а потом запутать, чтоб человек, задавший вопрос в конце конференции ни фига не понял. Но все же спасибо. Не сочтите все слова за наезд, просто на самом деле интересно читать, так быстро у вас ход мыслей развился. Прикольные вы люди. :) . Ещё раз спасибо, вы все мне очень помогли
← →
Anatoly Podgoretsky © (2004-03-29 17:51) [44]Не зря старались :-)
← →
DiamondShark © (2004-03-29 17:52) [45]>>А где рефлексия (и не надо мне говорить про RTTI - как мы знаем, там есть далеко не все)?
А чего не хватает?
>>И еще в Java классы - это объекты класса Class, в Delphi же - и не объекты вовсе.
И что от этого страдает, кроме религиозных чувств?
← →
Юрий Зотов © (2004-03-29 17:56) [46]> Kolyan © (29.03.04 17:37) [43]
Все нормально, это просто у программеров рефлексия такая.
А ответ дан в [5] и в [7].
← →
DiamondShark © (2004-03-29 18:07) [47]
> это просто у программеров рефлексия такая
Угу. А конструкторы классов. ;-)
← →
Юрий Зотов © (2004-03-29 18:25) [48]> DiamondShark © (29.03.04 18:07) [47]
А конструкторы как раз классов. Как и все остальные методы. Поскольку принадлежат именно классам, а не их экземплярам.
:о)
← →
DiamondShark © (2004-03-29 19:04) [49]Вместо А должно быть И.
← →
Alex Konshin © (2004-03-30 04:23) [50]DiamondShark © (29.03.04 17:52) [45]
И чего вы, горячие финские парни, сразу про оскорбленные религиозные чувства вспоминаете?
Я просто описал, как это выглядит в другом языке, который создан позднее и, соответственно, учтен опыт предыдущих поколений. На мой взгляд это очевидно, что в Java это сделано логичней, но я же и сказал, что и в Delphi жить можно.
Про конструкторы классов: в Java ну не совсем уж прямо конструкторы, но создать динамически новый класс с новыми методами совсем не проблема, вызвать любой метод - тем более.
Property там нет, но в C#, который создан еще позднее, это уже есть, а в остальном он ну очень похож на Java.
И давайте не воспринимать это как наезд на Delphi, а как обзор различных подходов к реализации. :)
← →
Vuk © (2004-03-30 10:32) [51]to Alex Konshin © (30.03.04 04:23) [50]:
>но в C#, который создан еще позднее, это уже есть, а в остальном
>он ну очень похож на Java
Хм... Это не в C#. Это в .net. То есть теперь и в Delphi. :o)
← →
pasha_golub © (2004-03-30 11:34) [52]А шо такое рефлексия? Первый раз слышу, если честно.
← →
Reindeer Moss Eater © (2004-03-30 11:37) [53]Буквально - самокопание.
Здесь - получение в рантайм информации о классе из самого класса
← →
Alex Konshin © (2004-03-30 11:38) [54]Нет, это все-таки в C#.
.NET - это VM (также, как Java VM), она сама по себе никакого отношения к языкам не имеет. Существует куча компиляторов с разных языков, которые компилируют в .NET, вспомни, из чего состоит Visual Studio.
← →
Vuk © (2004-03-30 11:52) [55]to Alex Konshin © (30.03.04 11:38) [54]:
>Нет, это все-таки в C#.
Таки в .net, а не в C#. Это внутренние особенности CLR. А C# - один из языков, которые эти возможности используют.
>Существует куча компиляторов с разных языков, которые
>компилируют в .NET, вспомни, из чего состоит Visual Studio.
Я помню, но дела это не меняет.
← →
DiamondShark © (2004-03-30 11:56) [56]
> Alex Konshin © (30.03.04 04:23) [50]
> Про конструкторы классов: в Java ну не совсем уж прямо конструкторы,
> но создать динамически новый класс с новыми методами совсем
> не проблема, вызвать любой метод - тем более.
?!?!
Не видел жаву вблизи. Это что ж получается, можно самомодифицирующиеся программы писать? Уй-ё... Бедная среда исполнения. А иллюстрацию в коде можно?
← →
Alex Konshin © (2004-03-30 12:03) [57]DiamondShark © (30.03.04 11:56) [56]
Почему самомодифицирующиеся? Создал новый класс и добавил к нему методы, потом создал объекты этого класса. Где же самомодифицирующийся код?
Хотя, теоретически, ты имеешь возможность создать в памяти байткод и создать метод с этим байткодом.
← →
Alex Konshin © (2004-03-30 12:10) [58]Vuk © (30.03.04 11:52) [55] То, что в VM есть поддержка специфических особенностей каких-то языков, не значит, что все поддерживаемые языки автоматически будут использовать эту фичу. Например, можно написать компилятор с Java под .NET (я кстати, слышал про такие проекты, не знаю только, чем там дело кончилось), от этого в Java не появятся property. Кстати, есть компилятор Pascal под .NET, я даже знаю, кто его писал для MS.
Я его не смотрел, но я не удивлюсь, если там никакими property и не пахнет.
← →
Vuk © (2004-03-30 12:18) [59]to lex Konshin © (30.03.04 12:10) [58]:
>от этого в Java не появятся property
Правильно. Компилятор с языка реализует нужные ему возможности на основе CLR, но это не значит, что все, что доступно в CLR становится автоматически доступным в языке. Например в CLR есть именованные параметризованные свойства, в C# их нет, а в D8 Есть.
← →
DiamondShark © (2004-03-30 12:24) [60]
> Alex Konshin © (30.03.04 12:03) [57]
Вот со слов "добавил методы", пожалуйста, подробнее.
Откуда методы возьмутся?
← →
Alex Konshin © (2004-03-30 12:42) [61]Давай я тебе более-менее реальный пример приведу, зачем это бывает нужно и ты тогда поймешь, как это писать?
Представь, что тебе нужно написать нечто типа COM,Corba и т.п..
Тебе хочется, чтобы прокси объектов на удаленном хосте создавались автоматически. Вот ты и реализуешь некий механизм, который умеет создавать классы по требованию. Естественно, что методы у этих классов - просто некие заглушки, которые пересылают все параметры на другой хост, где находится настоящий объект и потом в обратном порядке получают результат.
Это одно из возможных применений этой технологии, может и несколько надуманое, но, надеюсь, ты понял как это может быть сделано.
Страницы: 1 2 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Память: 0.61 MB
Время: 0.033 c