
- •Основы программирования на языке java в среде eclipse
- •Ответственный за выпуск: в.И. Павловський, зав. Кафедрою информационных и компьютерных систем, канд. Техн. Наук, доцент.
- •2.1 Задание на лабораторную работу 19
- •7.3 Порядок выполнения работы 103
- •7.4 Содержимое отчета 103
- •7.5 Контрольные вопросы 104
- •Введение
- •1Лабораторная работа №1 Изучение среды разработки Eclipse
- •1.1 Задание на лабораторную работу
- •1.2 Краткие теоретические сведения
- •1.2.1Создание проекта
- •1.2.2Создание нового класса Java
- •1.3 Порядок выполнения работы
- •1.4 Содержимое отчета
- •Краткие теоретические сведения.
- •1.5 Контрольные вопросы
- •2Лабораторная работа №2 Основы языка Java
- •2.1 Задание на лабораторную работу
- •2.2 Краткие теоретические сведения
- •2.2.1Создание объектов
- •2.2.2Примитивные типы
- •2.2.3Числа высокой точности
- •2.2.4Уничтожение объектов
- •2.2.5Видимость имен
- •2.2.6Использование других компонентов
- •2.2.7Ключевое слово static
- •2.2.8Массивы
- •2.2.9Обработка ошибок с помощью исключений
- •2.3 Порядок выполнения работы
- •2.4 Содержимое отчета
- •2.5 Контрольные вопросы и задания
- •3Лабораторная работа №3 Объектная модель языка Java
- •3.1 Задание на лабораторную работу
- •3.2 Краткие теоретические сведения
- •3.3 Порядок выполнения работы
- •Краткие теоретические сведения.
- •4.2 Краткие теоретические сведения
- •4.2.1Классы дерева и узла
- •4.2.2Вопросы сокрытия реализации
- •4.2.3Пользовательский интерфейс
- •4.3 Порядок выполнения работы
- •4.4 Содержимое отчета
- •Краткие теоретические сведения.
- •4.5 Контрольные вопросы
- •5Лабораторная работа №5 Изучение основ объектно-ориентированного программирования на языке Java. Часть 2
- •5.1 Задание на лабораторную работу
- •5.2 Краткие теоретические сведения
- •5.2.1Классы деревьев и интерфейсы
- •5.2.2Рекурсивный проход по деревьям разных классов
- •5.2.3Расширение ранее созданных классов специфическими операциями пользователей
- •5.2.4Вопросы оптимизации кода
- •5.3 Порядок выполнения работы
- •5.4 Содержимое отчета
- •Краткие теоретические сведения.
- •5.5 Контрольные вопросы
- •6Лабораторная работа №6 Изучение коллекций Java и системы ввода-вывода
- •6.1 Задание на лабораторную работу
- •6.2 Краткие теоретические сведения
- •6.2.1Представление и реализация дерева на основе коллекций
- •В описании узла дерева необходимо создать и инициализировать объект класса список или набор сыновей, например
- •Количество сыновей узла дерева определяется следующим образом:
- •Элементу набора с индексом I выполняется путем получения массива из набора
- •6.2.2Представление и реализация дерева на основе ассоциативных массивов (карт отображений)
- •В описании узла дерева необходимо создать и инициализировать объект ассоциативный массив сыновей, например
- •Количество сыновей узла дерева определяется следующим образом:
- •6.2.3Доступ к коллекции или ассоциативному массиву через итератор
- •6.2.4Использование обобщений Java 5
- •В описании узла дерева необходимо создать и инициализировать коллекцию настраиваемый список, например
- •6.2.5Сериализация и десериализация дерева в файл
- •6.2.6Ввод и вывод в потоки со сжатием данных
- •6.3 Порядок выполнения работы
- •Краткие теоретические сведения.
- •7.2 Краткие теоретические сведения
- •7.2.1Многопоточность
- •7.2.2Процессы, потоки и приоритеты
- •7.2.3Приоритеты потоков в приложениях Java
- •7.2.4Реализация многопоточности в Java
- •7.2.5Функциональность класса Thread
- •7.2.6Реализация интерфейса Runnable
- •7.2.7Синхронизация потоков
- •7.2.8Синхронизация методов
- •7.2.9Блокировка потока
- •7.2.10Синхронизация доступа к совместно используемым данным.
- •7.2.11Избыточная синхронизация
- •7.2.12Вызов метода wait
- •7.2.13Документирование уровней безопасности
- •7.2.14Работа с графикой Графика 2d
- •Пространства координат
- •Режим рисования
- •Создание цвета
- •Основные методы рисования
- •Рисование фигур средствами Java2d
- •Класс BasicStroke
- •Класс GeneralPath
- •Классы GradientPaint и TexturePaint
- •7.3 Порядок выполнения работы
- •7.4 Содержимое отчета
- •Краткие теоретические сведения;
- •7.5 Контрольные вопросы
- •Многопоточность;
- •Рекомендованная литература
4.3 Порядок выполнения работы
Ознакомится с заданием на лабораторную работу.
Спроектировать и реализовать структуру данных – дерево, спроектировать два класса LinkedNode и LinkedTree и методы, описанные в пункте 4.2.1.
Проанализировать исходные тексты пользовательского интерфейса, файл TestLinkedTree.java. (обратите особое внимание на обработку событий – нажатий на кнопки, изменение данных списка)
Написать тестовую программу, демонстрирующую работоспособ-ность всех методов спроектированных классов.
Составить отчет о выполнении лабораторной работы.
4.4 Содержимое отчета
Название и тема лабораторной работы.
Цель лабораторной работы.
Краткие теоретические сведения.
Ход выполнения работы
Исходные тексты программ.
Диаграмма классов.
Выводы.
4.5 Контрольные вопросы
Назначение пакетов;
Пакет “по умолчанию”;
Спецификаторы доступа;
Инициализация объектов в Java;
Назначение конструктора “по умолчанию”;
Отношения между классами;
Наследование. Восходящее преобразование типов;
Перегрузка методов;
Статический полиморфизм;
Переопределение методов.
Динамический полиморфизм;
Внутренние интерфейсы и классы;
Создание объектов внутреннего класса;
Локальные классы.
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 - Извлечение интерфейса из реализованного класса.
В интерфейсе должны быть представлены следующие операции:
Добавление дочернего элемента заданного узла addSon(node, data) в начало или конец перечня сыновей этого узла. Метод получает ссылку на узел node, в который необходимо добавить дочерний элемент с данными data;
Удаление дочернего элемента заданного узла delSon(data). Метод получает данные data удаляемого дочернего узла;
Перемещение элемента из одного узла дерева в другой movNode(parentNode, movedNode). Метод получает ссылки на новый родительский узел parentNode и на перемещаемый дочерний узел movedNode;
Получение getData() и установка setData(data) данных определенного узла;
Поиск узла, содержащего определенные данные find(data). Метод получает ссылку на данные искомого узла;
Проход по дереву в прямом forwardTraverse () и обратном порядке backwardTraverse () с возможностью выполнить над каждым пройденным узлом определенные действия, например, вывод на экран данных из узла (подробнее способ передачи выполняемой операции в метод будет описан ниже);
Определение статуса узла (лист или узел) isLeaf() или isNode();
Получение ссылки на корневой узел дерева getRoot().
В данной лабораторной работе необходимо привести две реализации интерфейса в соответствии с двумя типами реализации дерева.
Очевидно, что только некоторые из перечисленных выше операций имеют отношение непосредственно к интерфейсу дерева - проход по дереву, получение корневого узла, поиск узла с определенными данными, перемещение дочернего элемента из одного узла дерева в другой.
Операции получение и установка данных, определение статуса узла относятся к понятию узел дерева. Кроме того, операции добавление дочернего элемента и удаление дочернего элемента должны быть доступны как на уровне дерева, так и на уровне узла. В последнем случае методы для выполнения этих операций не должны принимать ссылок на необходимый родительский узел, поскольку им будет служить непосредственно ссылка, на которой выполняется метод. В связи с этим, необходимо обеспечить дерево и узел своими собственными программными интерфейсами, содержащими методы, относящиеся к манипулированию деревом и узлом.
Вариант связи между интерфейсами и классами в случае вложенного класса Node приведен на рисунке 5.5
Рисунок 5.5 – Диаграмма классов