Casting e classes Wrapper
Casting e classes wrapper

Casting e classes Wrapper

Nessa aula você irá entender como utilizar o casting e classes wrapper para converter dados de um tipo para o outro sem nenhum risco de perder informações.

Nas aulas anteriores, aprendemos que algumas linguagens de programação de alto nível possuem tipos de dados diferentes. Portanto, a linguagem Java fornece duas ferramentas: casting e classes wrapper. Cada uma delas possuem suas próprias regras e o programador precisa ficar atento à elas.

Veremos também neste artigo que existem dois tipos de conversão de dados, são elas: implícita e explicita. Compreender os dois tipos de conversão são essenciais para a compreensão da linguagem.  

 

2. Casting

As variáveis que declaramos são armazenadas em memória na forma de bits, sendo que, cada uma ocupa uma quantidade diferente de bits. Por exemplo, se quisermos armazenar o número 1 na memória principal, será necessário apenas 1 bit. Porém, se o programador deseja armazenar o número 200 na memória, quando convertido para a base binária ele é representado pelo conjunto 11001000. Assim serão necessários 8 bits de memória para armazenar o número 200.
A representação de uma variável do tipo ‘int’, por exemplo, armazena 32 bits, ou qualquer inteiro entre -2.147.483.648 e 2.147.483.647. Sendo assim, percebemos que para cada tipo existe um limite de dados armazenados.
 

2.1.       Casting implícito

Ao pensar na teoria de conjuntos numéricos proposta na matemática (Figura 1) fica fácil compreender que os conjuntos estão contidos uns nos outros.
 
 

Conjuntos numéricos

 
 
Figura 1 – Conjuntos numéricos
 
Os números naturais, por exemplo, estão compreendidos por números não negativos, incluindo o zero. Ainda é possível perceber que os números inteiros também são compreendidos pelos números naturais e inclui os números negativos. Esta regra pode ser aplicada para os demais conjuntos numéricos, assim podemos por exemplo, dizer que números como, por exemplo, o 15 também está dentro dos números racionais, inteiros e naturais. Na programação de alto nível, a preocupação deve ser qual espaço de armazenamento da variável que está  sendo utilizada. Acompanhe na Tabela 1:
 
Tabela 1 – Tamanhos de tipos primitivos
 
 
Caso a variável criada tenha a capacidade de armazenar informações maiores do que o dado que você deseja guardar, denominamos esta operação de casting implícito.
 
tamanhos de tipos
tamanhos de tipos

Tipos de copos representando capacidade de armazenamento

Figura 2 – representação de tipos de dados e suas capacidades de armazenamento
 
Observando a Figura 2 é possível perceber que se quisermos armazenar a quantidade de líquido em um copo denominado Byte em um copo long. Este armazenamento será feito sem nenhum problema. Porém, também é possível perceber que ao tentar armazenar a quantidade de líquido de um copo long em um copo byte. A agua irá transbordar e se perderá.
 
Em Java esta conversão pode ser representada da seguinte forma:
 

Int i = 5;
Double d = 0;
d = i; \ O código compila sem problemas

i = d; \ O código não compila
 

2.2. Casting explicito

O casting  explícito acontece quando o programador “assume” o risco da conversão e realiza o cast ignorando os riscos de perca de dados. É claro que ao realizar esta operação o programador através de sua lógica implementada deve assegurar que o dado convertido não será convertido erroneamente.
Em Java esta conversão é representada da seguinte forma:
Int i = 5;
Double d = 0;
i = d; \ O código não compila
i = (int)d  \ O código compila
* Cuidado, utilizar o casting de forma errada pode trazer muitos erros e dores de cabeça
 

3.  Classes Wrapper

 
As classes Wrapper foram criadas dentro do pacote Java.lang e seu objetivo é auxiliar a manipulação de tipos primitivos. Nestas classes podemos invocar alguns métodos capazes de realizar conversão de dados assegurando que não haverá erros. Para cada tipo primitivo existe uma classe Wrapper com mesmo nome correspondente. Por exemplo, o tipo int possui a classe Integer, já o double possui a classe Double e assim por diante. Para convertermos um dado do tipo double em inteiro usando a classe Wrapper é bastante simples, observe o exemplo:
int resultado;
double d = 5.5;
resultado = Integer.parseInt(d);
O método parse.int() pode ser invocado diretamente da classe Integer sem a necessidade de criar uma Instância desta classe. É interessante lembrar que este método de parse está presente em todas as classes Wrapper, ex: Double, Float, Integer, etc. Mas calma, os conceitos de acesso a métodos e o que são classes estão dentro da programação orientada a objetos. Assim, este curso discutirá estes conceitos detalhadamente na próxima aula.
 

O segredo para utilizar bem essas ferramentas (casting e classes wrapper) é saber exatamente quando devemos aplicar uma ou aplicar a outra.

Em nossa próxima aula vamos entender como funcionam os nossos amigos objetos

Vinicius dos Santos

Apenas um apaixonado por Ciência da Computação e forma com que ela pode transformar vidas!

Deixe uma resposta