(→Planetas: 1ª versão) |
|||
Line 105: | Line 105: | ||
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 == | ||
+ | |||
+ | <B>public</B> <B>enum</B> Planeta { | ||
+ | <FONT COLOR="#000080">MERCÚRIO</FONT> (<FONT COLOR="#800080">3.303e+23</FONT>, <FONT COLOR="#800080">2.4397e6</FONT>), | ||
+ | <FONT COLOR="#000080">VÉNUS</FONT> (<FONT COLOR="#800080">4.869e+24</FONT>, <FONT COLOR="#800080">6.0518e6</FONT>), | ||
+ | <FONT COLOR="#000080">TERRA</FONT> (<FONT COLOR="#800080">5.976e+24</FONT>, <FONT COLOR="#800080">6.37814e6</FONT>), | ||
+ | <FONT COLOR="#000080">MARTE</FONT> (<FONT COLOR="#800080">6.421e+23</FONT>, <FONT COLOR="#800080">3.3972e6</FONT>), | ||
+ | <FONT COLOR="#000080">JÚPITER</FONT> (<FONT COLOR="#800080">1.9e+27</FONT>, <FONT COLOR="#800080">7.1492e7</FONT>) { <B>public</B> <FONT COLOR="#800000">double</FONT> <FONT COLOR="#000080">peso</FONT>(<FONT COLOR="#800000">double</FONT> m) { <B>return</B> <FONT COLOR="#800080">0.0</FONT>; } }, | ||
+ | <FONT COLOR="#000080">SATURNO</FONT> (<FONT COLOR="#800080">5.688e+26</FONT>, <FONT COLOR="#800080">6.0268e7</FONT>) { <B>public</B> <FONT COLOR="#800000">double</FONT> <FONT COLOR="#000080">peso</FONT>(<FONT COLOR="#800000">double</FONT> m) { <B>return</B> <FONT COLOR="#800080">0.0</FONT>; } }, | ||
+ | <FONT COLOR="#000080">URANO</FONT> (<FONT COLOR="#800080">8.686e+25</FONT>, <FONT COLOR="#800080">2.5559e7</FONT>) { <B>public</B> <FONT COLOR="#800000">double</FONT> <FONT COLOR="#000080">peso</FONT>(<FONT COLOR="#800000">double</FONT> m) { <B>return</B> <FONT COLOR="#800080">0.0</FONT>; } }, | ||
+ | <FONT COLOR="#000080">NEPTUNO</FONT> (<FONT COLOR="#800080">1.024e+26</FONT>, <FONT COLOR="#800080">2.4746e7</FONT>) { <B>public</B> <FONT COLOR="#800000">double</FONT> <FONT COLOR="#000080">peso</FONT>(<FONT COLOR="#800000">double</FONT> m) { <B>return</B> <FONT COLOR="#800080">0.0</FONT>; } }, | ||
+ | <FONT COLOR="#000080">PLUTÃO</FONT> (<FONT COLOR="#800080">1.27e+22</FONT>, <FONT COLOR="#800080">1.137e6</FONT>); | ||
+ | |||
+ | <I><FONT COLOR="#808080">// constante de gravitação universal</FONT></I> | ||
+ | <B>public</B> <FONT COLOR="#800000">static</FONT> <FONT COLOR="#800000">final</FONT> <FONT COLOR="#800000">double</FONT> G = <FONT COLOR="#800080">6.67300E-11</FONT>; <I><FONT COLOR="#808080">// m³/kg/s²</FONT></I> | ||
+ | |||
+ | <B>private</B> <FONT COLOR="#800000">double</FONT> _massa; <I><FONT COLOR="#808080">// kg</FONT></I> | ||
+ | <B>private</B> <FONT COLOR="#800000">double</FONT> _raio; <I><FONT COLOR="#808080">// m</FONT></I> | ||
+ | |||
+ | <B>public</B> <FONT COLOR="#800000">double</FONT> <FONT COLOR="#000080">massa</FONT>() { <B>return</B> _massa; } | ||
+ | <B>public</B> <FONT COLOR="#800000">double</FONT> <FONT COLOR="#000080">raio</FONT>() { <B>return</B> _raio; } | ||
+ | |||
+ | <FONT COLOR="#000080">Planeta</FONT>(<FONT COLOR="#800000">double</FONT> massa, <FONT COLOR="#800000">double</FONT> raio) { _massa = massa; _raio = raio; } | ||
+ | |||
+ | <I><FONT COLOR="#808080">// gravidade à superfície</FONT></I> | ||
+ | <B>public</B> <FONT COLOR="#800000">double</FONT> <FONT COLOR="#000080">gravidade</FONT>() { <B>return</B> G * _massa / (_raio * _raio); } | ||
+ | |||
+ | <I><FONT COLOR="#808080">// peso (N) de outra massa (kg) à superfície</FONT></I> | ||
+ | <B>public</B> <FONT COLOR="#800000">double</FONT> <FONT COLOR="#000080">peso</FONT>(<FONT COLOR="#800000">double</FONT> massa) { <B>return</B> massa * <FONT COLOR="#000080">gravidade</FONT>(); } | ||
+ | } | ||
+ | |||
+ | == Experiência 3 == | ||
+ | |||
+ | === Programa de Teste === | ||
+ | |||
+ | <B>public</B> <B>class</B> Teste3 { | ||
+ | <B>public</B> <FONT COLOR="#800000">static</FONT> <FONT COLOR="#800000">void</FONT> <FONT COLOR="#000080">main</FONT>(<B><FONT COLOR="#0095ff">String</FONT></B>[] args) { | ||
+ | <FONT COLOR="#800000">double</FONT> pesoNaTerra = <B><FONT COLOR="#0095ff">Double</FONT></B>.<FONT COLOR="#000080">parseDouble</FONT>(args[<FONT COLOR="#0000ff">0</FONT>]); | ||
+ | <FONT COLOR="#800000">double</FONT> massa = pesoNaTerra / Planeta.<FONT COLOR="#000080">TERRA</FONT>.<FONT COLOR="#000080">gravidade</FONT>(); | ||
+ | <B>for</B> (Planeta p : Planeta.<FONT COLOR="#000080">values</FONT>()) { | ||
+ | <FONT COLOR="#800000">double</FONT> peso = p.<FONT COLOR="#000080">peso</FONT>(massa); | ||
+ | <B>if</B> (peso != <FONT COLOR="#0000ff">0</FONT>) <B><FONT COLOR="#0095ff">System</FONT></B>.<FONT COLOR="#000080">out.printf</FONT>(<FONT COLOR="#dd0000">"Peso em </FONT><FONT COLOR="#ff00ff">%s</FONT><FONT COLOR="#dd0000"> é </FONT><FONT COLOR="#ff00ff">%f%n</FONT><FONT COLOR="#dd0000">"</FONT>, p, peso); | ||
+ | <B>else</B> <B><FONT COLOR="#0095ff">System</FONT></B>.<FONT COLOR="#000080">out.printf</FONT>(<FONT COLOR="#dd0000">"Peso em </FONT><FONT COLOR="#ff00ff">%s</FONT><FONT COLOR="#dd0000"> é difícil de calcular</FONT><FONT COLOR="#ff00ff">%n</FONT><FONT COLOR="#dd0000">"</FONT>, p); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | === 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 anónimas para comportar a implementação do comportamento especÃfico de cada instância. | ||
+ | |||
+ | <FONT COLOR="#800000"><B>$ ls</B></FONT> | ||
+ | <B>Planeta.java</B> Planeta.class Planeta$1.class Planeta$2.class Planeta$3.class Planeta$4.class | ||
+ | <B>Teste2.java</B> Teste2.class |
Este exemplo mostra um tipo enumerado na sua versão mais simples, i.e., apenas se indicam os elementos que constituem a enumeração.
public enum Estação { PRIMAVERA, VERÃO, OUTONO, INVERNO }
Exemplo adaptado do manual de Java 1.5 da Sun Microsystems, Inc. [1]
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(); } }
public class Teste1 { public static void main(String[] args) { System.out.println("** " + Estação.PRIMAVERA.getClass().getCanonicalName()); for (Estação e : Estação.values()) { System.out.println(e); } System.out.println("** " + Planeta.MERCÚRIO.getClass().getCanonicalName()); for (Planeta p : Planeta.values()) { System.out.println(p); } // Planeta x = new Planeta(2.5e22, 2e6); // erro: tipo não pode ser instanciado } }
$ java Teste1 ** Estação PRIMAVERA VERÃO OUTONO INVERNO ** Planeta MERCÚRIO VÉNUS TERRA MARTE JÚPITER SATURNO URANO NEPTUNO PLUTÃO
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)); } } }
$ 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
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) { return 0.0; } }, SATURNO (5.688e+26, 6.0268e7) { public double peso(double m) { return 0.0; } }, URANO (8.686e+25, 2.5559e7) { public double peso(double m) { return 0.0; } }, NEPTUNO (1.024e+26, 2.4746e7) { public double peso(double m) { return 0.0; } }, 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(); } }
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 = p.peso(massa); if (peso != 0) System.out.printf("Peso em %s é %f%n", p, peso); else System.out.printf("Peso em %s é difícil de calcular%n", p); } } }
$ 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 anónimas para comportar a implementação do comportamento especÃfico de cada instância.
$ ls Planeta.java Planeta.class Planeta$1.class Planeta$2.class Planeta$3.class Planeta$4.class Teste2.java Teste2.class