Você está na página 1de 18

Uso de Orientao a Objetos em Java

Objetos e Mensagens Objetos em Java Principais classes Containers

Um pouco de histria...

Variveis como elementos isolados

int dia, mes, ano; Vrias declaraes:


Fcil compreenso, porm duas principais desvantagens:

int meuDiaNascimento, meuMesNascimento, meuAnoNascimento; int seuDiaNascimento, seuMesNascimento, seuAnoNascimento; Em nvel conceitual, tudo faz parte de uma data.

Variveis independentes, sem relao:

Para isto, h os tipos agregados de dados (estruturados ou de registro).

Tipos agregados de dados

Exemplo Pascal:
Data = record dia, mes, ano: integer; end;

Em Java:
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;

Objetos e Classes

Classe com seus atributos (Data com dia, ms e ano) Objeto uma instncia da classe (meuNascimento)

Porm, ainda h que se definir mtodos, pois como est qualquer valor inteiro pode ser atribudo s variveis membro (atributos).

Criao de um objeto

Declarao no cria objeto, diferentemente dos tipos primitivos

Para criar efetivamente, deve-se instanci-lo.


Data meuNascimento; meuNascimento = new Data();

Criao de um objeto (continuao)

O espao real de memria alocado com new o objeto efetivamente.

Caractersticas dos Objetos

Os objetos no so acessados diretamente

so acessados por meio de um manipulador (handle), atravs do qual lhe so enviadas mensagens. Ex.: lulu = new Cachorro(); // lulu o handle do novo objeto esto todos na heap (alocados dinamicamente) no tem tempo de vida determinado pelo programador no tem escopo, na verdade, so todos visveis a partir de um manipulador que tem escopo e tempo de vida quando no existem mais referncias para um objeto ele automaticamente retirado da memria (garbage collection)

Os objetos existem parte do fluxo do programa


Utilizao de Objetos em Java

Declarao do handle

tipo nomeHandle; Date hoje;

Ex.:

Instanciao

Associao do handle a um novo objeto

nomeHandle = new ConstructorDaClasse(); nomeHandle = outroHandle;

Associao do handle a um objeto que j existe

Exemplo de uso de objetos


... Date hoje; hoje = new Date(); // cria uma instncia da classe Data // a data de hoje, // sendo hoje o handle deste objeto Date aniv = new Date(1997, 5, 30); // construtor hipottico Date aniv2; aniv2 = aniv; // aniv e aniv2 so handles para o // mesmo objeto if (hoje.after(aniv) { // envio da mensagem after, // j passou do aniv // com parmetro, para o objeto // hoje }

Classes Bsicas x Tipos Primitivos

Variveis (par: posio memria + valor)


int a = 10; // a um tipo primitivo, // no 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

Declarao
tipo[] nome; // cria a varivel, mas no aloca memria nome = new tipo[tamanho]; // aloca memria Obs.: A alocao de memria feita em tempo de execuo, logo, o tamanho das matrizes pode ser calculado durante a execuo do programa.

Exemplo
char[] m = new char[200];

Inicializao
int[] a = { 1, 2, 3, 4, 5}; int[][] b = { {1,2,3} {4,5,6} };

Exemplo: matrizes
// declarao de duas matrizes int[] vetInt1 = { 1, 3, 5, 7, 9, 11 }; int[] vetInt2 = new int[vetInt1.length * 2]; // loop de inicializao for( int i=0; i < vetInt1.length; i++) { vetInt2[i*2] = vetInt1[i]; vetInt2[i*2+1] = vetInt1[i] + 1; } // loop de impresso 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 criao (+- lista dinamicamente encadeada) Assim como no array, os objetos so recuperados pela sua posio Principais mtodos add(Objeto) get(posio) 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 impresso

A classe HashMap

um container que armazena os objetos na forma de tabelas Hash.


Rpido acesso para consulta (no uma estrutura seqencial) Os objetos so recuperados por meio de uma chave de acesso
Para cada objeto h uma chave de entrada na tabela (mtodo hashValue determina o ponto de entrada - a classe Object implementa este mtodo, que pode ser sobre-escrito)

Os objetos no tem uma ordem Object put(ObjetoChave, Objeto) Object get(ObjetoChave) boolean containsValue(Objeto) Object remove(ObjectoChave) int size()

Principais mtodos

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"));

Exerccios

Ler dois arrays de 10 nmeros 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 nmeros pares de A (considerando a parte inteira dos nmeros)

Fazer um programa que leia vrias linhas (at ser digitado fim) e as imprima na ordem inversa da digitao Fazer um programa que leia o nmero da conta corrente de clientes e seus nomes. Depois, para cada nmero 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-se definir novos containers baseados nos existentes?

Você também pode gostar