Programação Orientada a Objetos Engenharia da Computação Professor: Rosalvo Ferreira de Oliveira Neto Dados Pessoais Rosalvo Ferreira de Oliveira Neto • MSc. em ciência da computação (UFPE) • • [email protected] www.univasf.edu.br/~rosalvo.oliveira Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto 3 Tópicos •Agrupando Objetos •Coleções •Loops •Iteradores •Arrays Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Agrupando Objetos em coleções de tamanho flexível Ao escrever programas, freqüentemente precisamos ser capazes de agrupar objetos em coleções. Por exemplo: •Dispositivos do tipo PDA armazenam notas sobre compromissos, reuniões, aniversários; •As bibliotecas registram detalhes sobre os livros e periódicos; •As universidades mantêm registros de alunos antigos e atuais. Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto O que existe de comum entre os exemplos anteriores? Em tais situações o número de itens armazenados na coleção varia ocasionalmente; Veremos que é possível suportar facilmente todos esses recursos se tivermos uma classe que seja capaz de armazenar um número arbitrário de objetos. Java disponibiliza essas classes em bibliotecas. Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto O que precisamos saber para iniciar a implementação Java chama suas bibliotecas de pacotes. Podemos utilizar as classes de biblioteca exatamente da mesma maneira como utilizamos nossas próprias classes: •As instâncias são construídas utilizando new •Classes possuem campos, construtores e métodos Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto A classe ArrayList A classe ArrayList é definida no pacote java.util. ArrayList é um exemplo de uma classe de coleção. As coleções podem armazenar um número arbitrário de elementos, sendo cada elemento outro objeto. Para utilizar uma classe de uma biblioteca (pacote) é necessário importar o capote através do comando import. import java.util.ArrayList; Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto A classe ArrayList é uma classe genéricas Declaração ArrayList<tipo> As classes genéricas em java não definem um tipo único, mas potencialmente vários tipos, por exemplo, a classe ArrayList pode ser utilizada para especificar um ArrayList de String, ArrayList de Pessoas, um ArrayList de Retangulos ou um ArrayList de quaisquer classes disponíveis. Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Principais métodos da classe ArrayList Retorno Método void add(int index, Object element) Inserts the specified element at the specified position in this list. boolean add(Object o) Appends the specified element to the end of this list. void clear() Removes all of the elements from this list. boolean isEmpty() Tests if this list has no elements. Object remove(int index) Removes the element at the specified position in this list. int size() Returns the number of elements in this list. Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Exemplo – Bloco de notas Modelaremos uma aplicação de anotações pessoais que tem os seguintes recursos básicos: •Permitir que notas sejam armazenadas; •Não limitar a quantidade de notas armazenadas; •Mostrar notas individuais; •Informar quantas notas estão atualmente armazenadas. Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Exemplo – Bloco de notas - Implementação import java.util.ArrayList; import java.util.Iterator; public class Notebook { // Atributo que será utilizado para armazenar as notas private ArrayList<String> notes; // Construtor public Notebook(){ notes = new ArrayList<String>(); } Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Exemplo – Bloco de notas - Implementação // Método para armazenar as notas public void inseirNota(String aNote){ notes.add(aNote); } Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Exemplo – Bloco de notas - Implementação // Método para recuperar uma nota public String mostrarNota(int aNumeroNota){ String lresult = ""; if (aNumeroNota < 0){ System.out.println("O número da nota deve ser maior que zero!"); }else if (aNumeroNota > quantidadeNotas()-1){ System.out.println("Nota não encontrada!"); }else { lresult = notes.get(aNumeroNota); } return lresult; } Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Exemplo – Bloco de notas - Implementação // Método para retornar a quantidade de notas public int quantidadeNotas(){ return notes.size(); } Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Recursos importantes da classe ArrayList •Ela é capaz de aumentar sua capacidade interna conforme necessário: quando mais itens são adicionados, ela simplesmente abre espaço suficiente para eles; •Ela mantém sua própria contagem de quantos itens está armazenando atualmente. Seu método size retorna o número de objetos atualmente armazenados nela; •Ela mantém a ordem de itens que você insere nela. Você pode recuperá-los mais tarde na mesma ordem. Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Processando uma coleção inteira • Criar um método para imprimir todas as notas! O que é necessário? Instruções de loop •For •For-each •While Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Processando uma coleção inteira - For for (inicialização; condição; incremento){ comando } for (int contador = 0; contador < 10; contador++){ System.out.println(contador); } Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Processando uma coleção inteira - For // Listar todas as notas utilizando o For public void listarTodasNotas_FOR(){ for (int i=0; i<quantidadeNotas(); i++){ System.out.println("Nota " + i + ": "+ notes.get(i)); } } Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Processando uma coleção inteira – For each for each element in coleção do: { comando } for (TipoDeElemento Elemento: coleção){ comando } for (String nota: notes){ System.out.println(nota); } Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Processando uma coleção inteira – For each // Listar todas as notas utilizando o For-each public void listarTodasNotas_FOREACH(){ for(String nota: notes){ System.out.println(nota); } } Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Processando uma coleção inteira – While while (expressão booleana){ comando } Teste é feito no início int contador = 0; while (contador < 10) { System.out.println(contador); contador++; } Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Processando uma coleção inteira – While // Listar todas as notas utilizando o While public void listarTodasNotas_WHILE(){ int contador = 0; while(contador < notes.size()){ System.out.println(notes.get(contador)); contador++; } } Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Iterando por uma coleção Outra forma de iteração por uma coleção é utilizar um Objeto Iterador. Um Iterador é um objeto que fornece funcionalidade para iterar por todos os elementos de uma coleção. A classe ArrayList tem um método que retorna um Iterator. O Iterator também é definido no pacote java.util, por isso também é necessário realizar a sua importação. Import java.util.Iterator; Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Sintaxe do Iterator Iterator<TipoDeElemento> it = myCollection.iterator(); While(it.hasNext()){ chama it.next() para obter o próximo elemento Faz algo com este elemento } Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Sintaxe do Iterator // Lista todas as notas utilizando o Iterator public void listarTodasNotas_Iterator(){ Iterator<String> it = notes.iterator(); while(it.hasNext()){ System.out.println(it.next()); } } Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Coleções de tamanho fixo Em algumas situações sabemos antecipadamente o tamanho de uma coleção. Em tais circunstâncias é melhor utilizar uma coleção de tamanho fixo. Uma coleção de tamanho fixo é chamada de Array. Vantagens: O acesso aos itens mantidos em um Array costuma ser mais eficiente do que acesso aos itens em uma coleção de tamanho flexível. Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Array em JAVA Tipo[] nome; Exemplo de uma campo array: private String[] nomes; Para instanciar: nomes = new String[10]; Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Exemplo – Arquivo de Log Os servidores da Web em geral mantêm arquivos de log de clientes às páginas da Web que armazenam. Com uso das ferramentas adequadas, esses logs permitem que gerenciadores de serviços Web extraiam e analisem informações. Crie uma classe WebLog que armazena a quantidade de acesso das 24 horas do dia e outro método para imprimir todos os acessos do dia por hora. Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Exemplo – Arquivo de Log Implementação public class WebLog { private int[] horas; public WebLog(){ horas = new int[24]; } Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Exemplo – Arquivo de Log Implementação public void incAcesso(int aHora){ int lIndice; lIndice = aHora - 1; if ((aHora >= 0) && (aHora < 24)){ horas[lIndice]++; }else{ System.out.println("Horário inválido: " + aHora); } } Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Exemplo – Arquivo de Log Implementação public void imprimirHorarios(){ for (int i=0;i<24;i++){ System.out.println("Hora: " + i +" Quantidade de acesso " + horas[i]); } } Univasf – Engenharia de Computação – Programação Orientada a Objetos- Prof.: Rosalvo Neto Dúvidas