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

Презентации и задания для практики NetCracker / Практика / 05. Prohibited =аследование и паттернv проектирования

.doc
Скачиваний:
49
Добавлен:
08.06.2015
Размер:
50.69 Кб
Скачать

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

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

В процессе написания тестовых заданий ознакомьтесь с механизмами наследования классов, переопределения методов, паттернами проектирования «Итератор» и «Абстрактная фабрика».

Задание 1

Если это не было сделано ранее, создайте в пакете buildings внутренние пакеты buildings.dwelling, buildings.office и рассортируйте по пакетам имеющиеся классы.

Задание 2

Создайте пакет buildings.dwelling.hotel.

Создайте класс HotelFloor, расширяющий класс DwellingFloor.

Каждый этаж отеля имеет показатель «количество звезд».

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

Этаж отеля можно создать как по количеству помещений этажа, так и по массиву помещений. Количество звезд этажа при создании объекта должно браться из константы в классе, равной 1.

У объекта этажа отеля должны быть методы получения и изменения его количества звезд.

Создайте класс отеля Hotel, расширяющий класс Dwelling.

Класс отеля должен позволять узнать показатель «количество звезд» всего отеля, который равен максимальному показателю «количество звезд» среди всех этажей отеля (если этаж в здании отеля не является этажом отеля, то он при подсчётах игнорируется).

Переопределите метод getBestSpace() у класса отеля. Лучшим считается номер с максимальным значением показателя area*coeff, где area-площадь помещения, coeff-определяется следующим образом.

количество звезд

coeff

*

0,25

**

0,5

***

1

****

1,25

*****

1,5

Задание 3

Измените интерфейсы Floor так, чтобы в нем был объявлен метод java.util.Iterator iterator(), возвращающий итератор по помещениям этажа. Создайте этот метод в классах, реализующих данный интерфейс. Для этого следует описать дополнительные классы итераторов с соответствующими методами, удаление элемента реализовывать не нужно.

Измените интерфейс Building так, чтобы в нем был объявлен метод java.util.Iterator iterator(), возвращающий итератор по этажам здания. Создайте этот метод в классах, реализующих данный интерфейс. Для этого следует описать дополнительные классы итераторов с соответствующими методами, удаление элемента реализовывать не нужно.

Рекомендуется оптимизировать работу итераторов с учетом знания о внутренней структуре класса. Проверьте работу итераторов.

Задание 4

Создайте интерфейс BuildingFactory, содержащий методы:

  • public Space createSpace(double area)

  • public Space createSpace(int roomsCount, double area)

  • public Floor createFloor(int spacesCount)

  • public Floor createFloor(Space[] spaces)

  • public Building createBuilding(int floorsCount, int[] spacesCounts)

  • public Building createBuilding(Floor[] floors)

Задание 5

Создайте классы конкретных фабрик DwellingFactory, OfficeFactory, HotelFactory, реализующие интерфейс BuildingFactory и создающие объекты соответствующих типов.

Задание 6

В классе Buildings создайте статическое поле типа BuildingFactory и метод setBuildingFactory, позволяющие, соответственно, хранить ссылку и устанавливать ссылку на текущую конкретную фабрику.

По умолчанию поле должно ссылаться на объект, порождающий экземпляры класса Dwelling.

Задание 7

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