(→Planetas) |
(→Experiência 2) |
||
(19 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
{{TOCright}} | {{TOCright}} | ||
− | + | <!-- exemplos da aula 14 --> | |
== Estações == | == Estações == | ||
− | + | Este exemplo mostra um tipo enumerado na sua versão mais simples, i.e., apenas se indicam os elementos que constituem a enumeração. | |
− | + | <java5> | |
− | + | public enum Estação { | |
+ | PRIMAVERA, VERÃO, OUTONO, INVERNO | ||
+ | } | ||
+ | </java5> | ||
− | == Planetas: | + | == Planetas: 1ª versão == |
− | + | Exemplo adaptado do manual de Java 1.5 da [http://www.sun.com/ Sun Microsystems, Inc.] [http://java.sun.com/j2se/1.5.0/docs/guide/language/enums.html] | |
− | + | <java5> | |
− | + | public enum Planeta { | |
− | + | MERCÚRIO (3.303e+23, 2.4397e6), | |
− | + | VÉNUS (4.869e+24, 6.0518e6), | |
− | + | TERRA (5.976e+24, 6.37814e6), | |
− | + | MARTE (6.421e+23, 3.3972e6), | |
− | + | JÚPITER (1.9e+27, 7.1492e7), | |
− | + | SATURNO (5.688e+26, 6.0268e7), | |
− | + | URANO (8.686e+25, 2.5559e7), | |
− | + | NEPTUNO (1.024e+26, 2.4746e7), | |
− | + | PLUTÃO (1.27e+22, 1.137e6); | |
− | + | ||
− | + | // constante de gravitação universal | |
− | + | public static final double G = 6.67300E-11; // m³/kg/s² | |
− | + | ||
− | + | private double _massa; // kg | |
− | + | private double _raio; // m | |
− | + | ||
− | + | public double massa() { return _massa; } | |
− | + | public double raio() { return _raio; } | |
− | + | ||
− | + | Planeta(double massa, double raio) { _massa = massa; _raio = raio; } | |
− | + | ||
− | + | // gravidade à superfície | |
− | + | public double gravidade() { return G * _massa / (_raio * _raio); } | |
− | + | ||
− | + | // peso (N) de outra massa (kg) à superfície | |
+ | public double peso(double massa) { return massa * gravidade(); } | ||
+ | } | ||
+ | </java5> | ||
− | == | + | == Experiência 1 == |
=== Programa de Teste === | === Programa de Teste === | ||
− | + | <java5> | |
− | + | public class Teste1 { | |
− | + | public static void main(String[] args) { | |
− | + | System.out.println("** Estações"); | |
− | + | for (Estação e : Estação.values()) | |
− | + | System.out.println(e); | |
− | + | System.out.println("** Planetas"); | |
− | + | for (Planeta p : Planeta.values()) | |
− | + | System.out.println(p); | |
− | + | // Planeta x = new Planeta(2.5e22, 2e6); // erro: tipo não pode ser instanciado | |
− | + | } | |
− | + | } | |
− | + | </java5> | |
− | |||
=== Resultados === | === Resultados === | ||
Line 75: | Line 80: | ||
PLUTÃO | PLUTÃO | ||
− | == | + | == Experiência 2 == |
=== Programa de Teste === | === Programa de Teste === | ||
− | + | <java5> | |
− | + | public class Teste2 { | |
− | + | public static void main(String[] args) { | |
− | + | double pesoNaTerra = Double.parseDouble(args[0]); | |
− | + | double massa = pesoNaTerra / Planeta.TERRA.gravidade(); | |
− | + | for (Planeta p : Planeta.values()) { | |
− | + | System.out.printf("Peso em %s é %f%n", p, p.peso(massa)); | |
− | + | } | |
− | + | } | |
− | + | } | |
+ | </java5> | ||
=== Resultados === | === Resultados === | ||
Line 101: | Line 107: | ||
Peso em NEPTUNO é 92.204574 | Peso em NEPTUNO é 92.204574 | ||
Peso em PLUTÃO é 5.416831 | Peso em PLUTÃO é 5.416831 | ||
+ | |||
+ | == Planetas: 2ª versão == | ||
+ | |||
+ | <java5> | ||
+ | public class NoSurfaceException extends Exception {} | ||
+ | </java5> | ||
+ | <java5> | ||
+ | public enum Planeta { | ||
+ | MERCÚRIO (3.303e+23, 2.4397e6), | ||
+ | VÉNUS (4.869e+24, 6.0518e6), | ||
+ | TERRA (5.976e+24, 6.37814e6), | ||
+ | MARTE (6.421e+23, 3.3972e6), | ||
+ | JÚPITER (1.9e+27, 7.1492e7) { public double peso(double m) throws NoSurfaceException { throw new NoSurfaceException(); } }, | ||
+ | SATURNO (5.688e+26, 6.0268e7) { public double peso(double m) throws NoSurfaceException { throw new NoSurfaceException(); } }, | ||
+ | URANO (8.686e+25, 2.5559e7) { public double peso(double m) throws NoSurfaceException { throw new NoSurfaceException(); } }, | ||
+ | NEPTUNO (1.024e+26, 2.4746e7) { public double peso(double m) throws NoSurfaceException { throw new NoSurfaceException(); } }, | ||
+ | PLUTÃO (1.27e+22, 1.137e6); | ||
+ | |||
+ | // constante de gravitação universal | ||
+ | public static final double G = 6.67300E-11; // m³/kg/s² | ||
+ | |||
+ | private double _massa; // kg | ||
+ | private double _raio; // m | ||
+ | |||
+ | public double massa() { return _massa; } | ||
+ | public double raio() { return _raio; } | ||
+ | |||
+ | Planeta(double massa, double raio) { _massa = massa; _raio = raio; } | ||
+ | |||
+ | // gravidade à superfície | ||
+ | public double gravidade() { return G * _massa / (_raio * _raio); } | ||
+ | |||
+ | // peso (N) de outra massa (kg) à superfície | ||
+ | public double peso(double massa) throws NoSurfaceException { return massa * gravidade(); } | ||
+ | } | ||
+ | </java5> | ||
+ | |||
+ | == Experiência 3 == | ||
+ | |||
+ | === Programa de Teste === | ||
+ | |||
+ | <java5> | ||
+ | public class Teste3 { | ||
+ | public static void main(String[] args) { | ||
+ | double pesoNaTerra = Double.parseDouble(args[0]); | ||
+ | double massa = pesoNaTerra / Planeta.TERRA.gravidade(); | ||
+ | for (Planeta p : Planeta.values()) { | ||
+ | double peso; | ||
+ | try { | ||
+ | peso = p.peso(massa); | ||
+ | System.out.printf("Peso em %s é %f%n", p, peso); | ||
+ | } | ||
+ | catch (NoSurfaceException nse) { | ||
+ | System.out.printf("Peso em %s é difícil de calcular%n", p); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </java5> | ||
+ | |||
+ | === Resultados === | ||
+ | |||
+ | <FONT COLOR="#800000"><B>$ java Teste3</B></FONT> | ||
+ | Peso em MERCÚRIO é 30.598367 | ||
+ | Peso em VÉNUS é 73.304927 | ||
+ | Peso em TERRA é 81.000000 | ||
+ | Peso em MARTE é 30.677712 | ||
+ | Peso em JÚPITER é difícil de calcular | ||
+ | Peso em SATURNO é difícil de calcular | ||
+ | Peso em URANO é difícil de calcular | ||
+ | Peso em NEPTUNO é difícil de calcular | ||
+ | Peso em PLUTÃO é 5.416831 | ||
+ | |||
+ | Nesta listagem pode apreciar-se claramente a criação automática de classes internas anónimas (marcadas a <font color="blue">azul</font>) para comportar a implementação do comportamento especÃfico das instâncias <code>JÚPITER</code>, <code>SATURNO</code>, <code>URANO</code> e <code>NEPTUNO</code>. | ||
+ | |||
+ | <FONT COLOR="#800000"><B>$ ls</B></FONT> | ||
+ | <B>Planeta.java</B> Planeta.class <font color="blue">Planeta$1.class Planeta$2.class Planeta$3.class Planeta$4.class</font> | ||
+ | <B>Teste2.java</B> Teste2.class | ||
+ | |||
+ | [[category:Ensino]] | ||
+ | [[category:PO]] | ||
+ | [[category:PO Exemplos]] | ||
+ | [[category:Java]] |
Este exemplo mostra um tipo enumerado na sua versão mais simples, i.e., apenas se indicam os elementos que constituem a enumeração. <java5>
public enum Estação { PRIMAVERA, VERÃO, OUTONO, INVERNO }
</java5>
Exemplo adaptado do manual de Java 1.5 da Sun Microsystems, Inc. [1] <java5>
public enum Planeta { MERCÚRIO (3.303e+23, 2.4397e6), VÉNUS (4.869e+24, 6.0518e6), TERRA (5.976e+24, 6.37814e6), MARTE (6.421e+23, 3.3972e6), JÚPITER (1.9e+27, 7.1492e7), SATURNO (5.688e+26, 6.0268e7), URANO (8.686e+25, 2.5559e7), NEPTUNO (1.024e+26, 2.4746e7), PLUTÃO (1.27e+22, 1.137e6); // constante de gravitação universal public static final double G = 6.67300E-11; // m³/kg/s² private double _massa; // kg private double _raio; // m public double massa() { return _massa; } public double raio() { return _raio; } Planeta(double massa, double raio) { _massa = massa; _raio = raio; } // gravidade à superfície public double gravidade() { return G * _massa / (_raio * _raio); } // peso (N) de outra massa (kg) à superfície public double peso(double massa) { return massa * gravidade(); } }
</java5>
<java5>
public class Teste1 { public static void main(String[] args) { System.out.println("** Estações"); for (Estação e : Estação.values()) System.out.println(e); System.out.println("** Planetas"); for (Planeta p : Planeta.values()) System.out.println(p); // Planeta x = new Planeta(2.5e22, 2e6); // erro: tipo não pode ser instanciado } }
</java5>
$ java Teste1 ** Estação PRIMAVERA VERÃO OUTONO INVERNO ** Planeta MERCÚRIO VÉNUS TERRA MARTE JÚPITER SATURNO URANO NEPTUNO PLUTÃO
<java5>
public class Teste2 { public static void main(String[] args) { double pesoNaTerra = Double.parseDouble(args[0]); double massa = pesoNaTerra / Planeta.TERRA.gravidade(); for (Planeta p : Planeta.values()) { System.out.printf("Peso em %s é %f%n", p, p.peso(massa)); } } }
</java5>
$ java Teste2 81 Peso em MERCÚRIO é 30.598367 Peso em VÉNUS é 73.304927 Peso em TERRA é 81.000000 Peso em MARTE é 30.677712 Peso em JÚPITER é 204.975160 Peso em SATURNO é 86.347259 Peso em URANO é 73.315303 Peso em NEPTUNO é 92.204574 Peso em PLUTÃO é 5.416831
<java5>
public class NoSurfaceException extends Exception {}
</java5> <java5>
public enum Planeta { MERCÚRIO (3.303e+23, 2.4397e6), VÉNUS (4.869e+24, 6.0518e6), TERRA (5.976e+24, 6.37814e6), MARTE (6.421e+23, 3.3972e6), JÚPITER (1.9e+27, 7.1492e7) { public double peso(double m) throws NoSurfaceException { throw new NoSurfaceException(); } }, SATURNO (5.688e+26, 6.0268e7) { public double peso(double m) throws NoSurfaceException { throw new NoSurfaceException(); } }, URANO (8.686e+25, 2.5559e7) { public double peso(double m) throws NoSurfaceException { throw new NoSurfaceException(); } }, NEPTUNO (1.024e+26, 2.4746e7) { public double peso(double m) throws NoSurfaceException { throw new NoSurfaceException(); } }, PLUTÃO (1.27e+22, 1.137e6); // constante de gravitação universal public static final double G = 6.67300E-11; // m³/kg/s² private double _massa; // kg private double _raio; // m public double massa() { return _massa; } public double raio() { return _raio; } Planeta(double massa, double raio) { _massa = massa; _raio = raio; } // gravidade à superfície public double gravidade() { return G * _massa / (_raio * _raio); } // peso (N) de outra massa (kg) à superfície public double peso(double massa) throws NoSurfaceException { return massa * gravidade(); } }
</java5>
<java5>
public class Teste3 { public static void main(String[] args) { double pesoNaTerra = Double.parseDouble(args[0]); double massa = pesoNaTerra / Planeta.TERRA.gravidade(); for (Planeta p : Planeta.values()) { double peso; try { peso = p.peso(massa); System.out.printf("Peso em %s é %f%n", p, peso); } catch (NoSurfaceException nse) { System.out.printf("Peso em %s é difícil de calcular%n", p); } } } }
</java5>
$ java Teste3 Peso em MERCÚRIO é 30.598367 Peso em VÉNUS é 73.304927 Peso em TERRA é 81.000000 Peso em MARTE é 30.677712 Peso em JÚPITER é difícil de calcular Peso em SATURNO é difícil de calcular Peso em URANO é difícil de calcular Peso em NEPTUNO é difícil de calcular Peso em PLUTÃO é 5.416831
Nesta listagem pode apreciar-se claramente a criação automática de classes internas anónimas (marcadas a azul) para comportar a implementação do comportamento especÃfico das instâncias JÚPITER
, SATURNO
, URANO
e NEPTUNO
.
$ ls Planeta.java Planeta.class Planeta$1.class Planeta$2.class Planeta$3.class Planeta$4.class Teste2.java Teste2.class