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 .
Il programma in questione è una appendice di quello già visto nella parte teorica, dove si implementa la classe Figura, possono essere istanziati degli oggetti dalla classe Cyl (cilindro) e dalla classe Para (parallelepipedo) che doranno avere un metodo area() diversificato per classe mentre si è scelto di mantenere in comune nella classe genitrice Figura i metodi per la stampa dell'area e del volume.
Dato che per il calcolo del volume occorre solo l'operazione di moltiplicazione dell'area di base per l'altezza, il calcolo del volume è unificato nella classe Figura (solo per evitare duplicazioni di codice). Si evidenzia come per fare ciò sia necessario dichiarare la variabile alt (altezza) con modificatore protected (per renderla visibile solo alle classi derivate) all'interno della classe Figura dove avviene il calcolo del volume.
import java.io.*;
import java.util.*;
class geo {
private static BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));
public static void main (String args []) {
Scanner input=new Scanner (System.in);
int ch,raggio,altezza,lato;
do{
System.out.print("Cylindro(1) o parallelogramma(2) (0) per terminare:");
ch=input.nextInt();
switch(ch){
case 1: System.out.print("ins.raggio per il cerchio di base:");
raggio=input.nextInt();
System.out.print("ins.altezza del cyl:");
altezza=input.nextInt();
Cyl c = new Cyl(raggio,altezza);
c.stampaArea();
c.stampaVolume();
break;
case 2: System.out.print("ins.lato per il quadrato di base:");
lato=input.nextInt();
System.out.print("ins.altezza del para:");
altezza=input.nextInt();
Para p = new Para(lato,altezza);
p.stampaArea();
p.stampaVolume();
break;
default:if(ch!=0)System.out.println("non valido");
}//fine switch
}while(ch!=0);
}//fine main
}// fine classe geo
abstract class Figura {
abstract double area();
protected int alt;
public double volume(){
return alt*area();
}//fine metodo volume
public void stampaArea() {
System.out.println(area());
}//fine metodo stampaArea
public void stampaVolume() {
System.out.println(volume());
}//fine metodo stampaVolume
}//fine classe Figura
class Cyl extends Figura{
private int ray; Cyl(){ray=0;alt=0;}//costruttore
di deault
Cyl(int r,int h) {ray=r;alt=h;}//costruttore
public double area(){return ray*ray*Math.PI;}
}//fine classe Cyl
class Para extends Figura{
private int lato;
Para(){lato=0;alt=0;}//costruttore di deault
Para(int l,int h) {lato=l;alt=h;}//costruttore
public double area(){return lato*lato;}
}//fine classe Para