Domanda 1 A) Si richiede di analizzare le seguenti sezioni di codice. Il candidato indichi il risultato dell esecuzione del main. public class Father { private static int counter=0; private int code; public Father (){ init(); private void init(){ code = counter++; public int getcode(){ return code; public class Son extends Father{ private int code; public Son(){ init (); public void init () { code = 0; public void inc(){code++; public void dec(){code--; public int getvalue() {return code; public class Main{ public static void main(string args[]){ Son s1 = new Son(); Son s2 = new Son(); s1.inc(); s2.inc(); s2.inc(); System.out.println(s1.getCode()+" "+s1.getvalue()); System.out.println(s2.getCode()+" "+s2.getvalue()); B) Si richiede di analizzare le seguenti sezioni di codice. Il candidato indichi il risultato dell esecuzione del main. public class MyException extends Exception{ public MyException(){ super(); public MyException(String msg){ super(msg); import java.io.*; public class Getter{ Thrower trv; public Getter(){ trv = new Thrower(); public void run() throws MyException, IOException { trv.lancia(); throw new IOException(); public class Thrower{ public Thrower (){ public void lancia () throws MyException { throw new MyException("metodo non implementato"); import java.io.*; public class Main { public static void main(string args[]){ Getter gtr = new Getter(); try { gtr.run(); catch (IOException e){ System.out.println("Eccezione IO"); catch (Exception e){ System.out.println(e.getMessage());
Si richiede di realizzare un sistema software che consenta la gestione del magazzino di un negozio di informatica. Ogni negozio è caratterizzato dal nome del titolare, dal recapito telefonico, dalla lista di prodotti in magazzino, dalla lista dei fornitori, dalla lista degli ordini effettuati ai fornitori. Tutti i fornitori sono caratterizzati dal nome, dal recapito telefonico, dalla mail e da un codice che li identifica univocamente. In particolare i fornitori possono accettare ordini e effettuare sconti sul prezzo dei prodotti forniti. I fornitori si dividono in business partners e fornitori occasionali. I business partners sono caratterizzati dalla somma che è stata pagata loro per la fornitura di materiale durante l anno in corso. In particolare, i business partner garantiscono uno sconto sulla fornitura dei prodotti proporzionale alla somma che è stata loro pagata durante l anno. I fornitori occasionali sono caratterizzati dal tempo garantiscono per la consegna delle merci. In particolare, qualora i prodotti richiesti ad un fornitore occasionale non vengano consegnati entro il tempo stabilito, il fornitore occasionale concede uno sconto pari al 15% valore dell ordine. Tutti i prodotti in magazzino sono caratterizzati dalla marca, dal modello, dal numero dei pezzi disponibili, dal prezzo e dalla lista degli identificatori associati ai possibili fornitori del prodotto. In particolare, esistono due tipologie di prodotti: i prodotti di largo consumo ed i prodotti di nicchia. I prodotti di largo consumo sono caratterizzati dalla data dell ultimo acquisto del prodotto e possono essere forniti solo da business partners. I prodotti di nicchia, sono invece caratterizzati dal numero totale di pezzi di quel prodotto che sono stati venduti nell arco dell ultimo anno e possono essere forniti sia dai business partners che dai fornitori occasionali che garantiscono la consegna entro 2 giorni lavorativi. Gli ordini effettuati ai fornitori sono caratterizzati dal codice identificativo del prodotto, dal codice del fornitore a cui il prodotto è stato richiesto, dalla data stimata per la consegna e da un identificatore che identifica univocamente l ordine. Il sistema software deve consentire di inserire/cancellare nuovi prodotti in magazzino, nuovi fornitori e nuovi ordini. Il sistema deve inoltre consentire di individuare tutti i prodotti esauriti in magazzino ed effettuare l ordine ad un possibile fornitore del prodotto. Domanda 2 Il candidato modelli il sistema software specificato nel seguito individuando i diversi componenti che lo costituiscono e le relazioni fra di essi (ereditarietà/uso).
Domanda 3 Il candidato implementi una sezione del sistema specificato nella Domanda 2. In particolare, è richiesta la realizzazione delle classi specificate nel seguito. Per ogni classe il candidato può aggiungere i metodi e gli attributi che ritiene utili per l implementazione. Classe astratta di nome Prodotto Rappresenta il prodotto in magazzino String marca: rappresenta la marca del prodotto String modello: rappresenta il modello del prodotto int pezzidisponibili: rappresenta il numero dei pezzi ancora disponibili in magazzino int code: codice che identifica univocamente il prodotto Attributi protetti int fornitori[]: array che rappresenta la lista dei codici dei fornitori del prodotto. Per semplicità si assume che l array fornitori non sia vuoto e che ogni entry dell array contenga un intero (il codice di un fornitore). public Prodotto (String marca, String modello, int pezzidisponibili, int [] fornitori): i parametri in ingresso sono utlizzati per settare il valore dei corrispondenti attributi. Inoltre, il costruttore deve generare un codice univoco che identifica il prodotto e memorizzarlo nell attributo code. public abstract int trovafornitore(): questo metodo consente di determinare il codice di un fornitore del prodotto public int getcode(): restituisce il valore dell attributo code public int getpezzidisponibili(): restituisce il valore dell attributo pezzidisponibili Classe di nome ProdottoLargo Rappresenta il prodotto di largo consumo ed eredita dalla classe Prodotto public ProdottoLargo (String marca, String modello, int pezzidisponibili, int [] fornitori): i parametri in ingresso sono utlizzati per settare il valore dei corrispondenti attributi. Inoltre, il costruttore deve generare un codice univoco che identifica il prodotto e memorizzarlo nell attributo code. public int trovafornitore(): sceglie casualmente un codice di fornitore fra quelli memorizzati nell array fornitori e lo restituisce in uscita. Classe di nome ProdottoNicchia. Rappresenta il prodotto di nicchia ed eredita dalla classe Prodotto
public ProdottoLargo (String marca, String modello, int pezzidisponibili, int [] fornitori): i parametri in ingresso sono utlizzati per settare il valore dei corrispondenti attributi. Inoltre, il costruttore deve generare un codice univoco che identifica il prodotto e memorizzarlo nell attributo code. public int trovafornitore(): restituisce il valore memorizzato nella prima entry dell array fornitori. Classe di nome Ordine Rappresenta l ordine effettuato ad un fornitore. int codprodotto: rappresenta il codice del fornitore int codfornitore: rappresenta il prodotto richiesto int code: rappresenta un codice che identifica univocamente l ordine effettuato public Ordine(int codprodotto, int codfornitore): i parametri in ingresso sono utlizzati per settare il valore dei corrispondenti attributi. Inoltre, viene generato un codice univoco che identifica l ordine e viene memorizzato nell attributo code. Classe di nome Gestore Rappresenta il gestore del magazzino Prodotto vetprodotti[]: rappresenta la lista dei prodotti in magazzino Ordine vetordini []: rappresenta la lista degli ordini effettuati ai fornitori public Gestore (int dimprodotti, int dimordini): il costruttore deve creare l array di oggetti di classe Prodotto della dimensione specificata da dimprodotti. Inoltre, deve creare l array di oggetti di classe Ordine della dimensione specificata da dimordini. public void addprodotto(prodotto newprod) throws MyException: Il metodo controlla se c è spazio disponibile nell array vetprodotti per l inserimento di un nuovo prodotto. In caso non sia disponibile spazio viene sollevata una eccezione di tipo MyException. Viceversa viene inserito nell array vetprodotti il prodotto specificato da newprod. public void ordini() throws MyException: Il metodo scandisce l array vetprodotti e per ogni prodotto controlla che il numero di pezzi disponibili sia maggiore di zero. Nel caso in cui non ci siano pezzi disponibili per un dato prodotto, controlla se c è spazio per un nuovo ordine nell array vetordini. Nel caso non ci sia spazio viene generata una eccezione di tipo MyException, viceversa viene creato un nuovo ordine e viene inserito nell array vetordini. In particolare, l ordine deve include il codice del prodotto ed il codice del fornitore.
Domanda 4 Si progetti ed implementi un componente software FiltroEsame che implementa un filtro. Il componente software prende due argomenti da linea di comando. Il primo argomento è il nome del file di testo di ingresso, il secondo argomento è il nome del file di testo in uscita. Il file di testo di ingresso si suppone organizzato per righe in accordo al formato specificato <destinazione> <num> <num> <num> <num> <num> <num>... Ogni riga inizia con un campo <destinazione> ed è seguita da uno o più campi <num>. In particolare, <destinazione> è una stringa che può contenere in alternativa o la parola video o la parola file, mentre <num> rappresenta un intero positivo. Il componente deve leggere tutte le righe del file di testo di ingresso e per ogni riga deve effettuare la somma dei valori interi rappresentati dai campi <num>. Se il campo <destinazione> rappresenta la stringa video il valore della somma deve essere stampato a video, viceversa se il valore del campo <destinazione> rappresenta la stringa file allora il valore della somma deve essere salvato sul file di uscita. Domanda 5 Si richiede di progettare ed implementare un componente software che consenta la gestione di una rubrica telefonica. Ogni voce memorizzata nella rubrica è caratterizzata dal nome (Stringa) e dal numero di telefono (Stringa). Ai fini dell applicazione due voci nella rubrica sono equivalenti se si riferiscono allo stesso nome. Inoltre, ai fini dell applicazione si impone un ordinamento fra le voci in rubrica determinato dall ordinamento alfabetico dell attributo nome. Si richiede di implementare la rubrica telefonica come albero binario di ricerca. Il componente deve consentire di: 1) Inserire una nuova voce in rubrica specificando nome e numero di telefono 2) dato un nome restituire il numero di telefono. Se il nome non è presente in rubrica deve essere sollevata una eccezione di tipo RunTimeException.