Difference between revisions of "Enumerações (Java)/Exemplo: Planetas"

From Wiki**3

< Enumerações (Java)
(Experiência 3)
(Resultados)
 
(3 intermediate revisions by the same user not shown)
Line 3: Line 3:
  
 
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]
 
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>
+
<source lang="java">
 
  public enum Planeta {
 
  public enum Planeta {
 
   MERCÚRIO  (3.303e+23, 2.4397e6),
 
   MERCÚRIO  (3.303e+23, 2.4397e6),
Line 32: Line 32:
 
   public double peso(double massa) { return massa * gravidade(); }
 
   public double peso(double massa) { return massa * gravidade(); }
 
  }
 
  }
</java5>
+
</source>
  
 
== Experiência 1 ==
 
== Experiência 1 ==
  
 
=== Programa de Teste ===
 
=== Programa de Teste ===
<java5>
+
<source lang="java">
 
  public class Teste1 {
 
  public class Teste1 {
 
   public static void main(String[] args) {
 
   public static void main(String[] args) {
 
     System.out.println("** Planetas");
 
     System.out.println("** Planetas");
     for (Planeta p : Planeta.values())  
+
     for (Planeta p : Planeta.values())
 
       System.out.println(p);
 
       System.out.println(p);
 
     // Planeta x = new Planeta(2.5e22, 2e6);  // erro: tipo não pode ser instanciado
 
     // Planeta x = new Planeta(2.5e22, 2e6);  // erro: tipo não pode ser instanciado
   }  
+
   }
 
  }
 
  }
</java5>
+
</source>
  
 
=== Resultados ===
 
=== Resultados ===
  
 
   <FONT COLOR="#800000"><B>$ java Teste1</B></FONT>
 
   <FONT COLOR="#800000"><B>$ java Teste1</B></FONT>
  ** Esta&ccedil;&atilde;o
 
  PRIMAVERA
 
  VER&Atilde;O
 
  OUTONO
 
  INVERNO
 
 
   ** Planeta
 
   ** Planeta
 
   MERC&Uacute;RIO
 
   MERC&Uacute;RIO
Line 70: Line 65:
  
 
=== Programa de Teste ===
 
=== Programa de Teste ===
<java5>
+
<source lang="java">
 
  public class Teste2 {
 
  public class Teste2 {
 
   public static void main(String[] args) {
 
   public static void main(String[] args) {
Line 78: Line 73:
 
       System.out.printf("Peso em %s é %f%n", p, p.peso(massa));
 
       System.out.printf("Peso em %s é %f%n", p, p.peso(massa));
 
     }
 
     }
   }  
+
   }
 
  }
 
  }
</java5>
+
</source>
  
 
=== Resultados ===
 
=== Resultados ===
Line 97: Line 92:
 
== Planetas: 2ª versão ==
 
== Planetas: 2ª versão ==
  
<java5>
+
<source lang="java">
 
  public class NoSurfaceException extends Exception {}
 
  public class NoSurfaceException extends Exception {}
</java5>
+
</source>
<java5>
+
<source lang="java">
 
  public enum Planeta {
 
  public enum Planeta {
 
   MERCÚRIO (3.303e+23, 2.4397e6),
 
   MERCÚRIO (3.303e+23, 2.4397e6),
Line 129: Line 124:
 
   public double peso(double massa) throws NoSurfaceException { return massa * gravidade(); }
 
   public double peso(double massa) throws NoSurfaceException { return massa * gravidade(); }
 
  }
 
  }
</java5>
+
</source>
  
 
== Experiência 3 ==
 
== Experiência 3 ==
Line 135: Line 130:
 
=== Programa de Teste ===
 
=== Programa de Teste ===
  
<java5>
+
<source lang="java">
 
  public class Teste3 {
 
  public class Teste3 {
 
   public static void main(String[] args) {
 
   public static void main(String[] args) {
Line 152: Line 147:
 
   }
 
   }
 
  }
 
  }
</java5>
+
</source>
  
 
=== Resultados ===
 
=== Resultados ===
Line 167: Line 162:
 
   Peso em PLUT&Atilde;O &eacute; 5.416831
 
   Peso em PLUT&Atilde;O &eacute; 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>.
+
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>
 
   <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>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
+
   <B>Teste3.java</B> Teste3.class
  
 
[[category:Ensino]]
 
[[category:Ensino]]

Latest revision as of 16:04, 22 October 2020

Planetas: 1ª versão

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(); }
 }

Experiência 1

Programa de Teste

 public class Teste1 {
   public static void main(String[] args) {
     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
   }
 }

Resultados

 $ java Teste1
 ** Planeta
 MERCÚRIO
 VÉNUS
 TERRA
 MARTE
 JÚPITER
 SATURNO
 URANO
 NEPTUNO
 PLUTÃO

Experiência 2

Programa de Teste

 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));
     }
   }
 }

Resultados

 $ 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

Planetas: 2ª versão

 public class NoSurfaceException extends Exception {}
 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(); }
 }

Experiência 3

Programa de Teste

 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);
       }
     }
   }
 }

Resultados

 $ 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
 Teste3.java Teste3.class