edutecnica

Classi astratte ed interfacce : esercizi risolti


Esercizio 1

Realizza un programma che sia in grado di valutare il volume di oggetti tridimensionali come cilindri e parallelepipedi basandosi sul valore della loro area e dell'altezza. Delegare i metodi comuni, come il calcolo e la stampa del volume ad una classe astratta.

Esercizio 2

Scrivi un programma che simuli il lancio di un dado e di una moneta stampandone il risultato; con e senza l'utilizzo di una classe astratta che rappresenti i comportamenti comuni degli oggetti dado e moneta istanziati.

Esercizio 3

Scrivi un programma che dato un numero intero in ingresso vengano restituiti un oggetto rappresentativo del quadrato del numero dato e un oggetto rappresentativo del cubo del numero assegnato. Implementa l'algoritmo attraverso l'uso di una interfaccia comune, che possa evidenziare il comportamento del polimorfismo.

Esercizio 4

Scrivi un programma che sia in grado di istanziare degli oggetti 'distributori di benzina' di cui sia nota la città, il proprietario, la capacità e la benzina attualmente contenuta nel distributore. Dell'oggetto Distributore, deve essere possibile simulare le operazioni di erogazione del carburante e dei corrispondenti incassi. Implementa una interfaccia Comparable, in modo da consentire il confronto tra 2 distributori in base alla capacità del serbatoio di carburante.

Esercizio 5

Definisci una interfaccia 'operazione' e le sue classi derivate( sub. div, mul) in modo che da ciascuna sia possibile eseguire la corrispondente operazione aritmetica (di addizione, divisione, moltiplicazione) istanziando un oggetto di classe 'operazione' e due operandi. Realizzare anche, una classe astratta che implementi le funzionalità comuni come la stampa a video del risultato.

Esercizio 6

In un'aerodromo si vuol mantenere informazioni sugli aeromobili. Di ogni aeromobile si vuole sapere la sigla (string) che lo identifica.
Gli alianti sono aeromobili caratterizzati da un numero (int) che ne descrive l'efficienza aereodinamica. Degli aerei a motore si vuole sapere la potenza in CV del motopropulsore (double).

Aeromobili dello stesso tipo devono essere confrontabili fra loro in modo da poter stabilire quale sia quello con prestazioni migliori.
Gli alianti si confrontano in base all'efficienza; gli aerei a motore in base alla potenza in CV.

Scrivi un'interfaccia pubblica CMP contenente un metodo boolean superiore (CMP x) per verificare se un aeromobile (this) è superione adun altro x come prestazioni. Il metodo deve sempre restituire false se x=null o se gli oggetti coinvolti nel confronto non sono dello stesso tipo.

Scrivi tre classi pubbliche: aeromobile (A) aliante (AL) ed aereomotore (AM) ciascuna con un metodo get pubblico per accedere all'attributo specifico della classe.
Ogni classe deve fornire anche:un costruttore, i metodi equals e toString.
Il codice scritto deve rispettare i seguenti vincoli:
— La classe aeromobile (A) deve implementare l'interfaccia CMP.
— Aliante (AL) ed aereomotore (AM) devono estendere aeromobile (A).
— Deve esserci almeno una classe astratta.

Esercizio 7

Realizza una opportuna gerarchia di classi per modellare una collezione (C) identificata da un nome, da un luogo, da un insieme di opere d'arte e dalle informazioni relative al loro ingombro.
Radice della gerarchia è la classe astratta operadarte (OD) contenente :
— i campi protetti titolo artista
— il costruttore
— il metodo public abstract double printingombro() che restituisce l'ingombro dell'opera
— il metodo public boolean equals(Object o) che verifica se due opere d'arte sono uguali ed altri metodi di interesse.
La sottoclasse quadro (Q) ha due variabili aggiuntive:altezza e larghezza che identificano la misura del quadro.
La sottoclasse scultura (S) ha 3 variabili aggiuntive altezza larghezza e profondità che identificano le misure della scultura.
Implementare le due classi concretizzando il metodo ingombro().
Realizzare poi, una classe collezione identificata da un nome e da un insieme di opere d'arte scrivere i seguenti metodi: inserire un opera d'arte, stampare la collezione , stampare l'occupazione di una data opera.

Esercizio 8

Si vogliono mantenere le informazioni su un deposito di contenitori di liquidi.
Ogni contenitore (C) è dotato di un codice univoco; i contenitori possono essere di due tipi: lattine (L) e bidoni (B) entrambe queste categorie sono dotate di un campo nome per identificare il liquido contenuto e di un campo qta per dichiarare la quantità contenuta.
E' richiesta la presenza di una interfaccia CMP che contenga un metodo confronta() in grado di effettuare un confronto di peso fra due contenitori omologhi (L o B) considerando che i bidoni hanno sempre una quantità di liquido stoccato maggiore delle lattine.
Realizzare poi una classe U (utils) contenente un metodo C[] filtra(C[] T, C c) che riceve in ingresso un vettore T di contenitori ed un contenitore campione.
Il metodo filtra deve restituire il vettore T ripulito di tutti i contenitori che contengono lo stesso liquido del contenitore campione (C c) passato come parametro .

Esercizio 9

Definisci una opportuna gerarchia di classi per rappresentare valori numerici: tutte le classi devono implementare l'interfaccia numero (N) contenete i seguenti metodi
abstract double valore() che restituisce il valore associato a un dato numero,
abstract String stampa() che restituisce una stringa che descrive il valore.
Implementare poi le seguenti classi concrete:

la classe intero (I) che implementa numero e rappresenta un valore intero contiene oltre ai metodi ereditati i seguenti elementi:
una variabile di istanza valore:private int v che memorizza il valore intero associato all'oggetto
un costruttore pubblico ad un argomento valore che assegna il valore alla variabile di istanza valore.
Il metodo pubblico è divisibile: boolean estd(int v2) che restituisce true se il valore dell'oggetto this è divisibile con il valore associato a v2.
Il metodo pubblico getvalore: int getv() che restituisce il valore associato all'oggetto. il metodo ereditato String stampa() che restituisce una stringa del valore intero associato all'oggetto ed il metodo ereditato valore().

La classe frazione (F), implementa numero e rappresenta una frazione contiene oltre ai metodi ereditati anche i seguenti elementi due variabili di istanza
numeratore : private n(int) e
denominatore : d (int)
un costruttore pubblico con due argomenti:numeratore e denominatore;
il metodo pubblico boolean è-frazione-propria:boolean estfp() che non ha parametri e controlla se la frazione è una frazione propria (cioè rappresenta numeratore / denominatore ).
Il metodo void inversa() che non ha parametri che restituisce la frazione inversa della frazione rappresentata da this, ottenuta scambiando numeratore e denominatore. I i metodi pubblici getn() e getd() che restituiscono numeratore e denominatore. Il metodo ereditato stampa() che restituisce una stringa nella forma (n/d). Il metodo ereditato valore() che restituisce il valore double associato alla frazione. La classe operazione (O) che implementa N e rappresenta una operazione aritmetica tra numeri scelta tra addizione, sottrazione, moltiplicazione e divisione; essa contiene oltre ad i metodi ereditati anche i seguenti elementi: tre variabili di istanza private: op1 (operando 1) op2 (operando 2) char op (operazione) che rappresentano i due operandi e l'operazione scelta tra + - * / ; deve esserci un costruttore pubblico con i tre argomenti op1,op2,op. i metodi pubblici getop1() getop2() e getop(). Il metodo ereditato stampa() che restituisce una una stringa nella forma op1 op op2 senza spazi il metodo ereditato valore che restituisce il valore double calcolato mediante l'espressione .