Programmazione/Progetti/Architettura3D/Stesura I

Da WikiDsy.
  //Gioe
  import prog.utili.Sequenza;
  import java.lang.Math;
  
  class Sfera extends Figura3D{
  	//CAMPI"
  	private double[] parametri = new double[1];"
  	"
  	//COSTRUTTORI"
  	/**"
  		Costruisce un oggetto Sfera di raggio pari a quello fornito come argomento."
  		@param raggio il raggio della sfera."
  		@throws Figura3DException quando il valore del raggio è negativo o zero."
  		*/ "
  	public Sfera(double raggio){"
  		parametri[0] = raggio;"
  		if(parametri[0] <= 0.0)"
  			throw new Figura3DException(""Sfera: parametro errato!"");"
  	}"
  	"
  	//METODI"
  	/**"
       Restituisce i parametri dimensionali che definicono la sfera.
       
       @return un array contenente il valore dei parametri
       dimensionali.
    */
  	public double[] getParametri(){"
  		return parametri;"
  	}"
  	"
  	/**"
       Modifica i parametri dimensionali che definicono la sfera.
       
       @param param un array contenente i valori dei nuovi parametri.
       @throws Figura3DException quando il valore di almeno uno dei
       parmetri è negativo o zero.
    */
  	public void setParametri(double[] param){"
  		if(param[0] > 0.0)"
  			parametri = param;"
  		else"
  			throw new Figura3DException(""Sfera: parametro errato!"");"
  	}"
  	"
  	/**"
       Restituisce il volume della sfera.
    */
  	public double getVolume(){"
  		return 4*Math.PI*Math.pow(parametri[0], 3)/3;"
  	}"
  	"
  	/**"
       Restituisce la superficie della figura 3D.
    */
  	public double getSuperficie(){"
  		return 4*Math.PI*Math.pow(parametri[0], 2);"
  	}"
  	"
  	/**"
  	 Restituisce true se la figura 3D fornita come argomento è una sfera"
  	 ed ha raggio uguale alla sfera che esegue il metodo, false altrimenti"
  	 */"
  	public boolean equals(Figura3D altra){"
  		if(altra instanceof Sfera){"
  			Sfera sf = (Sfera) altra;"
  			return this.parametri[0] == sf.parametri[0];"
  		}"
  		else"
  			return false;"
  	}"
  	"
  	/**"
  	 Restituisce true se l'oggetto fornito come argomento è una sfera"
  	 ed ha raggio uguale alla sfera che esegue il metodo, false altrimenti"
  	 */"
  	public boolean equals(Object o){"
  		if(o instanceof Figura3D)"
  			return this.equals((Figura3D) o);"
  		else"
  			return false;"
  	}"
  	"
  	/**"
  	 Restituisce una stringa che descrive la sfera."
  	*/"
  	public String toString(){"
  		return ""Sfera: raggio = "" + parametri[0];"
  	}"
  }
  
  class Cilindro extends Figura3D{
  	//CAMPI"
  	private double[] parametri = new double[2];"
  	"
  	//COSTRUTTORI"
  	/**"
  		Costruisce un oggetto cilindro con parametri pari a quelli forniti come argomento."
  		@throws Figura3DException quando il valore di almeno uno dei parametri"
  		è negativo o zero."
  		*/ "
  	public Cilindro(double raggio, double altezza){"
  		parametri[0] = raggio;"
  		parametri[1] = altezza;"
  		if(parametri[0] <= 0.0 || parametri[1] <= 0.0)"
  			throw new Figura3DException(""Cilindro: parametro errato!"");"
  	}"
  	"
  	//METODI"
  	/**"
       Restituisce i parametri dimensionali che definicono il cilindro.
       
       @return un array contenente il valore dei parametri
       dimensionali.
    */
  	public double[] getParametri(){"
  		return parametri;"
  	}"
  	"
  	/**"
       Modifica i parametri dimensionali che definicono il cilindro.
       
       @param param un array contenente i valori dei nuovi parametri.
       @throws Figura3DException quando il valore di almeno uno dei
       parmetri è negativo o zero.
    */
  	public void setParametri(double[] param){"
  		if(param[0] > 0.0 && param[1] > 0.0)"
  			parametri = param;"
  		else"
  			throw new Figura3DException(""Cilindro: parametro errato!"");"
  	}"
  	"
  	/** Restituisce il volume del cilindro."
  	*/"
  	public double getVolume(){"
  		return Math.PI*Math.pow(parametri[0], 2)*parametri[1];"
  	}"
  	"
  	/** Restituisce la superficie del cilindro */"
  	public double getSuperficie(){"
  		return 2*Math.PI*parametri[0]*parametri[1];"
  	}"
  	"
  	/**"
  	 Restituisce true se la figura 3D fornita come argomento è un cilindro"
  	 ed ha i parametri uguali al cilindro che esegue il metodo, false altrimenti"
  	 */"
  	public boolean equals(Figura3D altra){"
  		if(altra instanceof Cilindro){"
  			Cilindro cil = (Cilindro) altra;"
  			return this.parametri[0] == cil.parametri[0] && this.parametri[1] == cil.parametri[1];"
  		}"
  		else"
  			return false;"
  	}"
  	"
  	/**"
  	 Restituisce true se l'oggetto fornito come argomento è un cilindro"
  	 ed ha i parametri uguali al cilindro che esegue il metodo, false altrimenti"
  	 */"
  	public boolean equals(Object o){"
  		if(o instanceof Figura3D)"
  			return this.equals((Figura3D) o);"
  		else"
  			return false;"
  	}"
  	"
  	/** Restituisce una stringa che descrive il cilindro */"
  	public String toString(){"
  		return ""Cilindro: raggio = "" + parametri[0] + "", altezza = "" + parametri[1];"
  	}"
  }
  
  class Parallelepipedo extends Figura3D{
  	//CAMPI"
  	private double[] parametri = new double[3];"
  	"
  	//COSTRUTTORI"
  	/**"
  		Costruisce un oggetto parallelepipedo con parametri pari a quelli forniti come argomento."
  		@throws Figura3DException quando il valore di almeno uno dei parametri"
  		è negativo o zero."
  		*/"
  	public Parallelepipedo(double base, double spessore, double altezza){"
  		parametri[0] = base;"
  		parametri[1] = spessore;"
  		parametri[2] = altezza;"
  		if(parametri[0] <= 0.0 || parametri[1] <= 0.0 || parametri[2] <= 0.0)"
  			throw new Figura3DException(""Parallelepipedo: parametro errato!"");"
  	}"
  	"
  	//METODI"
  	/**"
       Restituisce i parametri dimensionali che definicono il parallelepipedo.
       
       @return un array contenente il valore dei parametri
       dimensionali.
    */
  	public double[] getParametri(){"
  		return parametri;"
  	}"
  	"
  	/**"
       Modifica i parametri dimensionali che definicono il parallelepipedo.
       
       @param param un array contenente i valori dei nuovi parametri.
       @throws Figura3DException quando il valore di almeno uno dei
       parmetri è negativo o zero.
    */
  	public void setParametri(double[] param){"
  		if(param[0] > 0.0 && param[1] > 0.0 && param[2] > 0.0)"
  			parametri = param;"
  		else"
  			throw new Figura3DException(""Parallelepipedo: parametro errato!"");"
  	}"
  	"
  	/**"
  	 Restituisce il volume del parallelepipedo."
  	*/"
  	public double getVolume(){"
  		return parametri[0]*parametri[1]*parametri[2];"
  	}"
  	"
  	/**"
  	 Restituisce la superficie del parallelepipedo."
  	 */"
  	public double getSuperficie(){"
  		return 2*(parametri[2]*(parametri[0]+parametri[1])+parametri[0]*parametri[1]);"
  	}"
  	"
  	/**"
  	 Restituisce true se la figura 3D fornita come argomento è un parallelepipedo"
  	 ed ha i parametri uguali al parallelepipedo che esegue il metodo, false altrimenti"
  	 */"
  	public boolean equals(Figura3D altra){"
  		if(altra instanceof Parallelepipedo){"
  			Parallelepipedo par = (Parallelepipedo) altra;"
  			return this.parametri[0] == par.parametri[0] && this.parametri[1] == par.parametri[1] && this.parametri[2] == par.parametri[2];"
  		}"
  		else"
  			return false;"
  	}"
  	"
  	/**"
  	 Restituisce true se l'oggetto fornito come argomento è un parallelepipedo"
  	 ed ha i parametri uguali al parallelepipedo che esegue il metodo, false altrimenti"
  	 */"
  	public boolean equals(Object o){"
  		if(o instanceof Figura3D)"
  			return this.equals((Figura3D) o);"
  		else"
  			return false;"
  	}"
  	"
  	/**"
  	 Restistuisce una stringa che descrive il parallelepipedo."
  	 */"
  	public String toString(){"
  		return ""Parallelepipedo: latoA = "" + parametri[0] + "", latoB= "" + parametri[1] + "", altezza= "" + parametri[2];"
  	}"
  }
  
  class Cubo extends Figura3D{
  	//CAMPI"
  	private double[] parametri = new double[1];"
  	"
  	//COSTRUTTORI"
  	/**"
  		Costruisce un oggetto cubo con parametri pari a quelli forniti come argomento."
  		@throws Figura3DException quando il valore di almeno uno dei parametri"
  		è negativo o zero."
  		*/"
  	public Cubo(double lato){"
  		parametri[0] = lato;"
  		if(parametri[0] <= 0.0)"
  			throw new Figura3DException(""Cubo: parametro errato!"");"
  	}"
  	"
  	//METODI"
  	/**"
       Restituisce i parametri dimensionali che definicono il cubo.
       
       @return un array contenente il valore dei parametri
       dimensionali.
    */
  	public double[] getParametri(){"
  		return parametri;"
  	}"
  	"
  	/**"
       Modifica i parametri dimensionali che definicono il cubo.
       
       @param param un array contenente i valori dei nuovi parametri.
       @throws Figura3DException quando il valore di almeno uno dei
       parmetri è negativo o zero.
    */
  	public void setParametri(double[] param){"
  		if(param[0] > 0.0)"
  			parametri = param;"
  		else"
  			throw new Figura3DException(""Cubo: parametro errato!"");"
  	}"
  	"
  	/**"
  	 Restituisce il volume del cubo."
  	 */"
  	public double getVolume(){"
  		return Math.pow(parametri[0], 3);"
  	}"
  	"
  	/**"
  	 Restituisce la superficie del cubo."
  	 */"
  	public double getSuperficie(){"
  		return 6*Math.pow(parametri[0], 2);"
  	}"
  	"
  	/**"
  	 Restituisce true se la figura 3D fornita come argomento è un cubo"
  	 ed ha i parametri uguali al cubo che esegue il metodo, false altrimenti"
  	 */"
  	public boolean equals(Figura3D altra){"
  		if(altra instanceof Cubo){"
  			Cubo cub = (Cubo) altra;"
  			return this.parametri[0] == cub.parametri[0];"
  		}"
  		else"
  			return false;"
  	}"
  	"
  	/**"
  	 Restituisce true se l'oggetto fornito come argomento è un cubo"
  	 ed ha i parametri uguali al cubo che esegue il metodo, false altrimenti"
  	 */"
  	public boolean equals(Object o){"
  		if(o instanceof Figura3D)"
  			return this.equals((Figura3D) o);"
  		else"
  			return false;"
  	}"
  	"
  	/**"
  	 Restituisce una stringa che descrive il cubo."
  	 */"
  	public String toString(){"
  		return ""Cubo: lato = "" + parametri[0];"
  	}"
  }
  
  class Cono extends Figura3D{
  	//CAMPI"
  	private double[] parametri = new double[2];"
  	"
  	//COSTRUTTORI"
  	/**"
  		Costruisce un oggetto cono con parametri pari a quelli forniti come argomento."
  		@throws Figura3DException quando il valore di almeno uno dei parametri"
  		è negativo o zero."
  		*/"
  	public Cono(double raggio, double altezza){"
  		parametri[0] = raggio;"
  		parametri[1] = altezza;"
  		if(parametri[0] <= 0.0 || parametri[1] <= 0.0)"
  			throw new Figura3DException(""Cono: parametro errato!"");"
  	}"
  	"
  	//METODI"
  	/**"
       Restituisce i parametri dimensionali che definicono il cono.
       
       @return un array contenente il valore dei parametri
       dimensionali.
    */
  	public double[] getParametri(){"
  		return parametri;"
  	}"
  	"
  	/**"
       Modifica i parametri dimensionali che definicono il cono.
       
       @param param un array contenente i valori dei nuovi parametri.
       @throws Figura3DException quando il valore di almeno uno dei
       parmetri è negativo o zero.
    */
  	public void setParametri(double[] param){"
  		if(param[0] > 0.0 && parametri[1] > 0.0)"
  			parametri = param;"
  		else"
  			throw new Figura3DException(""Cono: parametro errato!"");"
  	}"
  	"
  	/**"
  	 Restituisce il volume del cubo."
  	 */"
  	public double getVolume(){"
  		return Math.PI*Math.pow(parametri[0], 2)*parametri[1]/3;"
  	}"
  	"
  	/**"
  	 Restituisce la superficie del cubo."
  	 */"
  	public double getSuperficie(){"
  		return Math.PI*parametri[0]*Math.sqrt(Math.pow(parametri[0], 2)+Math.pow(parametri[1], 2));"
  	}"
  	"
  	/**"
  	 Restituisce true se la figura 3D fornita come argomento è un cono"
  	 ed ha i parametri uguali al cono che esegue il metodo, false altrimenti"
  	 */"
  	public boolean equals(Figura3D altra){"
  		if(altra instanceof Cono){"
  			Cono con = (Cono) altra;"
  			return this.parametri[0] == con.parametri[0] && this.parametri[1] == con.parametri[1];"
  		}"
  		else"
  			return false;"
  	}"
  	"
  	/**"
  	 Restituisce true se l'oggetto fornito come argomento è un cono"
  	 ed ha i parametri uguali al cono che esegue il metodo, false altrimenti"
  	 */"
  	public boolean equals(Object o){"
  		if(o instanceof Figura3D)"
  			return this.equals((Figura3D) o);"
  		else"
  			return false;"
  	}"
  	"
  	/**"
  	 Restituisce una stringa che descrive il cono."
  	*/"
  	public String toString(){"
  		return ""Cono: raggio = "" + parametri[0] + "", altezza= "" + parametri[1];"
  	}"
  }
  
  class TroncoDiCono extends Figura3D{
  	//CAMPI"
  	private double[] parametri = new double[3];"
  	"
  	//COSTRUTTORI"
  	/**"
  		Costruisce un oggetto tronco di cono con parametri pari a quelli forniti come argomento."
  		@throws Figura3DException quando il valore di almeno uno dei parametri"
  		è negativo o zero."
  		*/"
  	public TroncoDiCono(double grande, double piccolo, double altezza){"
  		parametri[0] = grande;"
  		parametri[1] = piccolo;"
  		parametri[2] = altezza;"
  		if(parametri[0] <= 0.0 || parametri[1] <= 0.0 || parametri[2] <= 0.0)"
  			throw new Figura3DException(""Tronco di cono: parametro errato!"");"
  	}"
  	"
  	//METODI"
  	/**"
       Restituisce i parametri dimensionali che definicono il tronco di cono.
       
       @return un array contenente il valore dei parametri
       dimensionali.
    */
  	public double[] getParametri(){"
  		return parametri;"
  	}"
  	"
  	/**"
       Modifica i parametri dimensionali che definicono il tronco di cono.
       
       @param param un array contenente i valori dei nuovi parametri.
       @throws Figura3DException quando il valore di almeno uno dei
       parmetri è negativo o zero.
    */
  	public void setParametri(double[] param){"
  		if(param[0] > 0.0 && param[1] > 0.0 && param[2] > 0.0)"
  			parametri = param;"
  		else"
  			throw new Figura3DException(""Tronco di cono: parametro errato!"");"
  	}"
  	"
  	/**"
  	 Restituisce il volume del tronco di cono."
  	 */"
  	public double getVolume(){"
  		return Math.PI/3*(parametri[0]*parametri[1]+Math.pow(parametri[0], 2)+Math.pow(parametri[1], 2))*parametri[2];"
  	}"
  	"
  	/**"
  	 Restituisce la superficie del tronco di cono."
  	 */"
  	public double getSuperficie(){"
  		return Math.PI*(parametri[0]+parametri[1])*Math.sqrt(Math.pow(parametri[0]-parametri[1], 2)+Math.pow(parametri[2], 2));"
  	}"
  	"
  	/**"
  	 Restituisce true se la figura 3D fornita come argomento è un tronco di cono"
  	 ed ha i parametri uguali al tronco di cono che esegue il metodo, false altrimenti"
  	 */"
  	public boolean equals(Figura3D altra){"
  		if(altra instanceof TroncoDiCono){"
  			TroncoDiCono tdc = (TroncoDiCono) altra;"
  			return this.parametri[0] == tdc.parametri[0] && this.parametri[1] == tdc.parametri[1] && this.parametri[2] == tdc.parametri[2];"
  		}"
  		else"
  			return false;"
  	}"
  	"
  	/**"
  	 Restituisce true se l'oggetto fornito come argomento è un tronco di cono"
  	 ed ha i parametri uguali al tronco di cono che esegue il metodo, false altrimenti"
  	 */"
  	public boolean equals(Object o){"
  		if(o instanceof Figura3D)"
  			return this.equals((Figura3D) o);"
  		else"
  			return false;"
  	}"
  	"
  	/**"
  	 Restituisce una stringa che descrive il tronco di cono."
  	 */"
  	public String toString(){"
  		return ""Tronco di cono: raggio grande= "" + parametri[0] + "", raggio piccolo= "" + parametri[1] + "", altezza= "" + parametri[2];"
  	}"
  	"
  }
  
  /**
   Segnala una figura 3d contenenteparametri minori o uguali a zero.
   */
  class Figura3DException extends RuntimeException{
  	public Figura3DException(){"
  		super();"
  	}"
  	"
  	public Figura3DException(String messaggio){"
  		super(messaggio);"
  	}"
  }
  
  class Architettura3D{
  	"
  	//CAMPI"
  	private Sequenza seq;"
  	"
  	//COSTRUTTORI"
  	/**"
  	 Costruisce un'Architettura 3d vuota."
  	 */"
  	public Architettura3D(){"
  		seq = new Sequenza();"
  	}"
  	"
  	//METODI"
  	/**"
  	 Aggiunge la figura 3D fornita come argomento in un insieme."
  	 */"
  	public void addFigura3D(Figura3D figura){"
  		seq.add(figura);"
  	}"
  	"
  	/**"
  	 Restituisce un array contenente le figure 3D inserite dal metodo"
  	  addFigura3D(Figura3D figura) ."
  	 */"
  	public Figura3D[] getFigure3D(){"
  		Object[] array = seq.toArray();"
  		Figura3D[] fig = new Figura3D[array.length];"
  		for(int i = 0; i < array.length; i++){"
  			fig[i] = (Figura3D) array[i];"
  		}"
  		return fig;"
  	}"
  	"
  	/**"
  	 Restituisce la somma dei volumi di tutte le figure 3D del tipo specificato come argomento:"
  	  - ""SC"" per Sfere e cilindri."
  	  - ""PC"" per Parallelepipedi e cubi."
  	  - ""TC"" per Coni e Tronchi di cono."
  	  - ""TUTTE"" per tutti i tipi di figure 3D."
  	 @throws TipoNonPrevistoException quando l'argomento è diverso dalle stringhe sopracitate."
  	*/"
  	public double getVolume(String tipoFigura) throws TipoNonPrevistoException{"
  		double volumi = 0.0;"
  		if(tipoFigura.equals(""SC"")){ //Sfere e Cilindri"
  			Figura3D[] array = this. getFigure3D();"
  			for(int i = 0; i< array.length; i++){"
  				if(array[i] instanceof Sfera){"
  					Sfera sfera = (Sfera) array[i];"
  					volumi = volumi + sfera.getVolume();"
  				}"
  				else if(array[i] instanceof Cilindro){"
  					Cilindro cilindro = (Cilindro) array[i];"
  					volumi = volumi + cilindro.getVolume();"
  				}"
  			}"
  		}"
  		else if(tipoFigura.equals(""PC"")){ //Parallelepipedi e Cubi"
  			Figura3D[] array = this. getFigure3D();"
  			for(int i = 0; i< array.length; i++){"
  				if(array[i] instanceof Parallelepipedo){"
  					Parallelepipedo para = (Parallelepipedo) array[i];"
  					volumi = volumi + para.getVolume();"
  				}"
  				else if(array[i] instanceof Cubo){"
  					Cubo cubo = (Cubo) array[i];"
  					volumi = volumi + cubo.getVolume();"
  				}"
  			}"
  		}"
  		else if(tipoFigura.equals(""TC"")){ //Coni e tronchi di cono"
  			Figura3D[] array = this. getFigure3D();"
  			for(int i = 0; i< array.length; i++){"
  				if(array[i] instanceof TroncoDiCono){"
  					TroncoDiCono tronco = (TroncoDiCono) array[i];"
  					volumi = volumi + tronco.getVolume();"
  				}"
  				else if(array[i] instanceof Cono){"
  					Cono cono = (Cono) array[i];"
  					volumi = volumi + cono.getVolume();"
  				}"
  			}"
  		}"
  		"
  		else if(tipoFigura.equals(""TUTTE"")){ //Tutte le figure (riscorsivo)"
  			volumi = this.getVolume(""SC"")+this.getVolume(""PC"")+this.getVolume(""TC"");"
  		}"
  			else{"
  				throw new TipoNonPrevistoException(""Il tipo "" + tipoFigura + "" non e' previsto!"");"
  			}"
  		return volumi;"
  	}"
  	"
  	/**"
  	 Restituisce la somma delle superficie di tutte le figure 3D del tipo specificato come argomento:"
  	  - ""SC"" per Sfere e cilindri."
  	  - ""PC"" per Parallelepipedi e cubi."
  	  - ""TC"" per Coni e Tronchi di cono."
  	  - ""TUTTE"" per tutti i tipi di figure 3D."
  	 @throws TipoNonPrevistoException quando l'argomento è diverso dalle stringhe sopracitate."
  	*/"
  	public double getSuperficie(String tipoFigura) throws TipoNonPrevistoException{"
  		double superficie = 0.0;"
  		if(tipoFigura.equals(""SC"")){ //Sfere e Cilindri"
  			Figura3D[] array = this. getFigure3D();"
  			for(int i = 0; i< array.length; i++){"
  				if(array[i] instanceof Sfera){"
  					Sfera sfera = (Sfera) array[i];"
  					superficie = superficie + sfera.getSuperficie();"
  				}"
  				else if(array[i] instanceof Cilindro){"
  					Cilindro cilindro = (Cilindro) array[i];"
  					superficie = superficie + cilindro.getSuperficie();"
  				}"
  			}"
  		}"
  		else if(tipoFigura.equals(""PC"")){ //Parallelepipedi e Cubi"
  			Figura3D[] array = this. getFigure3D();"
  			for(int i = 0; i< array.length; i++){"
  				if(array[i] instanceof Parallelepipedo){"
  					Parallelepipedo para = (Parallelepipedo) array[i];"
  					superficie = superficie + para.getSuperficie();"
  				}"
  				else if(array[i] instanceof Cubo){"
  					Cubo cubo = (Cubo) array[i];"
  					superficie = superficie + cubo.getSuperficie();"
  				}"
  			}"
  		}"
  		else if(tipoFigura.equals(""TC"")){ //Coni e Trinchi di cono."
  			Figura3D[] array = this. getFigure3D();"
  			for(int i = 0; i< array.length; i++){"
  				if(array[i] instanceof TroncoDiCono){"
  					TroncoDiCono tronco = (TroncoDiCono) array[i];"
  					superficie = superficie + tronco.getSuperficie();"
  				}"
  				else if(array[i] instanceof Cono){"
  					Cono cono = (Cono) array[i];"
  					superficie = superficie + cono.getSuperficie();"
  				}"
  			}"
  		}"
  		else if(tipoFigura.equals(""TUTTE"")){ //Tutte le figure3d (ricorsivo)"
  			superficie = this.getSuperficie(""SC"")+this.getSuperficie(""PC"")+this.getSuperficie(""TC"");"
  		}"
  			else{"
  				throw new TipoNonPrevistoException(""Il tipo "" + tipoFigura + "" non e' previsto!"");"
  			}"
  		return superficie;"
  	}"
  	"
  	/**"
  	 Restituisce il volume medio di tutte le figure 3D."
  	*/"
  	public double getVolumeMedio() throws TipoNonPrevistoException{"
  		return this.getVolume(""TUTTE"")/seq.size();"
  	}"
  	"
  	/**"
  	 Restituisce la superficie media di tutte le figure 3D."
  	 */"
  	public double getSuperficieMedia() throws TipoNonPrevistoException{"
  		return this.getSuperficie(""TUTTE"")/seq.size();"
  	}"
  	"
  	/**"
  	 Restituisce la Figura3D fornita come argomento se è presente nell'insieme, null altrimenti."
  	*/"
  	public Figura3D trova(Figura3D fig){"
  		Figura3D ritorno = null;"
  		if(fig instanceof Sfera){ //se è una sfera"
  			ritorno = (Sfera) seq.find((Sfera) fig);"
  		}"
  		else if(fig instanceof Cilindro){ //se è un cilindro"
  			ritorno = (Cilindro) seq.find((Cilindro) fig);"
  		}"
  		else if(fig instanceof Parallelepipedo){ //se è un parallelepipedo"
  			ritorno = (Parallelepipedo) seq.find((Parallelepipedo) fig);"
  		}"
  		else if(fig instanceof Cubo){ //se è un cubo"
  			ritorno = (Cubo) seq.find((Cubo) fig);"
  		}"
  		else if(fig instanceof Cono){ //se è un cono"
  			ritorno = (Cono) seq.find((Cono) fig);"
  		}"
  		else if(fig instanceof TroncoDiCono){ //se è un tronco di cono"
  			ritorno = (TroncoDiCono) seq.find((TroncoDiCono) fig);"
  		}"
  		return ritorno; "
  	}"
  }
  
  /**
   Segnala un tipo di Figura3D non previsto.
   */
  class TipoNonPrevistoException extends Exception{
  	public TipoNonPrevistoException(){"
  		super();"
  	}"
  	"
  	public TipoNonPrevistoException(String messaggio){"
  		super(messaggio);"
  	}"
  }