Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];

Вниз

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

 
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!


 
Мефисто   (2006-08-19 22:24) [41]


> Kos[UFO] ©   (19.08.06 21:57) [40]



> То p будет указывать на метод QueryInterface, а не на VMT!


QueryInterface - а собственно откуда?


 
tesseract ©   (2006-08-19 22:37) [42]

> То p будет указывать на метод QueryInterface, а не на VMT!


Так, новая стадия флуда - почему класс в Делфи содержит  методы COM-объекта :-)


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

> p будет указывать на метод QueryInterface, а не на VMT!

Нет, именно на VMT.  А уж там по смещению ноль содержится  адрес метода QueryInterface. Косвенная у него будет адресация, не прямая.


 
McSimm ©   (2006-08-20 00:44) [44]


> Если класс это константа - то получается у меня на винчестере
> сидят 80 миллиардов таких классов. Я могу написать какую-
> то цыфру из 4 байт на бумаге и это тоже будет класс!
> Вы чествуете алогизм в ваших утверждениях?


Вы чувствуете демагогию в ваших словах ?

Любой класс можно рассматривать как указатель. Но
Не любой указатель это класс.

(а уж представить себе цифру из 4х байт я вообще затруднился :)


 
Германн ©   (2006-08-20 01:01) [45]


> McSimm ©   (20.08.06 00:44) [44]
>
> Любой класс можно рассматривать как указатель. Но
> Не любой указатель это класс.
>
> (а уж представить себе цифру из 4х байт я вообще затруднился
> :)

С первым утвеждением согласен на все 100! Имхо - одна из лучших формулировок в ветке.
Со вторым - категорически НЕТ! В оригинале то было "Я могу написать какую-то цыфру из 4 байт"! Найди одно отличие! :-)


 
Kos[UFO] ©   (2006-08-20 04:39) [46]

2McSimm & Германн:
Вы хотели сказать, что в определенный момент времени на определенной машине можно однозначно идентифицировать класс по некоему указателю. Все это прекрасно понимают. Но нельзя пользоваться этим для определения понятия класса при любом уровне абстракти.

В моих словах нет ни какой демагогии.

PS: McSimm, я говрю о определении слова


 
Sergey Masloff   (2006-08-20 09:12) [47]

Kos[UFO] ©   (20.08.06 04:39) [46]
>Но нельзя пользоваться этим для определения понятия класса при любом >уровне
Очень даже можно если мы говорим о РЕАЛИЗАЦИИ класса в Delphi. Насколько я понимаю, изначальный ваш спор был с человеком который считает себя хакером а не профессором-лингвистом. Вы б ему сразу сообщили что желаете спорить о интерпретации смысла слов а не о внутренних структурах реализующих абстрактные концепции. Он бы с вами и спорить не стал.


 
Anatoly Podgoretsky ©   (2006-08-20 11:59) [48]

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


 
Palladin ©   (2006-08-21 12:13) [49]


> Kos[UFO] ©


Есть понятие (теория) класса и реализация.

В теории класс конечно же не указатель.
В рамках реализации ООП в Delphi (да и не только в Delphi) сам класс является указателем.

По поводу разных точек зрения см. Юрий Зотов ©   (19.08.06 17:16) [17]



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

Форум: "Основная";
Текущий архив: 2006.10.01;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.6 MB
Время: 0.012 c
15-1157977985
Tab
2006-09-11 16:33
2006.10.01
Кто как делает Разграничение доступа в программе?


1-1156256825
Sergio77
2006-08-22 18:27
2006.10.01
из TWebbrowser в Memo


6-1147237414
hcsr
2006-05-10 09:03
2006.10.01
Как программно узнать соеденён ли комп с инетом


15-1157880735
ArtemESC
2006-09-10 13:32
2006.10.01
VISA


3-1154413284
Sir
2006-08-01 10:21
2006.10.01
Posgre SQL &amp; Delphi7





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский