Introdução à Programação Orientada a Objetos com Java

Slides:



Advertisements
Apresentações semelhantes
|Introdução a Java para programadores Telis. Jogo de Dados simples O jogo é jogado por dois jogadores. Cada jogador faz sua jogada (lança um dado), e.
Advertisements

Programação em Java Prof. Maurício Braga
Programação Orientada a Objetos*
Estruturas de Repetição
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 3 – Introdução às classes Capitulo 3 Introdução às classes.
Prof. Thiago Pereira Rique
Interação entre objetos
Introdução a Programação
INE 5384 Estruturas de Dados Prof a. Patrícia Vilain
Programação Básica em Java
Arrays Profa. Isabel Harb Manssour (Material adaptado das aulas dos Profs.: Luciana Nedel, Júlio Machado e Bernardo Copstein) Arrays Exercícios.
Orientação a Objetos Classes
Métodos Programação II 1 Métodos de Programação II (Mestrado Integrado em Engenharia de Comunicações) 1º Ano, 2º Semestre Elementos de Classe, class wrappers.
Classes e objetos Arrays e Sobrecarga
Classes e objetos P. O. O. Prof. Grace.
Paradigmas de Linguagens de Programação Paradima da Programação Orientada à Objetos Professor: Armando Hage Belém-2008.
CRIANDO OBJETOS EM JAVA
Escopo do teste.
Aula Prática 4 Monitoria IP/CC (~if669).
GEJAVA IV SCJA – Certificação Sun java associado exame cx
Programação I Aula 2 (Métodos)
7 Arrays.
Classes, Objetos, Atributos e Métodos JAVA
Paulo Borba Centro de Informática Universidade Federal de Pernambuco Classes Abstratas e Interfaces.
Introdução à Programação Orientada a Objetos com Java Paulo Borba Centro de Informática Universidade Federal de Pernambuco Programação Imperativa (e Ponteiros.
Aula 3 Igor Ebrahim (ies) if669 - Introdução à Programação Monitoria de IP.
if669 - Introdução à Programação
JAVA Orientação a Objetos Sun Campus Ambassador Aula 5.
Orientação a Objetos e Java Graduação em Ciência da Computação
Paulo Borba Centro de Informática Universidade Federal de Pernambuco
PROGRAMAÇÃO - INTRODUÇÃO George Gomes Cabral. DECOMPOSIÇÃO Dividir para conquistar: Paradigma básico para tratamento de grandes problemas. Nossa meta.
Pilhas Profa. Nádia Félix.
By Ducheno Kelly Centro de Formação São Domingos.
Orientação a Objetos Parte II
Programação Orientada a Objetos - Java
BC-0505 Processamento da Informação Santo André, Março de 2011 Professor: Carlos Alberto Kamienski -
Programação Orientada a Objetos - Java Professor: Jean Carlo Mendes.
Universidade Católica de Angola Prática de laboratório Fundamentos de Programação II Frei Joaquim José Hangalo.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Aula Prática 4 Monitoria IP/CC (~if669).
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota (com material da Qualiti Software Process)
1 Marcio de Carvalho Victorino JAVA. 2 Declaração de Atributos [ ] [transient] [volatile] [static] [final] ; controle de acesso –public, package (default),
Linguagem de Programação JAVA
Programação I Aula 1 Prof. Gilberto Irajá Müller Última atualização 2/3/2009.
Vendo o código como um bolo... com várias camadas! Interface com o usuário (GUI) Comunicação Negócio Dados.
Laboratório I Mateus Raeder. Mateus Raeder – maio de 2010 Arrays  Variável: armazena apenas um valor  Como criar em uma única variável, espaço para.
Certificação Marco Antonio. Introdução A compreensão desse capítulo é muito importante pois trata de um assunto essencial em qualquer linguagem de programação,
Programação I Aula 11 (Arrays de Objetos) Prof. Gilberto Irajá Müller Última atualização 27/5/2009.
Construtores e Destrutores
Aula Prática 5 Monitoria IP/CC (~if669). Roteiro 1. 1.Recursão 2. 2.Escopo de Variáveis 3. 3.Arrays 4. 4.Strings.
Conceitos Básicos e Manipulação de Objetos
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Prof. Marcos LABORATÓRIO DE PRÁTICA DE PROGRAMAÇÃO 06.
Copyright 2000, Departamento de Informática, UFPE. Todos os direitos reservados sob a legislação em vigor. Orientação a Objetos e Java.
Vendo o código como um bolo... com várias camadas! Interface com o usuário (GUI) Comunicação Negócio Dados.
Engenharia de Software Alexandre Vasconcelos, André Santos, Augusto Sampaio, Hermano Moura, Paulo Borba © Centro de Informática Universidade Federal de.
De 19 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes
Paulo Borba Centro de Informática Universidade Federal de Pernambuco Exceções.
Paradigmas de Linguagens de Programação Conceitos da Linguagem Imperativa 1 Augusto Sampaio e Paulo Borba Centro de Informática Universidade Federal de.
© Copyright 2007 Algoritmos e Estruturas de Dados - Todos os direitos reservados Estruturas de Dados Dinâmicas IF672 - Algoritmos e Estruturas de Dados.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Array e ArrayList LPOO – 01/09/14.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Arrays Outline 7.1 Introdução 7.2 Arrays 7.3 Declarando e Criando Arrays 7.4 Exemplos usando arrays 7.5 Ordenando arrays 7.6 Procurando em.
Vendo o código como um bolo... com várias camadas! Interface com o usuário (GUI) Comunicação Negócio Dados.
Noções de projeto orientado a objetos - camadas Prof. Gustavo Wagner (alterações) Prof. Tiago Massoni (Slides originais) Desenvolvimento de Sistemas FATEC-PB.
Strings e Arrays Prof. Gustavo Wagner (Alterações) Prof. Tiago Massoni (Slides Originais) Desenvolvimento de Sistemas FATEC-PB  Centro de Informática,
Laboratório de Computação Aula 06 e 07 – Implementação de classes Prof. Fábio Dias
Introdução à Orientação a Objetos em Java Prof. Gustavo Wagner (Alterações) Slides originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB.
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Transcrição da apresentação:

Introdução à Programação Orientada a Objetos com Java Arrays Paulo Borba e Tiago Massoni Centro de Informática Universidade Federal de Pernambuco

Como as entidades da aplicação bancária interagem?

A interface ServicosAgencia void cadastrarCliente(Cliente c) throws ClienteExistenteException, ClienteInvalidoExceprion; String cadastrarConta(Conta c) throws ContaInvalidaException;... } Primeiro implementamos os tipos dos parâmetros dos serviços, agora vamos implementar os serviços!

