![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Класс объекта
Kos[UFO] © (2006-08-19 02:34:00)Господа программисты, с одним человеком который считает семя хакером у меня возник спор:
Что такое КЛАСС?
Этот уважаемый человек твердит, что класс это указатель. Тем самым опровергая, какое либо отношение методов и свойств класса к понятию класса. Что, по моему мнению, полный бред.
Я считаю:
Класс объекта или просто класс – это специальный тип данных, что описывает свойства и методы объекта. Можно и по другому, но точно не указатель.
Рассудите нас пожалуйста честно и справедливо.
Palladin (2006-08-21 12:13:00) [1]
> Kos[UFO] ©
Есть понятие (теория) класса и реализация.
В теории класс конечно же не указатель.
В рамках реализации ООП в Delphi (да и не только в Delphi) сам класс является указателем.
По поводу разных точек зрения см. Юрий Зотов © (19.08.06 17:16) [17]
Anatoly Podgoretsky (2006-08-20 11:59:00) [2]С хакером спорить не надо, для него все остальные ламеры.
Sergey Masloff (2006-08-20 09:12:00) [3]Kos[UFO] © (20.08.06 04:39) [46]
>Но нельзя пользоваться этим для определения понятия класса при любом >уровне
Очень даже можно если мы говорим о РЕАЛИЗАЦИИ класса в Delphi. Насколько я понимаю, изначальный ваш спор был с человеком который считает себя хакером а не профессором-лингвистом. Вы б ему сразу сообщили что желаете спорить о интерпретации смысла слов а не о внутренних структурах реализующих абстрактные концепции. Он бы с вами и спорить не стал.
Kos[UFO] (2006-08-20 04:39:00) [4]2McSimm & Германн:
Вы хотели сказать, что в определенный момент времени на определенной машине можно однозначно идентифицировать класс по некоему указателю. Все это прекрасно понимают. Но нельзя пользоваться этим для определения понятия класса при любом уровне абстракти.
В моих словах нет ни какой демагогии.
PS: McSimm, я говрю о определении слова
Германн (2006-08-20 01:01:00) [5]
> McSimm © (20.08.06 00:44) [44]
>
> Любой класс можно рассматривать как указатель. Но
> Не любой указатель это класс.
>
> (а уж представить себе цифру из 4х байт я вообще затруднился
> :)
С первым утвеждением согласен на все 100! Имхо - одна из лучших формулировок в ветке.
Со вторым - категорически НЕТ! В оригинале то было "Я могу написать какую-то цыфру из 4 байт"! Найди одно отличие! :-)
McSimm (2006-08-20 00:44:00) [6]
> Если класс это константа - то получается у меня на винчестере
> сидят 80 миллиардов таких классов. Я могу написать какую-
> то цыфру из 4 байт на бумаге и это тоже будет класс!
> Вы чествуете алогизм в ваших утверждениях?
Вы чувствуете демагогию в ваших словах ?
Любой класс можно рассматривать как указатель. Но
Не любой указатель это класс.
(а уж представить себе цифру из 4х байт я вообще затруднился :)
Юрий Зотов (2006-08-19 23:58:00) [7]> p будет указывать на метод QueryInterface, а не на VMT!
Нет, именно на VMT. А уж там по смещению ноль содержится адрес метода QueryInterface. Косвенная у него будет адресация, не прямая.
tesseract (2006-08-19 22:37:00) [8]> То p будет указывать на метод QueryInterface, а не на VMT!
Так, новая стадия флуда - почему класс в Делфи содержит методы COM-объекта :-)
Мефисто (2006-08-19 22:24:00) [9]
> Kos[UFO] © (19.08.06 21:57) [40]
> То p будет указывать на метод QueryInterface, а не на VMT!
QueryInterface - а собственно откуда?
Kos[UFO] (2006-08-19 21:57:00) [10]Пусик
>Класс - специальная структура, описывающая данные и правила работы с ними. >Никакого отношения к указателям.
Да здравствует царствованье разума!
default
>мы понимаем, что класс и указатель вещи не имеющие ничего общего
Очень здравое и логически правильное мнение
tesseract
>> идейно правильно говорить, что адрес VMT определяет класс,
>>
>А поля объекта, типа, значения не имеют? Без них VMT - кучка ненужного
> хлама, вспоминаем каноническое определение инкапсуляции.
Вот это я и пытался сказать хакеру.
Юрий Зотов
>класс - это константа, содержащая адрес VMT. То есть, указатель.
Если класс это константа - то получается у меня на винчестере сидят 80 миллиардов таких классов. Я могу написать какую-то цыфру из 4 байт на бумаге и это тоже будет класс!
Вы чествуете алогизм в ваших утверждениях?
Куда вы дели всю остальную информацию о классе?
И где вообще вы такое прочитали?
DprYg
>Так что, можно сделать вывод, что "класс" вообще - не указатель. А этот
> один человек вообще - не хакер.
:)
Джо
>> [17] Юрий Зотов © (19.08.06 17:16)
>> Физически, класс - это константа, содержащая адрес VMT.
>> То есть, указатель.
>Ну вот, хоть один человек со мной солидарен.
А с каких это пор физика не подлежит законам логики?
А если говорить о том, что можно получить взяв класс как адрес то:
var
aClass:TClass;
p:pointer;
begin
aClass:= form1.ClassType;
p:= TClass;
То p будет указывать на метод QueryInterface, а не на VMT!
default (2006-08-19 20:47:00) [11]я к тому, что между множеством указателей на VMT(и собственно VMT естественно) и множеством классов в приложении существует взаимно-однозначное отображение
одно определяет другое и наоборот
только поэтому можно говорить о указателе(или VMT напрямую) имею ввиду класс и наоборот, но идейно мы понимаем, что класс и указатель вещи не имеющие ничего общего
tesseract (2006-08-19 20:42:00) [12]> идейно правильно говорить, что адрес VMT определяет класс,
>
А поля объекта, типа, значения не имеют? Без них VMT - кучка ненужного хлама, вспоминаем каноническое определение инкапсуляции.
default (2006-08-19 20:37:00) [13]Юрий Зотов © (19.08.06 17:16) [17]
"класс - это константа, содержащая адрес VMT. То есть, указатель."
идейно правильно говорить, что адрес VMT определяет класс, а не является классом(хоть можно указатель на этом основании приравнять на практике к классу - это условность, хоть и нарушение идеи класса)
точно также можно говорить, что структура данных на которую указывает адрес VMT(то есть сама VMT) определяет класс и опять же на этом основании приравнять PNeedRecord(VMTPointer)^ к классу - на практике это можно, но идеологически это неверно
default (2006-08-19 20:25:00) [14]Юрий Зотов © (19.08.06 20:13) [32]
есть, но я не совсем о том
"сабжевый вопрос неразрешим потому, что изначально не был оговорен уровень абстракции. И каждый поэтому волен выбирать любой."
поэтому, на этом думаю и остановимся:)
tesseract © (19.08.06 20:14) [33]
фантазии вслух:)
Юрий Зотов (2006-08-19 20:22:00) [15]> Джо © (19.08.06 20:13) [31]
> изначально не был оговорен уровень абстракции.
Почему не был? Был. Речь идет о точке зрения хакера. А у этих ребят все вполне конкретно. Работа такая.
Машинный код - он ведь совсем не абстрактен, в нем все наши абстракции сводятся всего лишь к косвенной адресации.
Юрий Зотов (2006-08-19 20:17:00) [16]> default © (19.08.06 20:12) [30]
Низкоуровневые мехнизмы VCL примерно это и делают. Именно потому, что указатель - он и в африке указатель, хоть классом его называй, хоть как.
tesseract (2006-08-19 20:14:00) [17]> [30] default © (19.08.06 20:12)
Вы кому?
Юрий Зотов (2006-08-19 20:13:00) [18]> default © (19.08.06 20:02) [28]
> это уже не прямое назначение VMT
Какая разница? Хоть прямое, хоть кривое - VMT есть, и все. Такая реализация.
> матрица - поинтер! почему кто-то спросит, скажу так как указывает на
> область памяти где размещены элементы матрицы:)
type
TMatrix = array[10, 10] of integer;
Никакой памяти не выделяется, а идентификатор TMatrix никуда не указывает - то есть, никаким указателем не является.
type
TMyClass = class
end;
Выделяется память под VMT и другую информацию о классе, а идентификатор TMyClass является константой, содержащей адрес VMT - то есть, является указателем.
Есть разница, не так ли?
Джо (2006-08-19 20:13:00) [19]> [24] tesseract © (19.08.06 19:31)
> Класс - это вид записи, содержащий
> ссылку на методы работы с данными:-)
Вполне можно и так сказать.
А вообще, ИМХО, сабжевый вопрос неразрешим потому, что изначально не был оговорен уровень абстракции. И каждый поэтому волен выбирать любой. А уж степеней абстракции в этом вопросе немало, даже если ограничиться только Delphi & VCL :)
default (2006-08-19 20:12:00) [20]кстати, а если я разыменую указатель на класс? и буду работать с ним непосредственно, определив подходящий тип записи
это уже будет не класс? или тоже класс?(то тогда надо изменять ваше определение класса:))