Задатак — Лична библиотека
Направити модел за једноставну личну библиотеку.
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:
- направити најмање пет књига;
- додати их у листу;
- покушати да исти ISBN два пута додате у
Set; - направити каталог помоћу
Map; - пронаћи књигу по ISBN-у;
- сортирати копију листе природним поретком;
- сортирати по броју страна;
- сортирати по години издања.
Питања
- Зашто ISBN има смисла за
equals/hashCode? - Зашто наслов сам није довољан?
- Зашто листа за читање није
Set? - Зашто каталог природно користи
Map? - Која је разлика између природног поретка и поређења по броју страна?
Самостални део — Евиденција пријава
Чувамо редослед пријављивања, јединствене индексе студената и брзо проналажење пријаве по индексу. Изабрати структуре и дефинисати понашање при дуплом индексу.
Критеријум провере: За две пријаве истог индекса јасно показати одбијање или замену. Приказ по имену не сме да промени оригинални ред пријављивања.
Предати мали Main са демонстрацијом и кратко образложење одлука. У овом делу
нису задати називи класа или обавезни обрасци; образложено једноставније решење
је прихватљиво. Најпре дефинисати уговор и очекивани резултат, па имплементирати.