Необходимо разработать иерархию работников библиотеки?
========================================================

 Добрый день!  

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

  

Понимаю что нужно сделать 4 interface Reader,interface Librarian, interface Supplier, interface Administrator. Со своими классами, но вот дальше как обрубает, пытаюсь это сделать в IDEA.  

  

Описание  

Необходимо разработать иерархию работников библиотеки. Нужно реализовать совмещение нескольких ролей в библиотеке в одном исполнителе через интерфейсы. Каждый объект в программе имеет определенный набор действий.  

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

Для передачи информации о том, что должен уметь объект, используются интерфейсы.  

Примером интерфейсов в нашей библиотеке может служить понятие роли на проекте. Каждая роль подразумевает набор определенных операций, которые должен "уметь" объект пользователь — User в программе.  

Функционал программы  

Создайте иерархию "Пользователи библиотеки" со следующими интерфейсами:  

Читатель – берет и возвращает книги.  

Библиотекарь – заказывает книги.  

Поставщик книг – приносит книги в библиотеку.  

Администратор – находит и выдает книги и уведомляет о просрочках времени возврата.  

В методе public static void main создайте 2-3 объекта, реализующих эти интерфейсы.  

Дополнительная информация  

Учтите, что интерфейсов у пользователя (User) может быть несколько. Объекты класса User могут взаимодействовать друг с другом (например, библиотекарь заказывает у поставщика).  

Пример реализации  

Например, у администратора должен быть метод overdueNotification(Reader reader). Методы могут принимать в качестве параметра других user-ов. Например, читатель берет книги у администратора, библиотекарь заказывает у поставщика и т.д.  

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

 Добрый день!  

Создайте несколько интерфейсов.   

Например, iReader, iLibrarian, iSupplier и iAdministrator. (Названия даны лишь для наглядности. Желательно придерживаться Java naming convention)  

  

Далее для каждого интерфейса опишите методы.  

Например, для iReader -   

```
// сигнатуры методов могут отличаться
takeBook(); // взять книгу
returnBook(); // вернуть книгу
```
  

  

Для iLibrarian  

`orderBook(); // заказать книгу`  

  

Для iSupplier  

`bringBook(); // принести книгу`  

  

Для iAdministrator  

```
findBook(); // найти книгу
overdueNotification(User reader); // уведомить о времени возврата
```
  

  

Дальше вам нужны реализации этих интерфейсов.  

```
Reader implements iReader
Librarian implements iLibrarian
Supplier implements iSupplier
Admin implements iAdministrator
```
  

  

В общем, имплементируем интерфейсы и реализуем эти интерфейсы.  

  

Если например, Admin может не только уведомлять пользователей об истечении срока возврата, но также читать книги, то `Admin implements iAdministrator, iReader` имплементируем нужный интерфейс тоже.  

  

Ну и конечно же нужен класс Book, который будет представлять книгу.  

  

Это простая задача на ООП. Возможно. что названия классов и интерфейсов можно оформить еще красивее, но я на скорую руку сделал, чтобы показать вам саму идею.  

  

Также можно например, Всех этих юзеров наследовать от объекта User.  

Т.е.  

`Reader extends User implements iReader`  

  

А в интерфейсах например, использовать generic type. Таким образом реализовать этот интерфейс смогут только классы расширяющие класс User.  

  

Например,   

`interface iReader<T extends User>`  

  

Тогда указанная выше строка будет выглядеть следующим образом:  

`Reader extends User implements iReader<Reader>`