Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Аннотации для тупых


Автор: RockClimber 10.12.2009, 13:33
Я начну издалека, а потому надеюсь на ваше терпение...
В java есть JUnit - средство для unit-тестирования (кто не знает, что это такое, не обращайте внимания, в данном случае это не важно). Там есть несколько классов. Некоторое время назад кто-то из участников проекта freepascal "перевел" Junit на паскаль и назвал это fpcunit. Но это было давно и fpcunit представляет собой клон какой-то сильно устаревшей версии JUnit.
О JUnit я узнал от жены, которая работает тестировщиком и unit-тестированием тоже занимается. Она даже когда-то давно немного изучала java. Посмотрев на fpcunit, она сказала, что он скопирован с устаревшей версии JUnit и что она может мне помочь с переводом на fpc, только проблема оказалась в том, что в новых версиях JUnit вовсю используются аннотации, а в паскале такого просто нет. Она целый час мне объясняла, что такое аннотации, но я не понял абсолютно ничего. Либо она не так объясняла, либо я совсем тупой стал на старости лет.

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

Поэтому вопрос - может кто-нибудь на пальцах объяснить непосвященному, что это такое и как работает? Например, "вот такую-то задачу с помощью аннотациq можно решить так, а без них - только так, а вот такую вообще никак". А я уж потом как-нибудь соображу, как это лучше в fpc освоить.

Автор: fixxer 10.12.2009, 14:23
А что не устраивает в существующей версии? может использовать ее и не париться? Просто если язык не поддерживает метаинформацию, то повторить будет не так просто. Если говорить в простоте, аннотация это метаинформация проставляемая на объектах языка (классах, полях, методах) которая может быть считана другим классом или инструментом. Например, в старых версиях JUnit методы тестового класса должны были нахываться testXXX, чтобы JUnit знал что запускать. Сейчас метод может называться как угодно, достаточно пометить его аннотацией @Test и по ней JUnit определит, что это тестовый метод.

Добавлено через 7 минут и 22 секунды
насколько я знаю в Delphi 2010 появились кастомные аттрибуты.  Это аналог аннотаций в Java. Если fpc поддерживает этот диалект object pascal, то все есть из коробки.

Автор: RockClimber 11.12.2009, 12:45
Про custom attributes почитал, спасибо за наводку. Теперь пойду разбираться, что из этого есть в fpc.

Цитата(fixxer @  10.12.2009,  14:23 Найти цитируемый пост)
А что не устраивает в существующей версии?

В текущей версии все устраивает. Попробую разобраться, что появилось нового - ведь если оно появляется, значит, кому-нибудь нужно. А значит, и мне тоже может пригодиться.

Автор: LSD 11.12.2009, 14:09
Аннотации в Java бывают 3-х retention-ов: существую только на уровне исходников, на уровне классов и обрабатываются на уровне JVM, на уровне классов и доступны всем. Так вот аннотации на уровне исходников это аналог директив компилятора
Код

{$А+}

Хотя в JUnit используется другие типы.

Автор: Samotnik 11.12.2009, 19:39
Аннотации представляют собой метаданные, которые могут добавлятся в исходный код программы и только косвенно влияют на нее, но могут использоваться в процессе анализа кода, компиляции и во время выполнения.

Вот основные варианты использования аннтоаций:

    * предоставлять необходимую информацию для компилятора;
    * предоставлять метаданные различным инструментам для генерации кода, конфигураций и т.д.;
    * использоваться в коде во время выполнения програмного кода (reflection).

Аннотации могут быть применены, например, к декларациям классов, полей, методов.

RockClimber, вобщем, если по-простому. Это метаданные, которые используются во время генерации кода, выполнения, компиляции. 
Проще обьяснить, имхо нельзя. 

Цитата(RockClimber @  10.12.2009,  13:33 Найти цитируемый пост)
Например, "вот такую-то задачу с помощью аннотациq можно решить так, а без них - только так, а вот такую вообще никак". 

такого не бывает smile  Аннотация не влияет на то можно решить задачу или нельзя smile без нее можно и с ней можно. Аннотация - вообще не решает задачи smile 
как пример. 

Код

function имя_функции (int x, int y, int z) 
{
    z = x+y;
}


и

Код

@Deprecated
function имя_функции (int x, int y, int z) 
{
    z = x+y;
}


Вот два куска неизвестного кода на неизвестном языке  ))))   Суть :  в первом - просто описание какой-то функции, которая что-то делает с переменными. Во втором случае она же, только перед ней странное слово с собачкой - @Deprecated 
Это слово говорит разработчику  о том, что эта функция Deprecated - устаревшая, и ее лучше не использовать, т.к. есть аналог ей, но работает лучше smile 
как-то так.   smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)