Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.01;
Скачать: CL | DM;

Вниз

Класс объекта   Найти похожие ветки 

 
Kos[UFO] ©   (2006-08-19 02:34) [0]

Господа программисты, с одним человеком который считает семя хакером у меня возник спор:
Что такое КЛАСС?

Этот уважаемый человек твердит, что класс это указатель. Тем самым опровергая, какое либо отношение методов и свойств класса к понятию класса. Что, по моему мнению, полный бред.

Я считаю:
Класс объекта или просто класс – это специальный тип данных, что описывает свойства и методы объекта. Можно и по другому, но точно не указатель.

Рассудите нас пожалуйста честно и справедливо.


 
KilkennyCat ©   (2006-08-19 03:09) [1]

Рассуждаю.
Честно и справедливо.
Вы - неправы.
Почему?
Потому что Вы не в состоянии:
1) Прочитать правила этого форума и задать вопрос в соответствующей ветке.
2) Найти определение термина в сети интернет.
3) Спорите с человеком, считающим себя хакером.


 
Джо ©   (2006-08-19 03:10) [2]

> Этот уважаемый человек твердит, что класс это указатель.

В общем, таки-да, в определенном смысле можно сказать, что это есть указатель.


 
Kos[UFO] ©   (2006-08-19 03:44) [3]

2KilkennyCat:
1) Почему не в том? Там написано: ОБЩИЕ ВОПРОСЫ. Разве это не общий вопрос? Очень даже в том форуме я задаю вопрос.

2) И это я в состоянии. Я нашел в трех местах! Но этот уважаемый человек настаивает на своем. Вот я и пишу сюда в надежде услышать здравые рассуждения от опытных программистов.

3) А почему нельзя спорить с такими людьми. Он же не на столько глуп, чтобы не воспринимать информацию. Что вы хотите сказать.

Кстати в справки BDS2006 написано:
A class, or class type, defines a structure consisting of fields, methods, and properties. Instances of a class type are called objects.

И ни как не указатель! Не так ли KilkennyCat?


 
KilkennyCat ©   (2006-08-19 04:00) [4]

> Не так ли KilkennyCat?


Так. По всем пунктам.


 
Джо ©   (2006-08-19 04:25) [5]

> Kos[UFO] ©  


 if TMyClass <> nil then
   ShowMessageFmt ("%x",[Integer(TMyClass)]);


 
Kos[UFO] ©   (2006-08-19 04:59) [6]

2Джо:
Ну да мы получим некий адрес. Я даже знаю на что этот указатель. Но это не дает права утверждать, что класс это указатель. Потому, что если принять это определение - то методы, свойства и другая информация о классе не имеют к нему отношения, что хотя бы определению противоречит. А весь класс это каких то 4 байта, получается:(

2KilkennyCat:
Это вопрос здравого рассуждения. А я не ламер, если вы пытаетесь сказать это.


 
KilkennyCat ©   (2006-08-19 08:37) [7]

> Kos[UFO] ©   (19.08.06 04:59)

> А я не ламер, если вы пытаетесь сказать это.


Вам показалось. В [4] я действительно согласился с Вами, по всем пунктам.


 
default ©   (2006-08-19 09:07) [8]

класс это чёртёж объекта
в соответствие с ним вылупляются в жизнь новые объекты

если смотреть уровень реализации, то, например, в том же Turbo Pascal
объекты представляются непосредственно, а не через ссылки на них


 
default ©   (2006-08-19 09:09) [9]

в C#, например, структуры являются некоторыми специальными классами представленными непосредственно(в состоянии unboxing)


 
DprYg ©   (2006-08-19 09:47) [10]

В отличие от BP7 в Delphi нет необходимости при объявлении класса создавать тип-указатель явно. Он неявно происходит от предка. А при ссылке на экземпляр Delphi просто автоматически разыменовывает указатель. Так что ответ на вопрос зависит от того, в каком смысле мы используем термин "класс".


 
DrPass ©   (2006-08-19 10:24) [11]


> Kos[UFO] ©  

Класс - это структура в памяти приложения, объединяющая код и данные, с которыми этот код работает. Никоим образом не указатель. Указателем является переменная, которая на этот класс указывает (сорри за тавтологию)


 
DprYg ©   (2006-08-19 11:22) [12]

Так что, можно сделать вывод, что "класс" вообще - не указатель. А этот один человек вообще - не хакер.
P.S. Кстати, я несколько раз встречался с разными определениями слова "хакер". Одни под ним подразумевают того, кто делает что-то очень плохое, другие - крутого программиста. Вот так :)


 
palva ©   (2006-08-19 11:31) [13]

DprYg ©   (19.08.06 11:22) [12]
Хакер это тот, кто использует класс (точнее экземпляр класса) как указатель, и при этом тащится, поскольку узнал про это недавно.


 
Плохиш ©   (2006-08-19 11:48) [14]


> Я нашел в трех местах! Но этот уважаемый человек настаивает
> на своем. Вот я и пишу сюда в надежде услышать здравые рассуждения
> от опытных программистов.

И ваш "хакер" сразу посыпит голову пеплом, убъётся головой ап стену, одновременно выстрелив себе в голову?


 
Пусик ©   (2006-08-19 13:47) [15]

Класс - специальная структура, описывающая данные и правила работы с ними. Никакого отношения к указателям.


> Kos[UFO] ©   (19.08.06 02:34)


"Один человек" (впрочем как и ты) путает объекты как экземпляры некого класса и сами классы.

При создании экземпляра класса также нет никакой необходимости создавать явную ссылку на этот экземпляр. Явная ссылка на объект(экземпляр класса) нужна только в том случае, если необходимо обращаться непосредственно к нему позже при выполнении программы.


 
Пусик ©   (2006-08-19 13:48) [16]


> И ваш "хакер" сразу посыпит голову пеплом, убъётся головой
> ап стену, одновременно выстрелив себе в голову?


Он просто удавится от твоего остроумия.


 
Юрий Зотов ©   (2006-08-19 17:16) [17]

Логически, класс - это тип. То есть, информация для компилятора.

Физически, класс - это константа, содержащая адрес VMT. То есть, указатель.

Если рассматривать класс именно с точки зрения хакера, для него гораздо важнее второе.

Для хакера класс - это прежде всего указатель, содержащий адрес почти недокументированной структуры, из которой, пользуясь почти недокументированными методами можно вытащить ценную и почти недокументированную низкоуровневую информацию.


 
Сервисный инженер   (2006-08-19 17:59) [18]

> [17] Юрий Зотов ©   (19.08.06 17:16)


ну а для меня класс, равно как и прочее, это просто намагниченность на блине винта, или пупырышки на компакте.


 
Юрий Зотов ©   (2006-08-19 18:04) [19]

> Сервисный инженер   (19.08.06 17:59) [18]

Действительно. Поэтому в следуюший раз, когда мы будем говорить о ВАШЕМ взгляде на класс - вот тогда и поговорим о намагниченности и пупырышках.

Но пока что, в ЭТОЙ ветке, мы говорим о другом. Сабж прочтите.


 
default ©   (2006-08-19 18:22) [20]

Юрий Зотов ©   (19.08.06 17:16) [17]
"Физически, класс - это константа, содержащая адрес VMT. "
в сабже указано про Delphi?
мы говорим вообщем
допустим иерархия классов имеет только обычные(неперекрываемые)
методы, VMT и не пахнет


 
Юрий Зотов ©   (2006-08-19 19:07) [21]

> default ©   (19.08.06 18:22) [20]

> в сабже указано про Delphi?

"Про Delphi" указано в названии форума. Этого мало?

> мы говорим вообщем

Можно, конечно, говорить и "вобщем", но в силу несколько различающихся объектных моделей и (особенно!) их реализаций (что, собственно, больше всего и интересует хакера, о точке зрения которого тут речь и идет), это будет разговор ни о чем. От участия в таком разговоре я, с вашего позволения, воздержусь.

> VMT и не пахнет

