Глава 3 Плагин для системы GraphMagic

Описание плагина

Мой плагин edge-Disjoint-Algorithms для системы GraphMagic поможет специалистам, студентам и другим заинтересованным в теории графов людям работать с графовыми моделями и алгоритмами и решать две следующие задачи:

o Построение кратчайшей пары реберно-непересекающихся путей между двумя вершинами;

o Построение K(K>2) кратчайшего множества реберно-непересекающихся путей между двумя вершинами.

При реализации были использованы следующие технологии:

o Java

o Swing

o JUnit

o EasyMock

o Maven

В основе работы данного плагина лежат два алгоритма:

o Алгоритм Дейкстры (Dijkstra’s algorithm).

o Модифицированный aлгоритм Дейкстры (Modified Dijkstra’s algorithm.

Используемые технологии

Java

Java — объектно-ориентированный язык программирования, разрабатываемый компанией Sun Microsystems и официально выпущенный 23 мая 1995 года.

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

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

Основные особенности языка 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 является на данный моменд де-факто стандартом создания пользовательского интерфейса приложения, работающим под многими платформами и обладающий достаточной функциональностью для большинства приложений. Также 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 было достаточно сложно создавать собственные компоненты, так как приходилось следить за совместимостью компонента с другими компонентами, а также встроенные менеджеры расположения были либо очень простыми, либо очень сложными.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: