Основные особенности языка Java
Начальным этапом является написание программы на языке высокого уровня (на языке Java). Далее, с помощью компилятора Java создается промежуточный код, или так называемый байт-код (bytecodes) для некой абстрактной виртуальной машины Java (Java Virtual Machine - JVM). Реальная же виртуальная машина устанавливается на той платформе, на которой предполагается выполнение написанной программы. Так, компания Sun совместно с рядом независимых разработчиков создала программную версию JVM для большинства известных платформ: Solaris, Linux, Mac OS, Windows (подробности см. http://java.sun.com). Когда на компьютер загружается файл, содержащий байт-коды (так называемый файл класса - class file), он интерпретируется виртуальной машиной Java на данном компьютере, которая считывает файл класса и выполняет команды, написанные на языке Java. Поскольку ядро виртуальной машины легко переносится с одного типа компьютера на другой, можно ожидать, что для каждого нового типа процессора и для каждой новой операционной системы вскоре появится своя реализация JVM. Поэтому Java-программа сможет работать на любой известной платформе, для которой существует реализация JVM.
Кроме отмеченного главного преимущества Java (переносимость), следует привести еще ряд достоинств этой технологии:
- Совершенство языка. Java сочетает в себе положительные стороны многих языков, особенно C++. Являясь принципиально объектно-ориентированным языком, Java "приучает" программиста мыслить современными программистскими парадигмами ООП.
- Безопасность. В частности, в Java устранены некоторые небезопасные языковые средства, такие как указатели в C. Хотя на первый взгляд кажется, что использование указателей дает некоторую гибкость и свободу для программиста, но на практике это часто приводит к мучительной отладке больших и сложных программ, особенно, когда программа что-то пишет по ошибочному адресу. Следует отметить также повышенную безопасность апплетов (специальных Java программ для web-броузера).
- Широкий спектр возможностей. В Java реализованы мощные средства для разработки расчетных программ, GUI-интерфейсов, сетевых и web приложений, программ для работы с базами данных и графикой. Некоторые программы, реализующие сложную графику для web, по мнению автора вообще могут эффективно быть написаны только на Java.
- Открытая технология. Каждому, кто хочет работать на Java, не нужно платить для того, чтобы приобрести легальный пакет разработчика. Компания Sun предоставляет возможность всем приобрести его совершенно свободно (коммерческими могут быть лишь какие-то узкоспециальные программы и средства).
- Высокое качество документации и учебных материалов. Это достоинство на самом деле является немаловажным. Во "всемирной паутине" можно найти немало различных библиотек, поддерживаемых группами энтузиастов, документация которых часто страдает неполнотой и ошибочностью. Java же является государственным стандартом (в США) и поддерживается официально разработчиком (компанией Sun), а также постоянно увеличивающимся международным сообществом Java программистов.
- Возможность интеграции в Java откомпилированных кодов с других языков. Эта возможность реализована с помощью т.н. интерфейса JNI (Java Native Interface).
Как известно, за все надо платить, поэтому технология Java имеет также и недостатки. Основным недостатком обычно считают невысокую (по сравнению с машинно-зависимым кодом) скорость работы виртуальной машины. Однако нужно отметить, что этот недостаток за последние годы становится все менее и менее значимым вследствие постоянного усовершенствования виртуальной машины, в которой часто используемые интерпретирующие функции заменяются машинно-зависимыми. Как показали исследования, число таких функций в типовых приложениях часто превышает
50 %. Поэтому такая замена заметно увеличивает скорость работы JVM. Стремительность прогресса вычислительной техники также уменьшает значимость этого недостатка.
А если учесть тот факт, что за последние годы появились программные средства, позволяющие конвертировать байт-код непосредственно в машинно-зависимый, то отмеченный недостаток просто тает на глазах[4].
Swing – это набор графических компонентов для создания пользовательских интерфейсов приложений и апплетов, а также вспомогательные классы и инструменты для работы с этими компонентами. Swing является на данный моменд де-факто стандартом создания пользовательского интерфейса приложения, работающим под многими платформами и обладающий достаточной функциональностью для большинства приложений. Также Swing можно расширять своими компонентами, реализовывать собственные менеджеры расположения компонетов в контейнерах и т.д. Например, в системе GraphMagic было создано несколько таких компонентов, например GraphPanel для отображения графа, VertexPanel для отображения вершины, EdgePanel для отображения ребра и некоторые другие.
Основой библиотеки Swing, тем тонким слоем, что лежит между ней и зависящим от платформы кодом, является библиотека AWT (Abstract Window Toolkit — инструментарий для работы с различными оконными средами). В отличие от библиотеки Swing, которая появилась в Java версии 1.1 как нестандартное дополнение и стала частью платформы только с выходом Java 2, пакет java.awt входил в Java с самого первого выпуска. Поначалу именно он предназначался для создания пользовательских интерфейсов. [5]
Swing был разработан как полное замещение AWT и исправления многих архитектурных ошибок устаревшего AWT.
Во-первых, в Swing было введено такое понятие как «легковесный компонент» (lightweight component), то есть компонент который может быть отрисован на экране без помощи операционной системы, то есть перехода на уровень ядра, что само по себе является дорогой операцией (сотни процессорных тактов). Легковесные компоненты значительно увеличили скорость реакции и отрисовки графических приложений.
Во-вторых, была полностью переработана модель обработки событий. Разработчикам теперь не пришлось отлавливать события через огромный оператор switch (или if) в перегруженном методе handleEvent() класса Component.
В-третьих, была значительно расширена функциональность компонент, так как в AWT были реализованы только те возможности, что поддерживались всеми платформами. Swing же дал возможность использовать почти полную функциональность графического интерфейса (хотя, конечно, некоторые специфические возможности до сих пор остаются недоступными).
В-четвёртых, был проработан стандарт создания собственных компонентов. В AWT было достаточно сложно создавать собственные компоненты, так как приходилось следить за совместимостью компонента с другими компонентами, а также встроенные менеджеры расположения были либо очень простыми, либо очень сложными.
На двух следующих рисунках ниже можно увидеть результаты работы плагина по нахождению кратчайшей пары реберно-непересекающихся путей между двумя вершинами 1 и 5 (пути подсвечиваются красным и зеленым цветом).
На двух следующих рисунках ниже можно увидеть результаты работы плагина по нахождению K(K>2) кратчайшего множества реберно-непересекающихся путей между двумя вершинами 1 и 5. К вводиться пользователем (K=3,K=4).
В данной работе я расширил систему GraphMagic, полезную для специалистов, студентов и других заинтересованных в теории графов людей. Мной был разработан плагин edge-Disjoint-Algorithms, который позволяет решать следующие задачи:
o Построение кратчайшей пары реберно-непересекающихся путей между двумя вершинами;
o Построение K(K>2) кратчайшего множества реберно-непересекающихся путей между двумя вершинами.
Также, был использован веб-ресурс для поддержки процесса разработки: http://graphmagic.googlecode.com/, который согласует разработку системы и предоставляет всю доступную информацию о проекте, предоставляет систему контроля проблем, средство для общения между разработчиками, и др.
1. «Лекции по теории графов» / В.А. Емеличев, О.И. Мельников, В.И. Сарванов, Р.И. Тышкевич - М.:Наука,1990. - 384с.
2. «Элементы теории графов» / В.Н. Бурков, Д.А. Новиков
3. «Алгоритмы: построение и анализ» = «Introduction to Algorithms» — 2-е изд. / Томас Х. Кормен, Чарльз И. Лейзерсон, Рональд Л. Ривест, Клиффорд Штайн — М.: «Вильямс», 2006. — С. 1296. — ISBN 0-07-013151-1
4. Thinking in Java, 2nd edition, Revision 11©2000 by Bruce Eckel.
5. «Swing: Эффектные пользовательские интерфейсы» / И. А. Портнякин – Санкт-Петербург, 2005. – 523с.
6. http://ru.wikipedia.org/
7. Survivable Networks: Algorithms for Diverse Routing (The Springer International Series in Engineering and Computer Science) (Hardcover) / Ramesh Bhandari, Ph.D. AT&T Laboratories, New Jersey, 1999.
8. http://www.intuit.ru/department/algorithms/gaa/1/1.html
9. http://www.umo.bsu.by/sm.aspx?uid=922
10. http://www.combinatorialmath.ca/G&G/
11. http://www.yworks.com/en/products_yed_about.html
12. http://graph-software.narod.ru/main.html
13. http://www.juga.ru/
14. http://dmtsoft.ru/bn/391/as/oneaticleshablon/
граф, 4, 5, 7, 8
визуализация, 2, 3, 4, 8
планарный, 5
раскраска, 5
класс графов, 5
программы
GraphMagic, 8, 17,23,30