codice:=================================================================================== /** * VEICOLI: i quali sono caratterizzati da marca, modello e da un metodo per la stampa di un indicatore di efficienza del veicolo. L’implementazione di tale metodo non è nota a priori, in quanto varierà in base al veicolo specifico. La classe deve prevedere un ordinamento per le sue istanze basato sull’efficienza (i veicoli di efficienza maggiore vengono prima). */ public abstract class Veicolo { private String marca, modello; public abstract double getEfficienza(); public Veicolo(String marca, String modello) { this.marca = marca; this.modello = modello; } public static Comparator<Object> getVeicoliOrdering(){ return new VeicoliComparator(); } public String getMarca() { return marca; } public String getModello() { return modello; } } ==================================================================================== /** * CONCESSIONARIO: caratterizzato da nome, indirizzo e dall’elenco dei veicoli in pronta consegna. Essa permette di: a. Aggiungere un veicolo; b. Rimuovere un veicolo; c. Dato un veicolo, restituire l’elenco dei veicoli della stessa tipologia; d. Ciclare sui veicoli tramite for-each, in ordine di efficienza. */ public class Concessionario { private String nome, indirizzo; private List<Veicolo> elencoVeicoli; public Concessionario(String nome, String indirizzo) { this.nome = nome; this.indirizzo = indirizzo; elencoVeicoli = new ArrayList<>(); } public String getNome() { return nome; } public String getIndirizzo() { return indirizzo; } //a. Aggiungere un veicolo; public void addVeicolo(Veicolo v) { if (v.equals(null)) { throw new NullPointerException(); } else { elencoVeicoli.add(v); } } //b. Rimuovere un veicolo; public void removeVeicolo(Veicolo v) throws VeicoloNonPresenteException { if (elencoVeicoli.contains(v)) { throw new VeicoloNonPresenteException(); } else if (v.equals(null)) { throw new NullPointerException(); } else { elencoVeicoli.remove(v); } } //c. Dato un veicolo, restituire l’elenco dei veicoli della stessa tipologia; public List<Veicolo> getVeicoliUgualeTipologia(Veicolo v) { List<Veicolo> listaVeicoli = new ArrayList<>(); if (v.equals(null)) { throw new NullPointerException(); } else { for (Veicolo veicolo : elencoVeicoli) { if (veicolo.getClass().equals(v.getClass())) { listaVeicoli.add(veicolo); } } } return listaVeicoli; } //d. Ciclare sui veicoli tramite for-each, in ordine di efficienza. public void cicla(){ } }