Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Програмирование платформенно-независимых систем > Eclipse
Перезагрузить страницу Платформа Eclipse: технический обзор
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Ikshot Ikshot вне форума
Member
 
Сообщений: 451
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.06.2002
По умолчанию 12.09.2007, 17:49

Часть 2: CASE-study по использованию платформы Eclipse — инструменты Java-разработки

<div align='right'>"Смысл пудинга в том, что его можно съесть" — народная мудрость</div>

Как я заявлял в первой части: платформа Eclipse — это IDE для всего, чего угодно и ни для чего конкретного. Инструменты, заложенные в платформу позволяют использовать ее для разработки многих типов приложений. В этой части я предлагаю вам CASE-study по конкретному инструменту — инструменту Java-разработок (Java Development Tooling, далее JDT), добавляющего к платформе возможности для разработки Java-программ. JDT входит в состав Eclipse SDK.


Возможности JDT

Прежде чем рассматривать детали реализации JDT, неплохо был получить представление о том, для чего он вообще нужен и на что он похож с точки зрения пользователя. Внешний вид среды разработки в том виде, как она обычно выглядит при написании Java-программ показан на рисунке 3.

<div align='center'></div><div align='center'>Рисунок 3. Среда разработки в Java-перспективе.</div>

JDT добавляет к Eclipse характеристики полнофункционального Java IDE. Далее приведем краткий список этих характеристик:

Проекты Java:
  • Исходные файлы Java (*.java) располагаются традиционным образом в пакетах-директориях, находящихся в свою очередь в одной или нескольких директориях для исходных текстов.
  • Библиотеки JAR могут располагаться в том же проекте, где они требуются, в другом проекте или быть внешними по отношению к рабочему пространству.
  • Скомпилированные бинарные файлы (*.class) располагаются в пакетах-директориях, находящихся в отдельной директории для результирующих файлов.
  • В проект позволительно включать и другие файлы, например, документацию или ресурсы программы.
Просмотр Java-проектов:
  • Исследование Java-проекта производится в стандартных терминах Java: пакетах, типах, методах, полях и так далее.
  • Возможна сортировка классов по принципу принадлежности к пакету, по принадлежности к одному родителю, а также просмотр иерархии наследования.
Редактирование:
  • Редактор исходного кода Java.
  • Подсветка ключевых слов и синтаксиса (включая выделение комментариев Javadoc).
  • Группировщик кода (code outline), показывающий структуру объявления.
  • Ошибки компиляции показаны в виде замечаний на полях.
  • Границы фрагмента кода с объявлением показана в виде линии на полях.
  • Автоматическое форматирование кода.
  • При необходимости разрешения кода, можно открыть выбранный Java-элемент в редакторе.
  • Автозавершение кода предлагает корректные варианты имен методов, переменных и так далее.
  • Помощь по API показывает спецификацию Javadoc для выбранного элемента во всплывающем окне.
  • Имеется помощь по директивам импорта, автоматически добавляющая и организовывающая директивы импорта.
Рефакторинг:
  • Рефакторинг позволяет улучшить структуру кода без изменения его поведения.
  • Безопасное переименование методов, полей и так далее с обновлением ссылок на них.
  • Просмотр индивидуальных изменений возникших в процессе рефакторинга.
Поиск:
  • Поиск объявлений или ссылок на пакеты, классы, методы, поля и так далее.
  • Результаты поиска отображаются в отдельном представлении.
  • Результаты поиска отображаются напротив нужных Java-элементов.
  • Совпадения в тексте подсвечиваются.
Сравнение:
  • Структурное сравнение единиц компиляции Java показывает изменения, произведенные в каждом отдельном методе.
  • Возможна замена отдельных элементов Java их предыдущими версиями.
Компиляция:
  • JCK-совместимый компилятор.
  • Компилятор генерирует стандартные двоичные файлы *.class.
  • Инкрементальная компиляция.
  • Возможность компиляции вручную или автоматический запуск компиляции при каждом изменении исходного файла.
  • Проблемы компиляции отображаются в списке текущих задач.
Запуск:
  • Запуск Java-программ в отдельной виртуальной машине.
  • Поддержка различных типов виртуальных машин (выбираемых пользователем).
  • Консоль, предоставляющая потоки стандартного ввода, вывода и ошибок.
  • Страница мгновенного исполнения кода (scrapbook page).
Отладка:
  • Отладка Java-программ с помощью JPDA-совместимой виртуальной машины Java.
  • Просмотр потоков и состояния стека.
  • Установка точек прерывания и пошаговый проход по коду методов.
  • Наблюдение за состоянием полей и локальных переменных, а также изменение их значений.
  • Вычисление выражений с учетом состояния стека.
  • Динамическая перезагрузка классов без перезапуска всего приложений (при наличие такой поддержки в виртуальной машине).
Реализация JDT

JDT реализован в виде группы плагинов: пользовательский интерфейс (User Interface, далее UI) находится в плагине UI, а весь код не связанный в интерфейсом — в отдельном плагине. Такое разделение позволяет использовать основную функциональность JDT конфигурациями Eclipse, в которых графический пользовательский интерфейс отсутствует, а также другими инструментами Java, имеющими свой пользовательский интерфейс и не нуждающихся в JDT UI.

На рисунке 4 показаны основные точки соединения JDT и платформы.

<div align='center'></div><div align='center'>Рисунок 4. Ключевые точки соединения между JDT и платформой.</div>


Проекты Java

На уровне рабочего пространства JDT определяет специальную иконку (Java Project Nature), которая отображается для маркировки Java-проектов. К каждому Java-проекту прикрепляет специальный файл (.classpath), содержащий информацию, специфическую для проекта. Эта информация включает пути к папкам с исходными файлами, пути к прекомпилированным JAR-библиотекам и путь к папке с результирующими файлами.


Компилятор

JDT определяет привязку каждого Java-проекта к инкрементальному компоновщику проекта, вызывающему встроенный компилятор Java (вышедшая в марте 2003 года версия 2.1 Eclipse SDK, содержала компилятор совместимый с JCK версий 1.3 и 1.4).

В случае первоначальной или полной компоновки компилятор обнаруживает все исходные файлы проекта в указанных директориях и переводит их в соответствующие двоичные файлы классов в выходной директории проекта. JDT определяет специальный маркер для проблем, связанных с Java. При обнаружении ошибок компилятор помечает этим маркером проблемные файлы. Проект содержит информацию о том, какие JAR-библиотеки ему требуются. Это позволяет JDT ориентироваться на разные конфигурации времени выполнения, например, CLDC, J2SE или J2EE.

При обнаружении каждого исходного файла компилятор добавляет информацию в граф зависимостей, хранящийся в памяти. Это позволяет организовывать последующие компоновки проекта более эффективно. Пошаговый компоновщик проекта сохраняет дерево ресурсов с изменениями, внесенными после последней компоновки. При последующем вызове компоновщика это дерево используется для построения минимального списка файлов, которые должны быть перекомпилированы вследствие их изменения, добавления или удаления. Далее компоновщик использует свой граф зависимостей для расширения списка необходимых к перекомпиляции файлов. После этого компилятор удаляет устаревшие файлы классов и маркеры ошибок и компилирует только нужное подмножество исходных файлов. JDT участвует в сохранении состояния рабочего пространства, записывая на жесткий диск граф зависимостей, иначе при следующей сессии потребовалась бы полная компоновка только для того, чтобы заново его построить. Такая инкрементальная стратегия позволяет JDT достаточно часто производить компоновку, например, после сохранения изменений исходного файла, даже для проектов содержащих сотни или тысячи файлов.


Модель

Java-модель предоставляет API для навигации по дереву элементов Java. Дерево элементов позволяет рассматривать проект в терминах типов элементов, специфичных для Java:
  • Корни пакетов соответствуют директориям с исходными файлами и JAR-библиотеками.
  • Единицы компиляции и двоичные классы соответствуют индивидуальным исходным (.java) и скомпилированным (.class) файлам.
  • Внутри единиц компиляции и классов встречаются различные типы объявлений:
    • Пакеты.
    • Директивы импорта.
    • Объявления классов и интерфейсов.
    • Объявления методов и конструкторов.
    • Объявление полей.
    • Объявление инициализаторов.
Для большинства инструментов Java (включая Java UI) навигация и взаимодействие с элементами проекта с помощью модели Java более удобны, чем навигация по соответствующим ресурсам. Элементы Java представлены адаптивными объектами, так что другие компании могут расширять их функциональность.

