Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Класс объекта


Страницы:   1 2 3

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]

кстати, а если я разыменую указатель на класс? и буду работать с ним непосредственно, определив подходящий тип записи
это уже будет не класс? или тоже класс?(то тогда надо изменять ваше определение класса:))


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо