Задатак — Лична библиотека

← Недеља 10

Направити модел за једноставну личну библиотеку.

ZanrKnjige

Дефинисати:

public enum ZanrKnjige {
    ROMAN,
    FANTASTIKA,
    ISTORIJA,
    NAUKA,
    BIOGRAFIJA,
    OSTALO
}

Knjiga

Књига има:

  • ISBN;
  • наслов;
  • аутора;
  • број страна;
  • годину издања;
  • жанр.

Две књиге сматрамо једнакима ако имају исти ISBN.

Зато правилно имплементирати:

equals
hashCode

Колекције

Направити:

Листу за читање

List<Knjiga>

Редослед је важан.

Колекцију књига које поседујемо

Set<Knjiga>

Иста књига не треба да се појави два пута.

Каталог по ISBN-у

Map<String, Knjiga>

Књигу треба брзо пронаћи преко ISBN-а.

Природни поредак

Нека Knjiga имплементира:

Comparable<Knjiga>

Природни поредак нека буде:

По ISBN-у, како би compareTo(...) == 0 одговарало једнакости по ISBN-у.

За сортирање по наслову, затим аутору и ISBN-у, направити посебан Comparator. ISBN чувати као непроменљив податак. Проверити два објекта са истим ISBN-ом и различитим насловом: HashSet и TreeSet са природним поретком треба оба да имају један елемент. У апликацији би неслагање података о истом ISBN-у било додатно правило валидације каталога.

Алтернативна поређења

Направити:

PoredjenjePoBrojuStrana
PoredjenjePoGodiniIzdanja

који имплементирају:

Comparator<Knjiga>

Демонстрација

У Main:

  1. направити најмање пет књига;
  2. додати их у листу;
  3. покушати да исти ISBN два пута додате у Set;
  4. направити каталог помоћу Map;
  5. пронаћи књигу по ISBN-у;
  6. сортирати копију листе природним поретком;
  7. сортирати по броју страна;
  8. сортирати по години издања.

Питања

  1. Зашто ISBN има смисла за equals/hashCode?
  2. Зашто наслов сам није довољан?
  3. Зашто листа за читање није Set?
  4. Зашто каталог природно користи Map?
  5. Која је разлика између природног поретка и поређења по броју страна?

Самостални део — Евиденција пријава

Чувамо редослед пријављивања, јединствене индексе студената и брзо проналажење пријаве по индексу. Изабрати структуре и дефинисати понашање при дуплом индексу.

Критеријум провере: За две пријаве истог индекса јасно показати одбијање или замену. Приказ по имену не сме да промени оригинални ред пријављивања.

Предати мали Main са демонстрацијом и кратко образложење одлука. У овом делу нису задати називи класа или обавезни обрасци; образложено једноставније решење је прихватљиво. Најпре дефинисати уговор и очекивани резултат, па имплементирати.