PDF

Exame9.junho-ParteII.pdf

Questão 1

Untitled

public class UberUM {
    private Map<String, Veiculo> veiculos; // Usa-se Map em vez de Array já que será útil ter a associação
                                           // matricula->veiculo nas próximas questões

    public UberUM(Set<Map.Entry<String, Veiculo>> info) {
        this.veiculos = new HashMap<>();
        for (Map.Entry<String, Veiculo> entry : info) {
            veiculos.put(entry.getKey(), entry.getValue().clone());
        }
    }
}

public abstract class Veiculo implements Comparable<Veiculo>, Serializable {
    private String matricula;
    private String marca;
    private String modelo;
    private double precokm;
    private List<Viagem> viagens; 
    // List em vez de Set já que temos que manter a ordem para retornar a viagem mais antiga na questão 3
    // List devia ser LinkedList para assegurar ordem mesmo quando viagens são removidas
    // Pode ser ArrayList caso se assuma que viagens não serão removidas
		...
}

Questão 2

Untitled

(Grandes chances de ter erros)

(Grandes chances de ter erros)

Diagrama.drawio

Questão 3

Untitled

public class UberUM {
		...
    private Map<String, Veiculo> veiculos;
		...

    public Viagem viagemMaisAntiga(String matricula) throws VeiculoNotFoundException {
        Veiculo veiculo = this.veiculos.get(matricula);
        if (veiculo == null) {
            throw new VeiculoNotFoundException();
        }

        return veiculo.getViagemMaisAntiga();
    }
}

public abstract class Veiculo implements Comparable<Veiculo>, Serializable {
		...
    private List<Viagem> viagens; 
		...
    public Viagem getViagemMaisAntiga() {
        List<Viagem> viagens = veiculo.getViagens();
        if (viagens.isEmpty()) {
            throw new VeiculoNoViagensFoundException();
        }

        return viagens.get(0).clone(); // A viagem mais antiga será a primeira adicionada (Ver questão 1)
    }
}

public class VeiculoNotFoundException extends RuntimeException {
    public VeiculoNotFoundException() {
        super("Veiculo not found");
    }
}

public class VeiculoNoViagensFoundException extends RuntimeException {
    public VeiculoNoViagensFoundException() {
        super("Veiculo has no viagens made");
    }
}

Questão 4

Untitled

public class UberUM {
    private Map<String, Veiculo> veiculos; 
		...
    public void adicionaViagem(String matricula, String origem, String destino, float distancia) throws VeiculoNotFoundException {
        Veiculo veiculo = this.veiculos.get(matricula);
        if (veiculo == null) {
            throw new VeiculoNotFoundException();
        }

        veiculo.adicionaViagem(origem, destino, distancia);
    }
}

public abstract class Veiculo implements Comparable<Veiculo>, Serializable {
		...
    private List<Viagem> viagens; 

    public abstract float custoViagem(float distancia);
		...
    public void adicionaViagem(String origem, String destino, float distancia) {
        float custo = custoViagem(distancia);

        Viagem viagem = new Viagem(origem, destino, distancia, custo);
        this.viagens.add(viagem);
    }
}

Questão 5

Untitled