sábado, 10 de maio de 2014

Tipos de dados primitivos e de referência

Dados primitivos e de referencia
Nosso grupo ira falar um pouco sobre variáveis primitivas e de referencia, não há necessidade de saber sobre isso detalhadamente, pois usamos isso no modo automágico, a maior duvida é aonde aplicar, por exemplo o CPF, seria String, int ou char? Essa e outras duvidas serão respondidas logo abaixo.

Dados Primitivos
Vamos começar a falar sobre dados primitivos, que são variáveis onde você consegue armazenar suas condições para uma determinada lógica ou algoritmo, como por exemplo, dados do tipo int(inteiro) você consegue armazenar somente números inteiros, como int carro = 2; sem casas decimais (sem virgulas ou pontos).
Não tem muito pra se falar, é simples, quando for declarar uma variável é só usar o que mais se encaixa (como eu disse,é automágico), int para idade, boolean para verdadeiro ou falso, double para altura, e por ai vai. Na explicação das fontes confiáveis e não confiáveis veremos todos os oito tipos de dados primitivos e a diferença entre float, double, long, etc.

Um valor deve ser armazenado em uma variável para que este possa ser manipulado, como no exemplo a seguir:

[NomeVariavel] : tipo

No caso de variáveis primitivas seria: float altura = 1.76f;
A letra "f" que pode ser maiúscula ou minuscula indica que aquele numero deve ser tratado como float, isso também se aplica ao long e mais ninguém, veremos isso mais pra frente.

E no caso de variável de referencia: String nome = "Teobaldo";
Pois é, String é uma variável de referencia, assim como Date, mas não são só essas ou...isso, não se preocupe, também veremos isso mais pra frente.

Dados de Referência
Os programas utilizam variáveis de referência para armazenar as localizações de objetos na memória do computador, esses objetos que são referenciados podem conter variáveis de instancia e métodos, dentro do objeto apontado...entendeu a ideia? Pois é eu também não, mas calma que vamos explicar e exemplificar.

Para trazer em um objeto os seus métodos de instância, é preciso ter referência a algum objeto.
 
A variável de referência também pode receber o valor null (nulo), o que significa que essa variável não se refere a um objeto, ou seja, apenas foi criado um "contêiner" que irá receber o endereço de memória de um objeto.

Vamos a um exemplo, para que fique mais claro:

/* Foi criado uma classe pessoa e um classe aluno */

class Pessoa { } 

class Aluno extends Pessoa { } /* o comando extends é usado para informar herança */

public class Atribuicao_Objetos {

           public static void main(String[] args) {
            Pessoa pessoa = new Aluno(); 
/* cria um objeto da classe Pessoa e a variável pessoa contem uma referencia a esse objeto onde poderá invocar todos os seus métodos e atributos da classe. A palavra chave new solicita a memória do sistema para armazenar um objeto e inicializa o objeto */
            Aluno aluno = new Pessoa();
      }


Agora que vimos algumas explicações sobre tipos de dados, vamos falar um pouco sobre
String
Apesar do que muitos imaginaram String NÃO é um tipo de dado, mas sim uma classe, e suas variáveis são objetos dessa classe. Acontece que String e tipos primitivos se apresentam da mesma forma, então,pera...QUAL A VANTAGEM DE USAR UMA CLASSE (String) E NÃO UM TIPO PRIMITIVO?

A resposta se baseia exatamente no uso da orientação a objetos e no fato de que existem muitos métodos que podemos utilizar em um objeto instanciado da classe String, apesar do fato de que não podemos mudar o que está guardado dentro do objeto String.

Existem inúmeras possibilidades oferecidas pela classe String, vou mostrar alguns que pegamos da internet:
  • Concatenação; usa-se o + para concatenar (juntar varias Strings ao mesmo tempo)
  • Tamanho da String; método length() é usado para retornar o tamanho da String
  • Converter para maiúsculas ou minúsculas; toUpperCase() e toLowerCase() - isso o 1berto explicou e ainda deu na prova
  • Fazer comparações que incluem verificações no início e no fim; comparação é um pouco mais chato e complicado, mas um jeito de fazer isso que vimos em classe é usando a função equals, que é case sensitive ( diferencia maiúsculas de minusculas), se quiser ignorar esse case sensitive é só usar equalsIgnoreCase().
Bom, aqui se encerra a explicação com as próprias palavras, abaixo veremos o que as fontes confiáveis e não confiáveis tem a dizer:

Esta explicação foi tirada de um site qualquer da vasta internet
Apesar de ser extensa e bem maçante, vale a pena ler, pois esta bem "mastigado"

Nos algoritmos criados para realizar tarefas na computação utilizamos variáveis para manipular dados, por exemplo: nome, idade, altura, peso, data de nascimento, sexo, saldo, etc. Para otimizar a utilização da memória, cada variável armazena apenas um tipo de dados. A variável nome, deve armazenar textos, já a variável idade deve armazenar apenas números inteiros (sem casa decimal), na variável sexo podemos armazenar apenas um caractere (“M” ou “F”). Seria correto armazenarmos o valor “M” na variável idade? Não né, por isso devemos especificar em nossos algoritmos o tipo de cada variável.

QUAIS SÃO OS TIPOS DE DADOS PRIMITIVOS?
Em computação existem apenas 4 tipos de dados primitivos, algumas linguagens subdividem esses tipos de dados em outros de acordo com a capacidade de memória necessária para a variável. Mas de modo geral, os tipos de dados primitivos são:

INTEIRO: Representa valores numéricos negativo ou positivo sem casa decimal, ou seja, valores inteiros.
REAL: Representa valores numéricos negativo ou positivo com casa decimal, ou seja, valores reais. Também são chamados de ponto flutuante.
LÓGICO: Representa valores booleanos, assumindo apenas dois estados, VERDADEIRO ou FALSO. Pode ser representado apenas um bit (que aceita apenas 1 ou 0).
TEXTO: Representa uma sequencia de um ou mais de caracteres, colocamos os valores do tipo TEXTO entre ” ” (aspas duplas).

Algumas linguagens de programação, dividem esses tipos primitivos de acordo com o espaço necessário para os valores daquela variável. Na linguagem Java por exemplo, o tipo de dados inteiro é dividido em 4 tipos primitivos: byte, short, int e long. A capacidade de armazenamento de cada um deles é diferente.
byte: é capaz de armazenar valores entre -128 até 127.
short: é capaz de armazenar valores entre – 32768 até 32767.
int: é capaz de armazenar valores entre –2147483648 até 2147483647.
long: é capaz de armazenar valores entre –9223372036854775808 até 9223372036854775807.
Mas essa divisão é uma particularidade da linguagem de programação que está sendo utilizada. O objetivo é otimizar a utilização da memória. Em algumas linguagens de programação não é necessário especificar o tipo de dados da variável, eles são identificados dinamicamente. Porém, é necessário informar o tipo de dados de cada variável em algoritmos.

TIPOS DE DADOS CUSTOMIZADOS
A partir dos tipos de dados primitivos podemos criar outros tipos de dados utilizando uma combinação de variáveis.  São estruturas de dados, classes, vetores, matrizes, etc.

Uma classe chamada Carro é um tipo de dados que agrupa outras variáveis básicas como marca, cor, ano, modelo, etc. Um vetor é um agrupamento de variáveis, uma matriz é um agrupamento de vetores (Isso daqui a gente ainda não viu em classe, mas é bom saber o básico e a relação com os tipos de dados). Enfim, a base de todos os tipos de dados são os tipos de dados primitivos, independente da linguagem de programação.


O conceito de estruturas de dados e classes é bem mais complexo que isto, por exemplo classes têm operações além de atributos, mas aqui é importante apenas frisar que também são tipos de dados. Diferente dos tipos de dados primitivos que já são implementados internamente pelas linguagens de programação, esses tipos de dados são criados pelo programador.


Neste site confiável e oficial você pode conferir uma explicação mais detalhada e agrupada...em inglês =D


Abaixo veremos um vídeo sobre tipos de dados (ó,que novidade)
Porém, é uma explicação diferenciada e o canal dele tem outras informações muito bacanas.


E por fim, mas não menos importante, os exercicios

Enunciado e Resolução

1. Para calcular a área de um círculo, deve-se multiplicar o raio ao quadrado por PI. Sabe-se que o valor de PI é uma constante igual a 3.14. Para começar, crie um programa chamado "CalculadoraProfessor", defina as variáveis "pi" e "raio", calcule a área e imprima o resultado.

public class CalculadoraProfessor {

 public static void main(String[] args) {
  // constante do Pi - http://pt.wikipedia.org/wiki/Pi
  float pi = 3.14f;
  
  // raio - informado pelo professor
  float raio = 5.3f;
  
  // area eh igual ao raio ao quadrado multiplicado por Pi
  float area = raio * raio * pi;
  
  System.out.println("Resultado: " + area);
 }

}

É um exercício bem simples, que mostra o conteúdo do nosso grupo (tipos de dados), na referência vou deixar o link com o site que mostra o exercício de diversas formas.

Exercícios teóricos e práticos

Antes de mais nada, você já sabe me responder se CPF é String, int ou char?

1) Fazer uma classe Exe1Primos para:

Receber um inteiro N do usuário

Testar se este inteiro é primo ou não e informar.


2) Crie uma classe Televisão e uma classe ControleRemoto que pode controlar o volume 
e trocar os canais da televisão. 
 
O controle de volume permite aumentar ou diminuir a potência do volume de 
som em uma unidade de cada vez; 
O controle de canal também permite aumentar e diminuir o número do canal 
em uma unidade, porém, também possibilita trocar para um canal indicado; 
Também devem existir métodos para consultar o valor do volume de som e o 
canal selecionado. 

*Dica: é parecido com o exercício do elevador que o 1berto passou

3) Qual o tamanho de uma variável de referência? 

E aqui se encerra nosso trabalho,fica ai o descanso do semestre, espero que tenham gostado.

REFERÊNCIAS



Alunos:
Welton Soares;
Matheus Botão;




2 comentários: