Презентации и задания для практики NetCracker / Практика / 04. Lнтерфейсv, ввод и вvвод
.docПрактическая работа №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(), записав в файл объект, затем считав и сравнив его с исходным (по сохраненным значениям).