(Created page with "{{TOCright}} == 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/langua...") |
(→Programa de Teste) |
||
(6 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] | ||
− | < | + | <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(); } | ||
} | } | ||
− | </ | + | </source> |
== Experiência 1 == | == Experiência 1 == | ||
=== Programa de Teste === | === Programa de Teste === | ||
− | < | + | <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 | ||
− | } | + | } |
} | } | ||
− | </ | + | </source> |
=== Resultados === | === Resultados === | ||
<FONT COLOR="#800000"><B>$ java Teste1</B></FONT> | <FONT COLOR="#800000"><B>$ java Teste1</B></FONT> | ||
− | ** | + | ** Planetas |
− | |||
− | |||
− | |||
− | |||
− | |||
MERCÚRIO | MERCÚRIO | ||
VÉNUS | VÉNUS | ||
Line 70: | Line 65: | ||
=== Programa de Teste === | === Programa de Teste === | ||
− | < | + | <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)); | ||
} | } | ||
− | } | + | } |
} | } | ||
− | </ | + | </source> |
=== Resultados === | === Resultados === | ||
Line 97: | Line 92: | ||
== Planetas: 2ª versão == | == Planetas: 2ª versão == | ||
− | < | + | <source lang="java"> |
public class NoSurfaceException extends Exception {} | public class NoSurfaceException extends Exception {} | ||
− | </ | + | </source> |
− | < | + | <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(); } | ||
} | } | ||
− | </ | + | </source> |
− | == | + | == Experiência 3 == |
=== Programa de Teste === | === Programa de Teste === | ||
− | < | + | <source lang="java"> |
public class Teste3 { | public class Teste3 { | ||
public static void main(String[] args) { | public static void main(String[] args) { | ||
Line 146: | Line 141: | ||
System.out.printf("Peso em %s é %f%n", p, peso); | System.out.printf("Peso em %s é %f%n", p, peso); | ||
} | } | ||
− | catch (NoSurfaceException | + | catch (NoSurfaceException _) { |
System.out.printf("Peso em %s é difícil de calcular%n", p); | System.out.printf("Peso em %s é difícil de calcular%n", p); | ||
} | } | ||
Line 152: | Line 147: | ||
} | } | ||
} | } | ||
− | </ | + | </source> |
=== Resultados === | === Resultados === | ||
Line 167: | Line 162: | ||
Peso em PLUTÃO é 5.416831 | 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 | + | 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> | + | <B>Teste3.java</B> Teste3.class |
[[category:Ensino]] | [[category:Ensino]] |
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("** Planetas");
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 ** Planetas 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 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(); }
}
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 _) {
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 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