Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
4-1076991892
Unax
2004-02-17 07:24
2004.04.25
Запрет обработки сообщений окну


8-1074421391
DoMenos
2004-01-18 13:23
2004.04.25
Статьи по Direct3D


14-1081092670
RealRascal
2004-04-04 19:31
2004.04.25
Как не вызывая ошибки узнать, что экземпляр класса создан


14-1080794119
McЅimm
2004-04-01 08:35
2004.04.25
Help !


6-1077115256
Svart
2004-02-18 17:40
2004.04.25
работа с SNMP





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский