Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_ООП_2010.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.81 Mб
Скачать

4.3 Порядок выполнения работы

  1. Ознакомится с заданием на лабораторную работу.

  2. Спроектировать и реализовать структуру данных – дерево, спроектировать два класса LinkedNode и LinkedTree и методы, описанные в пункте 4.2.1.

  3. Проанализировать исходные тексты пользовательского интерфейса, файл TestLinkedTree.java. (обратите особое внимание на обработку событий – нажатий на кнопки, изменение данных списка)

  4. Написать тестовую программу, демонстрирующую работоспособ-ность всех методов спроектированных классов.

  5. Составить отчет о выполнении лабораторной работы.

4.4 Содержимое отчета

  1. Название и тема лабораторной работы.

  2. Цель лабораторной работы.

  3. Краткие теоретические сведения.

  4. Ход выполнения работы

  5. Исходные тексты программ.

  6. Диаграмма классов.

  7. Выводы.

4.5 Контрольные вопросы

  1. Назначение пакетов;

  2. Пакет “по умолчанию”;

  3. Спецификаторы доступа;

  4. Инициализация объектов в Java;

  5. Назначение конструктора “по умолчанию”;

  6. Отношения между классами;

  7. Наследование. Восходящее преобразование типов;

  8. Перегрузка методов;

  9. Статический полиморфизм;

  10. Переопределение методов.

  11. Динамический полиморфизм;

  12. Внутренние интерфейсы и классы;

  13. Создание объектов внутреннего класса;

  14. Локальные классы.

5Лабораторная работа №5 Изучение основ объектно-ориентированного программирования на языке Java. Часть 2

Цель работы: Изучить основные конструкции языка Java для написания объектно-ориентированных программ. Научиться применять их на практике на примере разработки древовидной структуры данных.

5.1 Задание на лабораторную работу

В ходе выполнения данной лабораторной работы необходимо реализовать структуру данных сильноветвящееся дерево и необходимо привести две реализации дерева: - на основе списочной структуры (разработанной в лабораторной работе №4) и на основе массива ссылок на узлы, где каждый узел содержит в себе массив со своими сыновьями.

Рисунок 5.1 – Структура дерева на основе массива ссылок на узлы.

Как видно из рисунка 5.1 реализация дерева на основе массива ссылок на узлы немногим отличается от реализации на основе списочной структуры. Для реализации необходимо разработать два программных интерфейса - интерфейс узла и интерфейс дерева.

5.2 Краткие теоретические сведения

5.2.1Классы деревьев и интерфейсы

Для реализации дерева необходимо использовать композицию, двух классов – класс дерева Tree и класс узла Node, вложенный (не путать с внутренним классом) в класс дерева Tree.

Для построения двух вариантов дерева - на основе списочной структуры и на основе массива ссылок на узлы необходимо предложить два варианта описания класса дерева (Tree) и класса узла дерева (Node). Фактически реальные отличия имеют место в описании классов узла дерева Node, а описания собственно классов дерева (Tree) могут отличаться только названием классов.

В первом случае структура узла Node имеет вид:

Рисунок 5.2 – Структура узла LinkedNode

а во втором – вид:

Рисунок 5.3 - Структура узла ArrayNode

Дерево должно быть представлено программным интерфейсом (не путать с визуальным интерфейсом пользователя), предоставляющим доступ ко всем операциям, которые клиент может выполнять над деревом.

В лабораторной работе №4 были реализованы класс узла LinkedNode и класс дерева LinkedTree. На основании этих классов можно создать программные интерфейсы. Для этого необходимо воспользоваться средствами автоматического рефакторинга, предоставляемыми Eclipse, надо выбрать пункт меню Refactor->Extract interface…На рисунке 3.4 представлен вид окна извлечения программного интерфейса из класса LinkedNode. Необходимо ввести имя интерфейса и отметить методы, которые должны присутствовать в интерфейсе.

Рисунок 5.4 - Извлечение интерфейса из реализованного класса.

В интерфейсе должны быть представлены следующие операции:

  1. Добавление дочернего элемента заданного узла addSon(node, data) в начало или конец перечня сыновей этого узла. Метод получает ссылку на узел node, в который необходимо добавить дочерний элемент с данными data;

  2. Удаление дочернего элемента заданного узла delSon(data). Метод получает данные data удаляемого дочернего узла;

  3. Перемещение элемента из одного узла дерева в другой movNode(parentNode, movedNode). Метод получает ссылки на новый родительский узел parentNode и на перемещаемый дочерний узел movedNode;

  4. Получение getData() и установка setData(data) данных определенного узла;

  5. Поиск узла, содержащего определенные данные find(data). Метод получает ссылку на данные искомого узла;

  6. Проход по дереву в прямом forwardTraverse () и обратном порядке backwardTraverse () с возможностью выполнить над каждым пройденным узлом определенные действия, например, вывод на экран данных из узла (подробнее способ передачи выполняемой операции в метод будет описан ниже);

  7. Определение статуса узла (лист или узел) isLeaf() или isNode();

  8. Получение ссылки на корневой узел дерева getRoot().

В данной лабораторной работе необходимо привести две реализации интерфейса в соответствии с двумя типами реализации дерева.

Очевидно, что только некоторые из перечисленных выше операций имеют отношение непосредственно к интерфейсу дерева - проход по дереву, получение корневого узла, поиск узла с определенными данными, перемещение дочернего элемента из одного узла дерева в другой.

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

Вариант связи между интерфейсами и классами в случае вложенного класса Node приведен на рисунке 5.5

Рисунок 5.5 – Диаграмма классов