Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Платформа Java - шаблоны, технологии, хитрости


выпуск 1

... Слово

Первый номер рассылки о технологиях Java и в нем две небольшие заметки:
Первая о настройке JavaDoc для Eclipse, а вторая о блоках в Smalltalk и анонимных классах в Java.
Во следующем номере: Использование шаблона Компоновщик для проверки корректности значений.

HOW-TO: Настройка JavaDoc в Eclipse

Проблема:

Необходимо, чтобы при Open External Javadoc использовалась документация, сохраненная на диске.

Решение:

1. Выбрать пункт меню Window >> Preferences
2. Выбрать пункт Java
3. Выбрать пункт Installed JREs
4. Выбрать нужную JRE
5. Нажать Edit
6. Выбрать rt.jar
7. Нажать javadoc location
8. Указать на директорию с документацией.

Комментарий:

Разработчикам Eclipse давно пора что-то с этим сделать. Любой, кто начинает пользоваться Eclipse, час возится с этим, затем выходит в Интернет и ищет решение проблемы. Буквально все.

Не все можно улучшить

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

Во время программирования на Smalltalk я без конца радовался такой замечательной вещи, как блок. При помощи блоков в Smalltalk реализовывалось практически все, причем намного более изящно, чем в других языках. Не буду приводить описание синтаксиса Smalltalk, вот лишь пара примеров использования блоков:

someCollection sort: [:a :b| a > b]. “Отсортировать коллекцию, используя >” .
someButton onClickDo: [:eventArg| Transcript show: eventArg point]. “При клипе по кнопке. Вывести в консоль координаты”
x > y ifTrue: [self doSomething]. “Выполнить, если x > y”

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

Программируя на Java, я думал: «Хорошо бы и здесь были блоки». Я думал, что это улучшит язык, сделает код проще. На самом деле это не так.

Действительно: В Smalltalk программист не задумывается о типах, так как он не указывает тип возвращаемого значения, типы аргументов. В Smalltalk главное – объект, тип вторичен.

В Java это не так. Здесь типы - не менее важны, чем объекты. Добрая половина всех шаблонов проектирования в Java основана на манипуляциях с интерфейсами. Поэтому если нам пришло в голову добавить блоки в Java, то необходимо было бы добавить типы, например, так: [Integer a: Integer b| a > b] : Boolean.

А теперь представим себе, что мы решили передать этот блок в некоторый метод, что написать в методе? Какой это тип? Если все блоки будут иметь Object, то единственным средством их применения будет reflection, что мало того, что медленно, так и убьет все изящество. Значит необходимо, чтобы блок умел поддерживать интерфейсы или ещё лучше наследовать классы. Вы догадались, что при этом получиться. Что-то вроде:
new AbstractAction ()
{
...
}

Да, на самом деле Java уже содержит средство, такое же, как и блоки, только созданное в условиях статической типизации. Причем это средство обладает даже большей общностью, так как блок – это частный случай анонимного класса:
new BlockSuperclass ()
{
Boolean value ()...
}

Не знаю, повлиял ли Smalltalk на проектировщиков языка, в тот момент, кода они решили добавить анонимные классы в Java или нет – это не так уж важно. Важно другое. То, что многие компании с огромной скоростью дополняют языки новыми возможностями, нарушая многие идеи этих языков, не делает их лучше.

2006

В избранное