Como ServidorBanco realiza seus serviços? Os serviços do servidor são realizados com o auxílio de outros objetos, de outras classes Dividir para conquistar...

Dividir para conquistar, mas com coesão Cada classe... oferece serviços logicamente relacionados representa um único conceito claro e bem definido O servidor representa a “fachada” do sistema

Implementando a fachada class ServidorBanco implements ServicosAgencia { private CadastroContas contas; private CadastroClientes clientes; private CadastroLogins logins; ServidorBanco () { contas = new CadastroContas(); clientes = new CadastroClientes(); logins = new CadastroLogins(); } Indica que esta classe satisfaz os requisitos da interface mencionada implements é uma palavra reservada

Implementando os métodos da fachada void cadastrarCliente(Cliente c) { clientes.cadastrar(c); } String cadastrarConta(Conta c) { contas.cadastrar(c); A fachada delega os seus serviços aos seus ajudantes Só veremos exceções mais adiante Pode levantar menos exceções do que o especificado na interface, não mais do que o especificado

Armazenando objetos Para armazenar um objeto armazenamos a sua referência em um atributo ou variável do mesmo tipo Conta conta; Mas para armazenar muitos objetos precisamos de muitos atributos ou variáveis do mesmo tipo Conta conta1; Conta conta2; ...

Implementando Cadastros class CadastroContas { private Conta conta1; private Conta conta2; Definição fixa da quantidade de contas armazenadas

Implementando Cadastros void cadastrar(Conta conta) { ... if (conta1 == null) conta1 = conta; else{ if (conta2 == null) conta2 = conta; else {...Espaço insuficiente...} } Problema 1: Complexidade de Testes Problema 2: Dificuldade em lidar com mudanças no número de contas armazenadas

Melhorando o Programa Precisamos de alguma estrutura de armazenamento que armazene várias referências para objetos de um determinado tipo possibilita que as referências possam ser acessadas de forma simples

tipo das referências armazenadas Arrays São tipos especiais de Java Definem estruturas que armazenam objetos de um determinado tipo Uma variável do tipo array é declarada usando a notação Tipo[] arrayTipo; class CadastroContas { private Conta [] contas ; tipo das referências armazenadas Opção não recomendada! Conta contas[]; nome do array

Primeiro item: contas [0] Criação de arrays public class CadastroContas{ private Conta [] contas; CadastroContas(){ contas = new Conta[6]; } Primeiro item: contas [0] Último item: contas [5] int [] inteiros = new int[100]; Arrays como variáveis locais

Criação de arrays O Operador new X[tamanho] cria um objeto array, não os objetos do tipo X por ele referenciado Arrays têm tamanho fixo depois de criados O comprimento do array é acessível pela variável de instância (atributo) final e pública length

Um array na memória contas 0 1 2 3 4 5 null null

Opções de inicialização de arrays Inicializadores de arrays são representados da seguinte forma: {<expressões>},onde expressões representam expressões de tipos válidos separadas por vírgulas Exemplo: Declara, cria e inicializa um array de inteiros int[] inteiros = {10,10,20,30}; inteiros 10 Arrays de tipos primitivos armazenam valores! 10 20 30

Acesso a elementos de um array void cadastrar(Conta conta) { ... int local = 0; while((local<6)&&(contas[local]!=null)){ local = local + 1; } if (local<6) contas[local] = conta; Leituras e escritas nas referências armazenadas variavel[posição]

Melhorando o programa Usuário deveria configurar o tamanho inicial CadastroContas(){ contas = new Conta[20]; } void cadastrar(Conta conta) { ... int local = 0; while ((local<6)&&(contas[local] != null)){ local = local + 1; if (local<6) contas[local] = conta; Laço complexo poderia ser evitado

Melhorando o programa Construtor public class CadastroContas { recebe tamanho public class CadastroContas { private Conta [] contas; private int proxima; CadastroContas(int tamanho) { contas = new Conta[tamanho]; proxima = 0; } void cadastrar (Conta c){ contas[proxima] = c; proxima = proxima + 1; Simplificação do cadastrar Variável deve ser atualizada

Procurando uma conta Conta procurar(String num) { int i = 0; boolean achou = false; while ((!achou) && (i < proxima)) { if (num.equals(contas[i].getNumero())) achou = true; else i = i + 1; } Conta resultado = null; if (achou) resultado = contas[indice]; return resultado;

Removendo uma conta void remover (String num){ int i = 0; boolean achou = false; while ((!achou) && (i<proxima)) { if(num.equals(contas[i].getNumero())) achou = true; else i = i + 1; } ... Compara número de cada conta com o argumento do método Agora, como podemos remover?

Opções para remover 1) Remover o objeto, trazendo todos os objetos para uma posição anterior 1) Remover o objeto, trazendo o último objeto do array para a posição indicada

Opção mais simples para remover if (achou) { contas[i] = contas[proxima-1]; contas[proxima-1] = null; proxima = proxima - 1; } else {...Mensagem de erro...} } //fim do metodo remover

Código duplicado! Conta procurar(String n) {... while ((!achou) && (i < proxima)) { if (n.equals(contas[i].getNumero())) achou = true; else i = i + 1; void remover (String num){... while ((!achou) && (i < proxima)) { if(num.equals(contas[i].getNumero())) achou = true; else i = i + 1;

procurarIndice Método auxiliar interno private int procurarIndice(String n) { int i = 0; boolean achou = false; while ((!achou) && (i < proxima)) { if (n.equals(contas[i].getNumero())) achou = true; else i = i + 1; } return i; Retorna posição do objeto desejado

Chamada que simplifica a procura (também remover) Procurando uma conta Conta procurar(String num) { int indice = procurarIndice(num); Conta resultado = null; if (indice != proxima) resultado = contas[indice]; return resultado; } Chamada que simplifica a procura (também remover)

Implementando o método existe boolean existe(String n) { int indice = this.procurarIndice(n); return (indice != proxima); }

Resumindo... Para armazenar objetos, podemos utilizar arrays Arrays são como objetos, e devem ser criados As posições de um array tem um tipo definido na sua declaração Acesso aos arrays são feitos através do número de sua posição Para programar temos que dividir para conquistar

Introdução à Programação Orientada a Objetos com Java Arrays 2 Paulo Borba e Tiago Massoni Centro de Informática Universidade Federal de Pernambuco

Atualização de objetos em arrays Array pode armazenar referências para objetos Exemplo: Array de contas bancárias contas 0 1 2 3 4 5

Atualização de objetos em arrays Aliasing garante modificação dos objetos do array Conta c = contas[2]; c.creditar(20); Crédito é realizado nesta conta! contas 0 1 2 3 4 5 c

Implementando os métodos creditar e debitar void debitar(String numero, double valor) { Conta c = this.procurar(numero); if (c != null) c.debitar(valor); else {...Conta inexistente...} } void creditar(String numero, double valor) { if (c != null) c.creditar(valor); Não precisamos atualizar a conta no array depois

Gera um erro em tempo de execução Acesso inválido Se é feito acesso a um elemento indefinido de um array, é gerada uma exceção IndexOutOfBoundsException String nomes[] = {"José", "João", "Maria"}; console.println(nomes[5]); Gera um erro em tempo de execução

O tamanho do array é definido na criação O array pode estourar... CadastroContas cadContas = new CadastroContas(20); ... cadContas.cadastrar(c); O tamanho do array é definido na criação void cadastrar (Conta c){ contas[proxima] = c; proxima = proxima + 1; } O que acontece quando o array estiver cheio? (proxima = 20)

Atributo para guardar o limite do array Duplicação de arrays public class CadastroContas { private Conta [] contas; private int proxima; private int maximo; CadastroContas(int tamanho) { contas = new Conta[tamanho]; proxima = 0; maximo = tamanho; } Atributo para guardar o limite do array

Duplicação de arrays void cadastrar (Conta c){ if (proxima == maximo){ Atingiu o limite! void cadastrar (Conta c){ if (proxima == maximo){ Conta[]contasTemp = new Conta[maximo * 2]; for (int i=0;i < proxima; i++) contasTemp[i] = contas[i]; maximo = maximo * 2; contas = contasTemp; } contas[proxima] = c; proxima = proxima + 1; Copia todas as referências para um array temporário (duplicado) O array temporário se torna o array principal

Métodos retornando múltiplos objetos Até agora só vimos métodos que retornam um elemento (tipo primitivo ou referência) No entanto, alguns métodos podem retornar mais de um elemento de um mesmo tipo Exemplo public ? retornarContasVIP () {…} Várias referências para objetos Conta podem ser retornadas Método de CadastroContas que retorna todas as contas com saldo maior que 1000 reais

Métodos retornando múltiplos objetos Tipo do array retornado void Conta[] retornarContasVIP() { Conta[] resultado = new Conta[proxima]; int i = 0; int posicao = 0; while(i<proxima){ if (contas[i].getSaldo() > 1000){ resultado[posicao] = contas[i]; posicao = posicao + 1; } i = i+1; return resultado; Armazena todas as contas VIP em resultado

Arrays multidimensionais Declaração não especifica dimensões int[][] matriz; int[][] matriz = new int[10][5]; for (int i=0; i<10; i++) for (int j=0; j<5; j++) matriz[i][j] = 100; Cria e inicializa um array bidimensional long[][] x = {{0,1},{2,3},{4,5}}; Cria um array de 3 por 2 x[0][0] x[0][1] x[2][0]

Resumindo... Arrays que armazenam referências podem ter seus elementos atualizados com aliasing Acessos a posições não existentes de um array provocam uma exceção Duplicação de arrays é uma solução para o problema de gerenciamento de espaço Métodos podem retornar objetos do tipo array Arrays multimensionais são representandos como arrays de objetos do tipo array