Структура программы
Теперь посмотрим на структуру программы (рис.4). Я изобразил её в виде диаграммы классов. Эта и следующая диаграмма составлены в соответствии с правилами UML (unified modeling language – унифицированный язык моделирования). Если вы не знакомы с UML, то не беспокойтесь, я постараюсь подробно все объяснить, да и сами диаграммы достаточно простые. Но, если вы планируете заниматься разработкой больших приложений, то все же советую почитать какую-нибудь книгу или статью о UML. Это значительно упростит и ускорит процесс разработки (проверено на собственном опыте).

Рис.4. Диаграмма классов
Давайте внимательно посмотрим на диаграмму. Все классы изображены в виде прямоугольников, в которых написаны их имена. Перед именем класса может идти имя объекта этого класса. Например, запись finder:FileFinder означает, что в программе есть объект с именем finder
типа FileFinder
.
Работа программы начинается с вызова метода main(…)
(класс Main
). Тут выполняется создание главного фрейма программы, на котором размещается основная панель (объект класса MainPanel
) со всеми элементами управления.
Классы MainPanel
и JPanel
соединены сплошной линией с замкнутой стрелкой на конце. Это означает, что MainPanel
является потомком JPanel
. Таким образом, мы можем разместить MainPanel
на фрейме и добавить на неё различные элементы управления (кнопки, надписи, текстовые поля и т.п.).
Теперь взгляните на интерфейс SearchListener
. Он изображён также как обычный класс, только над его именем указано ключевое слово (стереотип) interface. Пунктирная линия с замкнутой стрелкой на конце означает, что класс MainPanel
реализует интерфейс SearchListener
, т.е. содержит все методы, объявленные в интерфейсе.
Теперь посмотрим на классы Thread
, ResultsDialog
и FileFinder
. Все они соединены с классом MainPanel
линиями, на одном конце которых находятся незамкнутые стрелки, а на другом – ромбики. Это обозначение можно расшифровать так: «MainPanel
владеет объектами Thread
, ResultsDialog
и FileFinder
«. Рассмотрим подробнее назначение этих классов.
FileFinder
. С этим классом вы знакомы по предыдущим статьям. Он содержит методы, с помощью которых выполняется поиск файлов. Кроме того, этот класс «использует» интерфейс SearchListener
, что отражено на диаграмме с помощью пунктирной линии с разомкнутой стрелкой. В нашем случае это означает, что объект типа FileFinder
содержит указатели на объекты типа SearchListener
, и может вызывать их методы.
ResultsDialog
. Этот класс является потомком JDialog
, и представляет собой диалоговое окно с текстовым полем для отображения результатов поиска.
Как видите, состав программы довольно простой. Теперь посмотрим, каким образом все это работает.