[Azienda]
Definire una gerarchia di classi per gestire le informazioni relative
ai dipendenti di una azienda che opera su commessa.
I dipendenti sono distinti in tre categorie: operai, commerciali e
responsabili (di commessa).
- (max ? punti)
Prima di tutto, definire una classe
Commessa per
mantenere i dati di una commessa (cioè, un lavoro
o prodotto commissionato all'azienda):
il codice (una stringa) e un importo in euro (un float)
che è un incentivo per i responsabili
della lavorazione della commessa. Gli oggetti di questa classe devono
essere immutabili.
• Definire la classe base Dipendente
per gestire i dati comuni a tutti i dipendenti: il nome e cognome (una
sola stringa), un importo in euro (un float)
che rappresenta lo stipendio di base e un'altro importo in euro (un float)
che è una addizionale contrattuale. Definire metodi per leggere e
scrivere questi dati. Definire inoltre un metodo che ritorna lo
stipendio e che sarà
eventualmente ridefinito dalle sottoclassi. Lo stipendio è inizialmente
determinato dalla somma dello
stipendio base e l'addizionale contrattuale. Il costruttore della
classe Dipendente deve inizializzare il nome e cognome e
lo stipendio base (l'addizionale è inizializzata a zero).
• Definire una sottoclasse Operaio
che mantiene
la commessa (di tipo Commessa) a cui è assegnato
l'operaio e definisce metodi per leggere e impostare tale informazione.
• Definire una sottoclasse Commerciale
che mantiene l'importo totale delle commesse acquisite in euro (un float)
e definisce un metodo per aggiungere un importo a questo totale e
un'altro metodo per azzerarlo. Lo stipendio è determinato dalla somma
dello stipendio della superclasse e il 3% del totale acquisito.
• Infine, definire una sottoclasse Responsabile
che mantiene l'elenco delle commesse di cui è
responsabile ed ha un metodo per aggiungere una commessa (se non è già
presente), un metodo per rimuovere una commessa dall'elenco e un metodo
boolean isResp(Commessa c) che ritorna true
se
è responsabile della commessa c (due commesse sono uguali
se hanno lo stesso codice). Lo stipendio è determinato dalla somma
dello stipendio della superclasse e gli incentivi relativi a tutte le
commesse di cui
è responsabile.
- (max ? punti) Aggiungere alla classe
Dipendente
un metodo
statico disimpegna che preso in input un array di Dipendente
e una commessa c disimpegna dalla commessa c
tutti i dipendenti (operai e responsabili) dell'array e ritorna
un nuovo array che contiene tutti i dipendenti che erano impegnati
nella commessa c.
[Errori] (
max ? punti)
Il seguente codice Java contiene uno o più errori. Trovare gli errori
e spiegarli. In particolare, dire per ogni errore se si verifica in
compilazione o
durante l'esecuzione.
class Line {
public final String line;
public Line(String l) { line = l; }
public void print() { System.out.println(line); }
}
class DoubleLine extends Line {
public final String line2;
public DoubleLine(String l, String l2) {
line = l;
line2 = l2;
}
public void print() {
print();
System.out.println(line2);
}
}
public class Test {
public static void main(String[] args) {
Line[] linee = new DoubleLine[5];
linee[0] = new Line("prima");
linee[3] = new DoubleLine("A", "B");
linee[3].print();
linee[2].print();
}
}
[Prefix_free]
Un insieme di stringhe si dice
prefix free se nessuna stringa
dell'insieme
è un prefisso di un'altra stringa dell'insieme. Ad esempio, l'insieme
{"terre",
"terrazzo"} è prefix free mentre l'insieme
{"terre",
"terrazzo", "terreno"} non è prefix free,
perché
"terre" è un prefisso di
"terreno".
Due stringhe uguali sono l'una il prefisso dell'altra.
- (max ? punti) Definire una classe
PrefixFree
per gestire insiemi di stringhe
prefix free. Il costruttore inizializza l'insieme come vuoto. La classe
deve avere
un metodo add che permette di aggiungere una stringa
all'insieme se la stringa non viola la proprietà di prefix freeness
e ritorna true, altrimenti non modifica l'insieme e
ritorna false.
- (max ? punti)
Aggiungere alla classe
PrefixFree un metodo extensions
che
presa una stringa p ritorna in un nuovo array tutte le
stringhe s
dell'insieme tali che p è un prefisso di s.
- (max ? punti)
Sfruttando la classe
PrefixFree scrivere una programma
che legge
dalla linea di comando due pathnames di file di testo infile,
outfile e una stringa p e se le linee
del file infile sono un insieme prefix free allora
scrive nel file outfile le stringhe ritornate dal metodo extensions
applicato
alla stringa p, altrimenti stampa "Non è prefix
free" e termina.
Ecco un esempio:
Contenuto infile Stringa p Contenuto outfile
programma oggetti oggetti e metodi
oggetti e metodi oggettivo
classi e oggetti
oggettivo