Задача: Система управления библиотекой
Вам нужно разработать простую систему управления библиотекой, которая позволит управлять книгами и другими медиа-ресурсами (например, журналами). Система должна поддерживать возможность добавления ресурсов, выдачи их пользователям и возврата. Используйте принципы объектно-ориентированного программирования: классы, интерфейсы, наследование и полиморфизм.
Требования к реализации:
Создайте интерфейс LibraryItem, который описывает общие свойства и поведение для всех библиотечных ресурсов. Интерфейс должен содержать:
- Метод getTitle() — возвращает название ресурса.
- Метод isAvailable() — возвращает статус доступности (true, если ресурс доступен).
- Метод borrowItem() — помечает ресурс как занятый.
- Метод returnItem() — возвращает ресурс в библиотеку, делая его доступным.
Создайте абстрактный класс AbstractLibraryItem, который реализует интерфейс LibraryItem. Этот класс должен: Содержать поля: title (название) и isAvailable (статус доступности). Реализовать методы getTitle() и isAvailable() из интерфейса. Оставить методы borrowItem() и returnItem() абстрактными, так как их реализация зависит от типа ресурса.
Создайте два конкретных класса, наследующихся от AbstractLibraryItem: Book: Представляет книгу. Дополнительно имеет поле author (автор). Magazine: Представляет журнал. Дополнительно имеет поле issueNumber (номер выпуска).
В обоих классах реализуйте методы borrowItem() и returnItem(). Например: Для Book: При выдаче книги выведите сообщение: "Книга 'title' автора author выдана". Для Magazine: При выдаче журнала выведите сообщение: "Журнал 'title' номер issueNumber выдан". Аналогичные сообщения выводите при возврате.
Создайте класс Library, который управляет коллекцией библиотечных ресурсов: Поле: список items (типа List). Методы:
- addItem(LibraryItem item) — добавляет ресурс в библиотеку.
- borrowItem(String title) — находит ресурс по названию и вызывает его метод borrowItem(). Если ресурс не найден или занят, выведите сообщение об ошибке.
- returnItem(String title) — возвращает ресурс по названию, вызывая returnItem().
- printAvailableItems() — выводит список доступных ресурс.
Создайте класс Main с методом main, в котором: Создайте экземпляр Library. Добавьте несколько книг и журналов. Продемонстрируйте выдачу и возврат ресурсов, а также вывод списка доступных ресурсов. Дополнительные требования: Используйте модификаторы доступа (private, protected, public) корректно. Обработайте случаи, когда ресурс не найден или уже занят/возвращён. Используйте полиморфизм: методы borrowItem и returnItem должны работать через интерфейс LibraryItem.