Форум: "Потрепаться";
Текущий архив: 2004.04.25;
Скачать: [xml.tar.bz2];
Внизклассы и объекты Найти похожие ветки
← →
Игорь Шевченко © (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.57 MB
Время: 0.04 c