Este é um post disponível para assinantes MVPOrientação a Objetos: uma abordagem com Java - Revista easy Java Magazine 15 - Parte 3
Este artigo trata de novas maneiras de definir tipos em Java. Além das classes top level, a linguagem permite a definição das chamadas classes internas, divididas em quatro categorias, e os enums, introduzidos a partir de Java 5.
[Artigo já está disponível no Leitor Digital DevMedia®. Clique aqui para acessá-lo]
> Clique aqui para ler todos os artigos da Easy Java Magazine 15
Nas partes iniciais desta série de artigos tratamos de classes – tanto concretas quanto abstratas – e de interfaces. Tais tipos são denominados classes de nível superior, ou top level class. Nesta edição iremos estudar outros tipos que podem ser declarados em Java – os tipos enum e as classes e interfaces aninhadas (nested).
Mas, o que são enums e classes aninhadas? Inicialmente vamos falar um pouco sobre enums. Antes de Java 5, era comum definir variáveis – geralmente int – que tinham um domínio restrito a poucos valores. Por exemplo, a classe Pessoa poderia ter um atributo sexo, do tipo int, onde 1 representaria o sexo masculino e 2, o feminino. E, em geral, isso levava a um código mais difícil de ler, o que poderia tornar a manutenção da aplicação um pouco mais complicada. Veremos a seguir como enums podem nos ajudar nesse aspecto e criar programas mais legíveis.
Por sua vez, as classes – ou interfaces – aninhadas são definições de classes dentro de outras. Essas classes são comumente conhecidas como classes internas, e consistem de um recurso que permite o agrupamento de classes que têm um relacionamento mais íntimo e singular. Em muitas situações um objeto só irá existir para a classe que estamos implementando, então faz pouco ou nenhum sentido criar uma classe separada para esse objeto único. A API de Java faz bastante uso desse recurso e, como exemplo, pode-se citar a classe Ellipse2D.Double. Esta classe interna, Double, é uma elipse definida em precisão double, dentro da classe Ellipse2D.
Existem quatro categorias de classes aninhadas e uma de interfaces aninhadas, que são:
- Classes e interfaces aninhadas de nível superior;
- Classes internas não-estáticas;
- Classes locais de métodos;
- Classes anônimas.
O grupo formado pelas classes internas não-estáticas, classes locais de métodos e classes anônimas são conhecidas como classes internas.
Nesta ordem, estudaremos primeiramente os enums e, em seguida, as classes aninhadas.
Tipos enum
Um enum é um tipo cujos atributos consistem basicamente de um conjunto fixo de constantes. No entanto, logo veremos que se pode declarar muito mais que isso em um enum. Um exemplo de campos constantes poderia ser os dias da semana (SEGUNDA, TERCA, QUARTA, QUINTA, SEXTA, SABADO e DOMINGO). Em Java, um tipo enum é definido usando-se a palavra-chave enum, como se pode ver na Listagem 1.
Listagem 1. Declaração de enum.
public enum DiaSemana {
SEGUNDA, TERCA, QUARTA, QUINTA, SEXTA, SABADO, DOMINGO
}
Os tipos enum comportam-se na verdade como os tipos enumerados que também podem ser encontrados em outras linguagens de programação, tais como C++ e ObjectPascal. Tipos enumerados são constantes declaradas em vez dos números inteiros que frequentemente são usados para representar opções entre diversas alternativas. Por exemplo, suponha que declarássemos em uma classe a variável int dia para representar os dias da semana, onde Segunda = 1, Terça = 2, e assim por diante. Com isso poderíamos ter o trecho de código mostrado na Listagem 2, por exemplo.
Listagem 2. Uso de variável int para representar dias da semana.
for ( dia = 1; dia <= 7; dia++ ) {
if ( dia == 7 ) {
System.out.println("Dia de folga");
}
}
Podemos ver na Listagem 2 que a utilização desta abordagem compromete a clareza do código, tornando a lógica mais difícil de entender. Por isso, o uso de enums, como aquele definido na Listagem 1, pode tornar o nosso código mais legível.
Na Listagem 3 mostramos um exemplo de utilização do enum DiaSemana.
Listagem 3. Uso do enum DiaSemana.
public
class Main {
public static void main(String[] args) {
DiaSemana dia1, dia2; // inicialmente valem null
dia1 = DiaSemana.SEGUNDA;
dia2 = DiaSemana.SEXTA;
if (dia1.equals(dia2)) {
System.out.println(dia1 + " é igual a " + dia2);
} else {
System.out.println(dia1 + " não é igual a " + dia2);
}
}
}
Observe na Listagem 3 que as referências do tipo DiaSemana são inicializadas com valores enumerados, que são os atributos ("
ATENÇÃO! A exibição deste artigo foi interrompida.
Este é um post disponível para assinantes MVP
Space do autor


0
0
