Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
48
Добавлен:
08.06.2015
Размер:
41.98 Кб
Скачать

Практическая работа №4

Задание на практическую работу

Ознакомьтесь с концепцией интерфейсов и механизмом систем ввода/вывода данных в Java.

Задание 1

Опишите классы ошибок:

  • несоответствия обменивающихся помещений InexchangeableSpacesException (объявляемое).

  • несоответствия обменивающихся этажей InexchangeableFloorsException (объявляемое).

Задание 2

Создайте отдельный класс PlacementExchanger, работающий со ссылками типа Space, Floor, Building и содержащий следующие статические методы.

  • Метод проверки возможности обмена помещениями. Передаются две ссылки на объекты типа Space. Метод возвращает true, если общая площадь и количество комнат в помещениях равны, и false в других случаях.

  • Метод проверки возможности обмена этажами. Методу передаются две ссылки на объекты типа Floor. Метод возвращает true, если общая площадь этажей и количество помещений равны, и false в других случаях.

  • Метод обмена помещениями двух этажей public static void exchangeFloorRooms(Floor floor1, int index1, Floor floor2, int index2). Метод должен проверять возможность обмена помещениями и допустимость номеров помещений, выбрасывать при необходимости соответствующие исключения.

  • Метод обмена этажами двух зданий public static void exchangeBuildingFloors(Building building1, int index1, Building building2, int index2). Методу передаются две ссылки типа Building и номера соответствующих этажей. Метод должен проверять возможность обмена этажами и допустимость номеров этажей, выбрасывать при необходимости соответствующие исключения.

Задание 3

Создайте отдельный класс Buildings, работающий со ссылками типа Space, Floor, Building, содержащий статические методы ввода-вывода зданий:

  • записи данных о здании в байтовый поток

public static void outputBuilding (Building building, OutputStream out);

  • чтения данных о здании из байтового потока

public static Building inputBuilding (InputStream in);

  • записи здания в символьный поток

public static void writeBuilding (Building building, Writer out);

  • чтения здания из символьного потока

public static Building readBuilding (Reader in).

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

Например, символьная запись для трехэтажного здания:

«3 2 3 150.0 2 100.0 1 3 250.0 3 2 140.0 1 60.0 1 50.0»

Для чтения этажа из символьного потока рекомендуется использовать StreamTokenizer.

Проверьте возможности всех реализованных методов, в качестве реальных потоков используя файловые потоки, а также потоки System.in и System.out.

Задание 4

Модифицировать классы помещений, этажей и зданий таким образом, чтобы они были сериализуемыми.

Продемонстрировать возможности сериализации в методе main(), записав в файл объект, затем считав и сравнив его с исходным (по сохраненным значениям).