Uso de Orientaçã ção a Objetos em Java Objetos e Mensagens Objetos em Java Principais classes Containers
Um pouco de história... Variáveis como elementos isolados int dia, mes, ano; Fácil compreensão, porém duas principais desvantagens: Várias declarações: int meudianascimento, meumesnascimento, meuanonascimento; int seudianascimento, seumesnascimento, seuanonascimento; Variáveis independentes, sem relação: Em nível conceitual, tudo faz parte de uma data. Para isto, há os tipos agregados de dados (estruturados ou de registro).
Tipos agregados de dados Exemplo Pascal: Em Java: Data = record dia, mes, ano: integer; end; public class Data { int dia; int mes; int ano; } Data meunascimento, seunascimento; Mais tarde, usa-se: seunascimento.dia = 26; seunascimento.mes = 11; seunascimento.ano = 1960; 1
Objetos e Classes Classe com seus atributos (Data com dia, mês e ano) Objeto é uma instância da classe (meunascimento) Porém, ainda há que se definir métodos, pois como está qualquer valor inteiro pode ser atribuído às variáveis membro (atributos).
Criação de um objeto Declaração não cria objeto, diferentemente dos tipos primitivos Para criar efetivamente, deve-se instanciá-lo. Data meunascimento; meunascimento = new Data();
Criação de um objeto (continuação) O espaço real de memória alocado com new é o objeto efetivamente.
Características dos Objetos Os objetos não são acessados diretamente são acessados por meio de um manipulador (handle), através do qual lhe são enviadas mensagens. Ex.: lulu = new Cachorro(); // lulu é o handle do novo objeto Os objetos existem à parte do fluxo do programa estão todos na heap (alocados dinamicamente) não tem tempo de vida determinado pelo programador não tem escopo, na verdade, são todos visíveis a partir de um manipulador que tem escopo e tempo de vida quando não existem mais referências para um objeto ele é automaticamente retirado da memória (garbage collection) 1
Utilização de Objetos em Java Declaração do handle Ex.: tipo nomehandle; Date hoje; Instanciação Associação do handle a um novo objeto nomehandle = new ConstructorDaClasse(); Associação do handle a um objeto que já existe nomehandle = outrohandle;
Exemplo de uso de objetos... Date hoje; hoje = new Date(); // cria uma instância da classe Data // a data de hoje, // sendo hoje o handle deste objeto Date aniv = new Date(1997, 5, 30); // construtor hipotético Date aniv2; aniv2 = aniv; // aniv e aniv2 são handles para o // mesmo objeto if (hoje.after(aniv) { // envio da mensagem after, } // já passou do aniv // com parâmetro, para o objeto // hoje
Classes Básicas x Tipos Primitivos Variáveis (par: posição memória + valor) int a = 10; // a é um tipo primitivo, // não pode receber mensagens, ex.: a.inc() Objetos Integer b = new Integer(10); // b é um handle de objeto int c = b.intvalue(); Tipos primitivos ficam na stack (mundo do programa) Objetos ficam na heap (mundo dos objetos)
Containers Matrizes ArrayList HashMap
Matrizes Declaração tipo[] nome; // cria a variável, mas não aloca memória nome = new tipo[tamanho]; // aloca memória Obs.: A alocação de memória é feita em tempo de execução, logo, o tamanho das matrizes pode ser calculado durante a execução do programa. Exemplo char[] m = new char[200]; Inicialização int[] a = { 1, 2, 3, 4, 5}; int[][] b = { {1,2,3} {4,5,6} };
Exemplo: matrizes // declaração de duas matrizes int[] vetint1 = { 1, 3, 5, 7, 9, 11 }; int[] vetint2 = new int[vetint1.length * 2]; // loop de inicialização for( int i=0; i < vetint1.length; i++) { vetint2[i*2] = vetint1[i]; } vetint2[i*2+1] = vetint1[i] + 1; // loop de impressão for( int i=0; i < vetint2.length; i++) System.out.println(vetInt2[i]);
A classe ArrayList ArrayList é um array que pode mudar de tamanho depois de sua criação (+- lista dinamicamente encadeada) Assim como no array, os objetos são recuperados pela sua posição Principais métodos add(objeto) get(posição) remove(objeto) int size() int indexof(objeto) import java.util.*;... ArrayList valores = new ArrayList(); valores.add ( uma casa ); valores.add ( está limpa ); for (int i=0; i < valores.size(); i++) { System.out.println( valores.get(i)); } Collections.sort(valores); // Exerc: repetir a impressão
A classe HashMap É um container que armazena os objetos na forma de tabelas Hash. Rápido acesso para consulta (não é uma estrutura seqüencial) Os objetos são recuperados por meio de uma chave de acesso Para cada objeto há uma chave de entrada na tabela (método hashvalue determina o ponto de entrada - a classe Object implementa este método, que pode ser sobre-escrito) Os objetos não tem uma ordem Principais métodos Object put(objetochave, Objeto) Object get(objetochave) boolean containsvalue(objeto) Object remove(objectochave) int size() 1
ExemploHash HashMap dados = new HashMap();... do { cod = teclado.readline(); if (! cod.equalsignorecase("fim")) { nome = teclado.readline(); dados.put(cod,nome); } } while (! cod.equalsignorecase("fim")); do { cod = teclado.readline(); nome = (String)dados.get(cod); if (nome!= null) System.out.println(nome); } while (! cod.equalsignorecase("fim")); 1
Exercícios Ler dois arrays de 10 números reais (A e B) e calcular S = (A[1] * B[10]) + (A[2] * B[9]) +... calcular C, sendo C[i] = A[i] / B[i], e imprimi-lo invertido imprimir os números pares de A (considerando a parte inteira dos números) Fazer um programa que leia várias linhas (até ser digitado fim) e as imprima na ordem inversa da digitação Fazer um programa que leia o número da conta corrente de clientes e seus nomes. Depois, para cada número digitado, imprima o nome do correntista.
Resumo Integer a = new Integer( 10 ) int b = a.intvalue() + 2; String x StringBuffer String[] vs = new String[10] vs[3] = teste ArrayList al = new ArrayList() Float f = (Float)al.get(2) Iterator i = al.iterator() i.next(); i.next() Float f = (Float) i.next(); Quando usar matriz, ArrayList ou HashMap? Existem outros containers no pacote java? Pode-sedefinir novos containers baseados nos existentes?