Exemplo – Bloco de notas

Propaganda
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
Download