Загляните в System.pas - думаю, удивитесь. Оказывается, VMT - это далеко не только виртуальные методы. Так что она все равно есть - даже если нет ни одного виртуального метода. По крайней мере, в VCL это так.


 
Джо ©   (2006-08-19 19:11) [22]

> [17] Юрий Зотов ©   (19.08.06 17:16)
> Физически, класс - это константа, содержащая адрес VMT.
> То есть, указатель.

Ну вот, хоть один человек со мной солидарен.


 
Юрий Зотов ©   (2006-08-19 19:22) [23]

> Джо ©   (19.08.06 19:11) [22]

Думаю, что не один. Можно заглянуть в сырцы и убедиться, что как минимум, с нами солидарна еще и команда разработчиков Delphi. А как максимум - очевидно, все, кто знаком с реализацией ее объектной модели.

Так что "нас" - тыщи... правда, "их" все равно намного больше.
:о)


 
tesseract ©   (2006-08-19 19:31) [24]

> [18] Сервисный инженер   (19.08.06 17:59)

Если судить по посту, фиговый из Вас инженер. "Класс" во первых не на винте, а в памяти. Во-вторых запись на винчестере сильно "модулирована" и на "пупыршки" не тянет.


> [20] default ©   (19.08.06 18:22)


Ну надо бы было указать, что статических классов в Delphi не бывает.


> VMT и не пахнет


гм, давно хотел выяснить данный вопрос.


> [22] Джо ©   (19.08.06 19:11)


Я с другой стороны смотрю. Класс - это вид записи, содержащий ссылку на методы работы с данными:-)


 
Сервисный инженер   (2006-08-19 19:52) [25]

> [24] tesseract ©   (19.08.06 19:31)
> Если судить по посту, фиговый из Вас инженер. "Класс" во
> первых не на винте, а в памяти. Во-вторых запись на винчестере
> сильно "модулирована" и на "пупыршки" не тянет.


фиговый или нет - не Вам судить, учитывая количество информации, на основании которой Вы умудрились сделать вывод.

если Ваши классы усегда в памяти - поздравляю.
про пупырышки на винте вообще не говорилось, "пост прочтите" (с).
Как сильно модулирована запись - мне пофиг. Я упростил модель. Но Вы можете придраться, что и пупырышки совсем не пупырышки.


> [21] Юрий Зотов ©   (19.08.06 19:07)
> "Про Delphi" указано в названии форума. Этого мало?


Почему только мне тогда замечание?


 
Юрий Зотов ©   (2006-08-19 19:55) [26]

> Сервисный инженер   (19.08.06 19:52) [25]

> Почему только мне тогда замечание?

Извините, но Вы читаете невнимательно. Оно как раз не к Вам относилось.


 
tesseract ©   (2006-08-19 19:57) [27]

> если Ваши классы усегда в памяти - поздравляю.


Класс не находящийся в памяти, не существует, ибо не создан. Является частью файла, т.е. частью куска озаглавленной информации.


 
default ©   (2006-08-19 20:02) [28]

Юрий Зотов ©   (19.08.06 19:07) [21]
я знаю, что в VMT в Delphi напихано ещё всякой всячины и эта VMT есть потому и у всех
но я смотрел на VMT в её прямом назначении, обеспечить косвенный вызов методов(полиморфизм), а то что туда разработчики Delphi напихали это уже не прямое назначение VMT

а вообще я могу всё назвать указателем!(следую аналогии с классом)
могу сказать, что дерево - это 4 байтовый поинтер! матрица - поинтер! почему кто-то спросит, скажу так ак указывает на область памяти где размещены элементы матрицы:)и тд это идеологический бред


 
tesseract ©   (2006-08-19 20:05) [29]

> [28] default ©   (19.08.06 20:02)


Согласен, но не pointer, а область памяти.


 
default ©   (2006-08-19 20:12) [30]

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


 
Джо ©   (2006-08-19 20:13) [31]

> [24] tesseract ©   (19.08.06 19:31)
> Класс - это вид записи, содержащий
> ссылку на методы работы с данными:-)

