|
|
Line 1: |
Line 1: |
| {{NAVPO}}
| | #REDIRECT [[ist:Enumerações (Java)]] |
| {{TOCright}}
| |
| Enumerações, como o nome indica, são listas de valores associados a um conceito. Até à versão 1.5, e ao contrário de outras linguagens, o Java não dispunha de nenhum método de definição de enumerações. Não quer isto dizer que não fosse possível definir entidades que pudessem ser utilizadas quase com a mesma semântica, apesar de não estar disponível o suporte do compilador para a verificação de tipos.
| |
| | |
| Veja-se o seguinte exemplo, no qual se definem as estações do ano como constantes:
| |
| <java5>
| |
| interface Estação {
| |
| int PRIMAVERA = 0;
| |
| int VERÃO = 1;
| |
| int OUTONO = 2;
| |
| int INVERNO = 3;
| |
| }
| |
| </java5>
| |
| Definida desta forma, é possível a um programa referir <code>Estação.PRIMAVERA</code> e obter uma entidade constante para referir um conceito. No entanto, não é possível esquecer-se que o que se manipula realmente é um inteiro e é precisamente isso que o compilador vê.
| |
| | |
| Como se verá abaixo, é possível definir estes conceitos de forma sólida e muito mais poderosa do que é habitual em linguagens como o C ou o C++.
| |
| | |
| == Enumerações como Classes de Domínio Finito ==
| |
| | |
| Linguagens como o C permitem a definição de enumerações simples:
| |
| <cpp>
| |
| enum Estacao {
| |
| PRIMAVERA, VERAO, OUTONO, INVERNO
| |
| };
| |
| </cpp>
| |
| No entanto, esta definição pouco mais é que uma lista de valores inteiros (que, de facto, são), não havendo diferenças no seu processamento por parte da linguagem, relativamente ao processamento dos inteiros.
| |
| | |
| O mesmo caso, em Java, apresenta um aspecto enganosamente semelhante:
| |
| | |
| <java5>
| |
| enum Estação {
| |
| PRIMAVERA, VERÃO, OUTONO, INVERNO
| |
| }
| |
| </java5>
| |
| | |
| No entanto, e apesar das semelhanças superficiais apresentadas pelo exemplo acima, relativamente ao exemplo em C, o significado é radicalmente diferente. Enquanto que os valores do enumerado C são meros inteiros, os do enumerado Java são objectos por direito próprio. Assim, apesar de se poder utilizar <code>PRIMAVERA</code> como um valor em ambas as linguagens, em C ele é 0 (zero) e em Java é, simplesmente, <code>PRIMAVERA</code>.
| |
| | |
| Na realidade, o que se tem, no caso do Java, é uma classe de objectos que contém apenas quatro instâncias, que são definidas por enumeração exaustiva do conjunto. Internamente, o compilador associa classes e implementações a cada uma delas, como se verá ao longo dos exemplos.
| |
| | |
| Do que se disse, pode ser correctamente inferido que os "valores" podem ser tratados como quaisquer objectos em Java, sendo inclusivamente possível associar-lhes atributos e comportamento. Estes aspectos fazem dos tipos enumerados muito mais que simples listas de valores nomeados.
| |
| | |
| == Propriedades dos enumerados ==
| |
| | |
| Sendo classes, a definição de enumerados é em tudo semelhante à definição de uma classe concreta em Java.
| |
| | |
| As principais diferenças são a impossibilidade de ter subclasses e de se criarem instâncias além das que já foram enumeradas.
| |
| | |
| == Enumerações noutras linguagens ==
| |
| | |
| * Type safety
| |
| * Propriedades
| |
| | |
| ==Exemplos==
| |
| | |
| * [[Enumerações (Java)/Exemplo: Estações]]: estações do ano
| |
| * [[Enumerações (Java)/Exemplo: Planetas]]: planetas
| |
| | |
| [[category:Ensino]]
| |
| [[category:PO]]
| |
| [[category:PO Exemplos]]
| |
| [[category:Java]]
| |