Дерево элементов определяется файлом .classpath проекта и его ресурсами. Нет смысла держать дерево элементов в памяти, поскольку оно на порядок больше, чем дерево ресурсов и потребует чтения и разбора всех исходных файлов для своего построения. Вместо этого дерево элементов строится по частям и только по необходимости. Компилятор разбирает отдельные единицы компиляции для извлечения структуры объявлений. Дерево элементов содержит небольшой внутренний кэш для хранения информации о недавно разобранных единицах. Дерево элементов следит за изменениями в ресурсах проекта, для своевременного удаления информации об устаревших единицах компиляции в случае удаления или модификации соответствующих файлов.

Такая система работы с кэшем отлично функционирует при простой навигации, но непригодна для масштабного поиска по дереву элементов или иных операций, требующих разбора большого числа файлов. Модель решает эту проблему, храня внутренние индексы на жестком диске. Индексы состоят из списка объявленных имен или имен, на которые производится ссылка, вместе с путем к исходному файлу, в котором присутствует соответствующее объявление или ссылка. Такие индексы могут эффективно использоваться для обнаружения файлов, в которых встречается ходя бы одно вхождение нужного имени. Далее при необходимости уточнений (например, при необходимости выяснения номера строки с вхождением), можно разобрать найденные файлы. Модель следит за изменением ресурсов, поддерживая актуальным список файлов, требующих индексирования. Сама работа по индексированию файлов производится в отдельном потоке с низким приоритетом.


Java UI

JDT UI определяет перспективу Java для пользователей, разрабатывающих Java-код. Эта перспектива включается (помимо прочего) следующие элементы:
  • Представление пакетов
  • Представление иерархии типов
  • Действия для создания элементов Java
  • Редактор Java и группировщик кода
Представление пакетов, показывающее единицы компиляции внутри проекта или файлы классов внутри JAR-библиотек, построено на основе структурных линий (как и стандартное представление ресурсов). Элементы и связи между ними, показанные в дереве, напрямую поступают из Java-модели.

Представление иерархии типов группирует классы и интерфейсы на основе связей типа предок-потомок (суперкласс-подкласс), определенных в языке Java. Иерархия типов строится на основе последовательности индексированных поисков модели Java в сочетании с разбором отдельных единиц компиляции для извлечения имен классов-предков. Элементы, показанные в дереве, напрямую поступают из Java-модели.

Действия заложенные в Java-перспективу включают вызовы мастеров создания нового проекта, пакета, класса и интерфейса. Эти операции взаимодействуют с моделью Java.

Редактор Java зарегистрирован в качестве редактора по умолчанию для файлов *.java. Этот редактор взаимодействует со стандартным представлением группировки содержимого, предоставляя дерево элементов Java для текущей структуры объявлений. Редактор интенсивно использует JFace, предоставляя следующие возможности:
  • Декомпозиция — документ разделен на фрагменты Java-кода и комментариев Javadoc.
  • Подсветка ключевых слов и синтаксиса — цветовая подсветка применяется для выделения синтаксиса и ключевых слов.
  • Пометки на границе — на границе редактора отображаются линии, показывающие длину фрагмента с объявлением, маркеры ошибок и точки прерывания для отладки. Пометки автоматически изменяются в процессе редактирования текста.
  • Форматирование — управляет расстановкой отступов и пустых строк.
  • Помощь по коду — предоставляет варианты завершения имен классов, методов и так далее в текущей позиции документа с учетом контекста. Эта возможность поддерживается компилятором.
  • Представление группировщика кода — обновляет при редактировании текста. Это производится закулисно и периодически. Изменения в группировщике мгновенно отражаются в редакторе.
  • Редактирование на уровне метода — вместо показа всего исходного файла, редактор может отобразить только один метод (или любой другой объявленный элемент).
Операции по рефакторингу, например, "безопасное переименование" опираются на индексные операции поиска Java-модели, а также на специальную поддержку компилятора, позволяющую обнаруживать и переписывать части кода, зависящие от внесенных изменений.


Запуск и отладка

Среда включает меню и панель инструментов для запуска и отладки программ, а также включает перспективу отладки, более подходящую для этой задачи. Эта перспектива включает представление процессов, отображающее все запущенные и недавно завершенные процессы, а также представление консоли, позволяющее разработчикам взаимодействовать с выбранным процессом через его стандартные потоки ввода/вывода.

JDT предоставляет средства для запуска и отладки Java-программ. Для запуска программы в отдельном процессе запускается целевая виртуальная машина Java. JDT позволяет загружать разные типы виртуальных машин Java. Можно реализовать также поддержку запуска неохваченных JDT машин через использование точки соединения с JDT.

