Задатак — Паметни ормарић

← Недеља 9

Потребно је направити генеричку класу:

public class Ormaric<T>

Ормарић има:

  • број ормарића;
  • садржај типа T.

Треба да омогући:

smesti(T predmet)
T preuzmi()
boolean jePrazan()

У један ормарић може да се смести само један предмет.

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

Направити класе:

Ranac
Laptop

и затим:

Ormaric<Ranac>
Ormaric<Laptop>

Показати да:

Ormaric<Laptop>

не дозвољава да се у њега смести Ranac.


Додатак — ограничење типа

Дефинисати интерфејс:

public interface ImaMasu {
    double masa();
}

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

Ranac
Laptop

Затим направити:

public class OrmaricSaVagom<T extends ImaMasu>

који поред стандардних операција може да врати:

double trenutnaMasa()

Размислити:

  1. Зашто обичан Ormaric<T> не може да позове masa()?
  2. Шта компајлер зна када напишемо <T extends ImaMasu>?
  3. Зашто је ово боље од кастовања на ImaMasu унутар класе?

Прецизан уговор

null није дозвољен предмет. Смештање у заузет ормарић баца IllegalStateException и не мења садржај. Смештање null баца IllegalArgumentException. Преузимање из празног ормарића враћа null. Маса празног ормарића је 0; маса предмета мора бити ненегативна. Кратку синтаксу бацања изузетка користимо као уговор, а обраду детаљно радимо у недељи 11.

Самостални део — Две вредности

Потребно је чувати пар вредности различитих типова и читати сваку без кастовања. Сами обликујте API.

Критеријум провере: Показати пар String/Integer и пар String/String. Додавање броја на место текста треба да буде грешка компајлирања; објаснити политику према null.

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