|
|
(8 intermediate revisions by the same user not shown) |
Line 1: |
Line 1: |
| {{TOCright}}
| | #REDIRECT [[ist:Exemplos de Enumerações (Java)]] |
| <!-- exemplos da aula 14 -->
| |
| == 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.
| |
| | |
| <B>public</B> <B>enum</B> Estação {
| |
| <FONT COLOR="#000080">PRIMAVERA</FONT>, <FONT COLOR="#000080">VERÃO</FONT>, <FONT COLOR="#000080">OUTONO</FONT>, <FONT COLOR="#000080">INVERNO</FONT>
| |
| }
| |
| | |
| == 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]
| |
| | |
| <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>),
| |
| <FONT COLOR="#000080">SATURNO</FONT> (<FONT COLOR="#800080">5.688e+26</FONT>, <FONT COLOR="#800080">6.0268e7</FONT>),
| |
| <FONT COLOR="#000080">URANO</FONT> (<FONT COLOR="#800080">8.686e+25</FONT>, <FONT COLOR="#800080">2.5559e7</FONT>),
| |
| <FONT COLOR="#000080">NEPTUNO</FONT> (<FONT COLOR="#800080">1.024e+26</FONT>, <FONT COLOR="#800080">2.4746e7</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 1 ==
| |
| | |
| === Programa de Teste ===
| |
| | |
| <B>public</B> <B>class</B> Teste1 {
| |
| <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) {
| |
| <B><FONT COLOR="#0095ff">System</FONT></B>.<FONT COLOR="#000080">out</FONT>.<FONT COLOR="#000080">println</FONT>(<FONT COLOR="#dd0000">"** "</FONT> + Estação.<FONT COLOR="#000080">PRIMAVERA</FONT>.<FONT COLOR="#000080">getClass</FONT>().<FONT COLOR="#000080">getCanonicalName</FONT>());
| |
| <B>for</B> (Estação e : Estação.<FONT COLOR="#000080">values</FONT>()) {
| |
| <B><FONT COLOR="#0095ff">System</FONT></B>.<FONT COLOR="#000080">out</FONT>.<FONT COLOR="#000080">println</FONT>(e);
| |
| }
| |
| <B><FONT COLOR="#0095ff">System</FONT></B>.<FONT COLOR="#000080">out</FONT>.<FONT COLOR="#000080">println</FONT>(<FONT COLOR="#dd0000">"** "</FONT> + Planeta.<FONT COLOR="#000080">MERCÚRIO</FONT>.<FONT COLOR="#000080">getClass</FONT>().<FONT COLOR="#000080">getCanonicalName</FONT>());
| |
| <B>for</B> (Planeta p : Planeta.<FONT COLOR="#000080">values</FONT>()) {
| |
| <B><FONT COLOR="#0095ff">System</FONT></B>.<FONT COLOR="#000080">out</FONT>.<FONT COLOR="#000080">println</FONT>(p);
| |
| }
| |
| <I><FONT COLOR="#808080">// Planeta x = new Planeta(2.5e22, 2e6); // erro: tipo não pode ser instanciado</FONT></I>
| |
| }
| |
| }
| |
| | |
| === Resultados ===
| |
| | |
| <FONT COLOR="#800000"><B>$ java Teste1</B></FONT>
| |
| ** Estação
| |
| PRIMAVERA
| |
| VERÃO
| |
| OUTONO
| |
| INVERNO
| |
| ** Planeta
| |
| MERCÚRIO
| |
| VÉNUS
| |
| TERRA
| |
| MARTE
| |
| JÚPITER
| |
| SATURNO
| |
| URANO
| |
| NEPTUNO
| |
| PLUTÃO
| |
| | |
| == Experiência 2 ==
| |
| | |
| === Programa de Teste ===
| |
| | |
| <B>public</B> <B>class</B> Teste2 {
| |
| <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>()) {
| |
| <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, p.peso(massa));
| |
| }
| |
| }
| |
| }
| |
| | |
| === Resultados ===
| |
| | |
| <FONT COLOR="#800000"><B>$ java Teste2 81</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 é 204.975160
| |
| Peso em SATURNO é 86.347259
| |
| Peso em URANO é 73.315303
| |
| Peso em NEPTUNO é 92.204574
| |
| 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 ===
| |
| | |
| <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 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:Java]]
| |
| [[category:OOP]]
| |
| [[category:Teaching]]
| |