Страницы мгновенно исполняемого кода, представлены текстовыми файлами (*.jpage) и редактируются специальным редактором, который знает, как запускать на выполнение код из них. Это позволяет изменить оператор выражение или объявление в главном классе, перекомпилировать его, загрузить в работающую виртуальную машину, запустить его и получить строку с результатом. Эта возможность опирается на специальную поддержку компилятора, но не требует поддержки целевой Java VM.

Когда Java-программа запускается в режиме отладки, представление отладки показывает процессы, потоки и снимки стека. Когда отладчику требуется показать пользователю исходный код, он открывает редактор с помощью механизмов, предоставляемых средой. Во время пошагового выполнения отладчик сообщает редактору, какую строку кода нужно подсвечивать. Другие специфичные для отладки представления показывают список точек прерывания, значения переменных и полей объектов. Точки прерывания показаны в виде специальных маркеров.

Отладчик работает с любой JDPA-совместимой Java VM. Вычисление выражения Java в отладчике в контексте исполняемого метода производится интерпретатором выражений, проходящего по дереву синтаксиса выражения и выполняющего стандартные вызовы JDI. JDI обращается к целевой Java VM для доступа к полям и вызова методов. Если Java VM поддерживает динамическую перезагрузку классов, изменения вносимые в работающую программу немедленно вступают в силу, так что отладку можно продолжать без перезапуска всей программы. Отладчик следит за изменениями в ресурсах и знает, какие двоичные файлы должны быть перезагружены в целевую VM.


Эпилог

В этой статье приведен лишь краткий обзор того, как JDT предоставляет функциональность, позволяющую разрабатывать приложения Java на платформе Eclipse. Плагин Java UI интенсивно использует точки соединения со средой для встраивания в нее специальных редакторов, представлений, перспектив и действий, позволяющих пользователю работать с программами на Java в терминах, специфичных для Java. Компилятор Java и Java-модель могут программно вызываться другими инструментами с помощью API предоставляемого плагином JDT ядра. Кроме того, оба плагина предоставляют точки расширения, что бы другие инструменты могли расширять их предопределенными способами. JDT включен в Eclipse SDK. Более подробную информацию о нем можно обнаружить в Java Development User Guide и JDT Plug-in Developer Guide, доступных в качестве онлайновой помощи к Eclipse SDK.

Copyright © IBM Corporation 2001, 2003 все права защищены.

Java является торговой маркой или зарегистрированной торговой маркой Sun Microsystems, Inc. в Соединенных Штатах Америки и других странах.

Windows и ActiveX являются торговыми марками или зарегистрированными торговыми марками Microsoft Corporation в Соединенных Штатах Америки и/или других странах.

Motif является зарегистрированной торговой маркой The Open Group в Соединенных Штатах Америки и других странах.

Linux является торговой маркой Linus Torvalds.

Остальные названия компаний или продуктов могут являться торговыми марками или сервисными марками других собственников.

<div align='right'>2003-02-19</div>
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
что значит Платформа/ОС: х86 Gergianers Любые вопросы от новичков 10 24.10.2011 12:46
платформа 1155 olaff Апгрейд 8 26.09.2011 15:54
Windows XP SP3 и платформа i7 Сергей 66 Windows XP 3 07.01.2011 14:41
Платформа мобилки Series 40 6th Edition и Full Screen Caller для S60 VAD_NG Java 0 24.12.2010 11:06
Платформа для поиска людей для организации OpenSource meerkat Lisp 5 31.10.2010 23:08
Платформа Mono как с ней работать DialSoft Общие вопросы программирования 2 15.01.2010 12:05
Веб камера в ноутбуке (платформа Aspire cерии 7110) siv-1 Драйвера 2 14.01.2010 02:55
Какая платформа у Sony Ericsson K750I Йа s.t.a.l.k.e.r. и ниипёт Другие мобильные платформы 1 09.06.2008 19:34
Новая игровая платформа Intel Тёмыч Процессоры 1 18.02.2008 17:29
Новая мобильная платформа AMD Puma Le}{a Процессоры 0 21.05.2007 02:07
Проект трейдинг платформа Anonymous Некоммерческие проекты 0 08.12.2003 19:21
Платформа .NET есть ли у нее будующее Garik Мысли вслух 11 27.11.2002 17:49



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов