
- •Основы программирования на языке 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 Контрольные вопросы
- •Многопоточность;
- •Рекомендованная литература
В описании узла дерева необходимо создать и инициализировать объект ассоциативный массив сыновей, например
class MapNode implements INode{
//Информационные поля для узла дерева
Map mapSon = new LinkedHashMap();
//Методы узла дерева
}
Количество сыновей узла дерева определяется следующим образом:
int size = mapSon.size();
Добавление сына в ассоциативный массив сыновей реализуется следующим образом:
INode node;
node.setData( );
mapSon.put(node.getData(), node);
Доступ к сыну – элементу ассоциативного массива, с индексом i выполняется путем получения коллекции значений всех пар карты отображений, а затем массива, который содержит элементы коллекций, следующим образом:
node = (INode)mapSon.values().toArray()[i]; |
Следует обратить внимание на типизацию ссылки типа Object, получаемой из коллекции.
На рисунке 6.1 приведена финальная диаграмма классов. Обратите внимание на частичную реализацию функциональности в абстрактных классах.
Рисунок 6.1 – Диаграмма классов
6.2.3Доступ к коллекции или ассоциативному массиву через итератор
Итератор (iterator) являются средством циклического прохождения элементов коллекции или ассоциативного массива (карты). В действительности ассоциативный массив непосредственно не связан с итератором, но путем отображение карты в набор можно фактически связать итератор с картой.
В Java итератор является специальным объектом, который реализует интерфейс Iterator.
Интерфейс Iterator позволяет циклически пройти через коллекцию, получая и удаляя ее элементы. К основным методам этого интерфейса относится:
Object next() – возвращает следующий элемент;
boolean hesNext() – возвращает true, если в коллекции есть следующий элемент;
void remove() – удаляет текущий элемент.
Интерфейс ListIterator расширяет Iterator, обеспечивая двунаправленный обход списка, и модификацию элементов списка. К основным методам этого интерфейса дополнительно можно отнести:
Object previous() – возвращает предыдущий элемент;
boolean hesPrevious() – возвращает true, если в коллекции есть предыдущий элемент;
void add(Object obj) – добавляет новый элемент перед тем, который будет возвращен следующим вызовом next().
Общую структуру использования итераторов для коллекций рассмотрим на примере циклического прохода списка:
//Получить итератор для коллекции Iteratot iter = listSon.iterator(); //Обход коллекции в цикле while(iter.hasNext()){ node = (INode)iter.next(); //получить элемент коллекции … //выполнить обработку элемента }
//или использовать цикл for for(INode node: listSon){ System.out.println(node.getData()); } |
Использование итераторов для ассоциативных массивов аналогично использованию итераторов для коллекций. Необходимо получить содержимое ассоциативного массива в виде множества вхождений и работать с этим множеством как с обычной коллекцией. Особенности использования итератора для ассоциативных массивов приведены ниже:
//Получить множество пар ассоциативного массива Set sons = mapSon.entrySet(); //Получить итератор для множества Iteratot iter = sons.iterator(); //Обход множества в цикле while(iter.hasNext()){ MapEntry me = (MapEntry)iter.next(); //получить вход карты node = (INode)me.getValue();//получить элемент … //выполнить обработку элемента }
//или использовать цикл for for(MapEntry me: sons){ System.out.println(((INode)me.getValue()).getData()); } |