Задатак — Навигација и избор руте

← Недеља 7

Потребно је направити једноставан модел навигације.

Навигација треба да подржи различите начине рачунања руте:

  • аутомобилом;
  • пешке;
  • бициклом.

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

public interface NacinRutiranja {
    void izracunajRutu(String polaziste, String odrediste);
}

Направити имплементације:

AutomobilskaRuta
PesackaRuta
BiciklistickaRuta

За потребе задатка није потребно рачунати праву руту.

Довољно је да свака имплементација испише другачију поруку.

На пример:

Računam najbržu automobilsku rutu od Beograda do Novog Sada.

Класа Navigacija

Треба да има:

private NacinRutiranja nacinRutiranja;

и да рачунање руте делегира том објекту.

Омогућити:

postaviNacinRutiranja(...)

како би корисник могао да промени начин рутирања током рада.

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

У Main:

  1. направити навигацију која рачуна аутомобилску руту;
  2. израчунати руту;
  3. променити стратегију на пешачку;
  4. поново израчунати руту;
  5. променити стратегију на бициклистичку.

Додатак

Додати нову стратегију:

RutaJavnimPrevozom

без измене класе Navigacija.

Размислити:

  • зашто Navigacija не треба да има велики if или switch;
  • шта је овде стратегија;
  • шта је конкретна стратегија;
  • где је композиција;
  • где је делегирање;
  • зашто промена стратегије не мења идентитет објекта Navigacija.

Самостални део — Процена трајања пута

Навигација бира процену трајања за пешачење, бицикл и аутомобил. За позитиван број километара користити брзине 5, 15 и 60 км/ч, а резултат заокружити навише на целе минуте. Није потребно рачунати пут кроз граф.

Критеријум провере: За 10 км очекивати 120, 40 и 10 минута. Исти објекат навигације мења начин процене. Образложити зашто стратегија враћа резултат уместо да га само исписује.

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