Вполне можно и так сказать.
А вообще, ИМХО, сабжевый вопрос неразрешим потому, что изначально не был оговорен уровень абстракции. И каждый поэтому волен выбирать любой. А уж степеней абстракции в этом вопросе немало, даже если ограничиться только Delphi & VCL :)


 
Юрий Зотов ©   (2006-08-19 20:13) [32]

> default ©   (19.08.06 20:02) [28]

> это уже не прямое назначение VMT

Какая разница? Хоть прямое, хоть кривое - VMT есть, и все. Такая реализация.

> матрица - поинтер! почему кто-то спросит, скажу так как указывает на
> область памяти где размещены элементы матрицы:)

type
 TMatrix = array[10, 10] of integer;

Никакой памяти не выделяется, а идентификатор TMatrix никуда не указывает - то есть, никаким указателем не является.

type
 TMyClass = class
 end;

Выделяется память под VMT и другую информацию о классе, а идентификатор TMyClass является константой, содержащей адрес VMT - то есть, является указателем.

Есть разница, не так ли?


 
tesseract ©   (2006-08-19 20:14) [33]

> [30] default ©   (19.08.06 20:12)


Вы кому?


 
Юрий Зотов ©   (2006-08-19 20:17) [34]

> default ©   (19.08.06 20:12) [30]

Низкоуровневые мехнизмы VCL примерно это и делают. Именно потому, что указатель - он и в африке указатель, хоть классом его называй, хоть как.


 
Юрий Зотов ©   (2006-08-19 20:22) [35]

> Джо ©   (19.08.06 20:13) [31]

> изначально не был оговорен уровень абстракции.

Почему не был? Был. Речь идет о точке зрения хакера. А у этих ребят все вполне конкретно. Работа такая.

Машинный код - он ведь совсем не абстрактен, в нем все наши абстракции сводятся всего лишь к косвенной адресации.


 
default ©   (2006-08-19 20:25) [36]

Юрий Зотов ©   (19.08.06 20:13) [32]
есть, но я не совсем о том
"сабжевый вопрос неразрешим потому, что изначально не был оговорен уровень абстракции. И каждый поэтому волен выбирать любой."
поэтому, на этом думаю и остановимся:)
tesseract ©   (19.08.06 20:14) [33]
фантазии вслух:)


 
default ©   (2006-08-19 20:37) [37]

Юрий Зотов ©   (19.08.06 17:16) [17]
"класс - это константа, содержащая адрес VMT. То есть, указатель."

идейно правильно говорить, что адрес VMT определяет класс, а не является классом(хоть можно указатель на этом основании приравнять на практике к классу - это условность, хоть и нарушение идеи класса)
точно также можно говорить, что структура данных на которую указывает адрес VMT(то есть сама VMT) определяет класс и опять же на этом основании приравнять PNeedRecord(VMTPointer)^ к классу - на практике это можно, но идеологически это неверно


 
tesseract ©   (2006-08-19 20:42) [38]

> идейно правильно говорить, что адрес VMT определяет класс,
>


А поля объекта, типа, значения не имеют? Без них VMT -  кучка ненужного хлама, вспоминаем каноническое определение инкапсуляции.


 
default ©   (2006-08-19 20:47) [39]

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


 
Kos[UFO] ©   (2006-08-19 21:57) [40]

Пусик
>Класс - специальная структура, описывающая данные и правила работы с ними. >Никакого отношения к указателям.
Да здравствует царствованье разума!

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!



Страницы: 1 2 вся ветка

Текущий архив: 2006.10.01;
Скачать: CL | DM;

Наверх




Память: 0.59 MB
Время: 0.05 c
15-1158117896
Andrev V.
2006-09-13 07:24
2006.10.01
Совместимость Д5 и Д7


2-1158219824
Fostr
2006-09-14 11:43
2006.10.01
TADOTable


15-1157705486
Kolan
2006-09-08 12:51
2006.10.01
Дизайнерская задача :)


11-1133060395
Neiroman
2005-11-27 05:59
2006.10.01
Помогите чайнику!


2-1158216257
ГореПрограммер
2006-09-14 10:44
2006.10.01
Пересчет координат