• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
POO - 14 - Vetores
 

POO - 14 - Vetores

on

  • 2,161 views

 

Statistics

Views

Total Views
2,161
Views on SlideShare
2,161
Embed Views
0

Actions

Likes
1
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    POO - 14 - Vetores POO - 14 - Vetores Presentation Transcript

    • Fundamentos da Linguagem Java Vetores em Java Implementação de Estruturas de Dados Ludimila Monjardim Casagrande 2012
    • Vetor  Um vetor é uma lista implementada usando um array.  O que são listas?  Lista é uma estrutura de dados que, por definição, permite objetos duplicados e é ordenada.  Uma estrutura de dados deve definir:  A maneira como o dado será armazenado;  A interface ou operações disponíveis para uso.Vetores em Java ©2012 Ludimila Monjardim Casagrande 2
    • Vetor  Um array é uma porção de memória fixa e sequencial dividida em pedaços idênticos indexados a partir de 0.  A capacidade de um array é fixa e deve ser informada no momento da criação do array.Vetores em Java ©2012 Ludimila Monjardim Casagrande 3
    • Vetor de Objetos  Em cada posição do array (ou vetor), podemos guardar um objeto. Na verdade, cada posição pode guardar uma referência para um objeto. Exemplo: Array, vetor ou lista de Alunos.Vetores em Java ©2012 Ludimila Monjardim Casagrande 4
    • O que vamos implementar?  Vamos implementar um vetor para a listagem de Alunos.  Para isso, precisamos primeiro implementar a classe Aluno.  Em seguida, precisamos definir a interface da lista, isto é, as operações públicas disponíveis para a manipulação de dados nessa estrutura.Vetores em Java ©2012 Ludimila Monjardim Casagrande 5
    • Classe Aluno package poo.modelo; @Override public class Aluno { public String toString() { private int matricula; return "Aluno [matricula=" + matricula + ", nome=" + nome + "]"; private String nome; } public Aluno(int matricula, String nome) { @Override this.nome = nome; public boolean equals(Object obj) { this.matricula = matricula; if (this == obj) { } return true; } public int getMatricula() { if (obj == null) { return matricula; return false; } } public void setMatricula(int matricula) { if (!(obj instanceof Aluno)) { this.matricula = matricula; return false; } } public String getNome() { Aluno a = (Aluno) obj; return nome; if (matricula != a.matricula) { } return false; } public void setNome(String nome) { return true; Obs.: Incluir o this.nome = nome; } construtor default. } }Vetores em Java ©2012 Ludimila Monjardim Casagrande 6
    • Operações da Lista  Vamos implementar as seguintes operações:  Adicionar um dado objeto no fim da lista;  Adicionar um dado objeto em uma dada posição;  Recuperar o objeto de uma dada posição;  Remover o objeto de uma dada posição;  Verificar se um dado objeto está contido na lista;  Obter a quantidade de objetos (elementos) da lista.  Imprimir a lista (implementar o método toString()).Vetores em Java ©2012 Ludimila Monjardim Casagrande 7
    • Estrutura da Classe Vetor package poo.estruturas; public Aluno recupera(int posicao) { import poo.modelo.Aluno; // TODO implementação public class Vetor { return null; /** Declaração e inicialização de um array de } * objetos do tipo Aluno public void remove(int posicao) { * com capacidade para 100 objetos. */ // TODO implementação private Aluno[] alunos = new Aluno[100]; } public boolean contem(Aluno aluno) { /** Numero atual de elementos do array. */ // TODO implementação private int totalDeElementos; return false; } public void adiciona(Aluno aluno) { public int obtemTotalDeElementos() { // TODO implementação // TODO implementação } return 0; public void adiciona(int posicao, Aluno aluno) { } // TODO implementação } Obs.: Incluir também o } método toString().Vetores em Java ©2012 Ludimila Monjardim Casagrande 8
    • Considerações sobre o Vetor  Considere que os elementos do vetor devam estar estão todos compactados à esquerda, isto é, não existem posições vazias entre as posições ocupadas.Vetores em Java ©2012 Ludimila Monjardim Casagrande 9
    • Classes para Teste package poo.testes; import poo.modelo.Aluno; import poo.estruturas.Vetor; public class TesteAdicionaNoFim { public static void main(String[] args) { Aluno a1 = new Aluno(100, "José"); Aluno a2 = new Aluno(200, "João"); Vetor lista = new Vetor(); lista.adiciona(a1); lista.adiciona(a2); System.out.println(lista); Saída esperada: } [Aluno [matricula=100, nome=José], } Aluno [matricula=200, nome=João]]Vetores em Java ©2012 Ludimila Monjardim Casagrande 10
    • Classes para Teste package poo.testes; import poo.modelo.Aluno; import poo.estruturas.Vetor; public class TesteAdicionaPorPosicao { public static void main(String[] args) { Aluno a1 = new Aluno(101, "Rafael"); Aluno a2 = new Aluno(201, "Paulo"); Aluno a3 = new Aluno(301, "Ana"); Vetor lista = new Vetor(); lista.adiciona(a1); lista.adiciona(0, a2); lista.adiciona(1, a3); Saída esperada: System.out.println(lista); [Aluno [matricula=201, nome=Paulo], } Aluno [matricula=301, nome=Ana], } Aluno [matricula=101, nome=Rafael]]Vetores em Java ©2012 Ludimila Monjardim Casagrande 11
    • Classes para Teste package poo.testes; import poo.modelo.Aluno; import poo.estruturas.Vetor; public class TesteRecuperaPorPosicao { public static void main(String[] args) { Aluno a1 = new Aluno(101, "Rafael"); Aluno a2 = new Aluno(201, "Paulo"); Vetor lista = new Vetor(); lista.adiciona(a1); lista.adiciona(a2); Aluno aluno1 = lista.recupera(0); Aluno aluno2 = lista.recupera(1); Saída esperada: System.out.println(aluno1); Aluno [matricula=101, nome=Rafael] System.out.println(aluno2); Aluno [matricula=201, nome=Paulo] } }Vetores em Java ©2012 Ludimila Monjardim Casagrande 12
    • Classes para Teste package poo.testes; import poo.modelo.Aluno; import poo.estruturas.Vetor; public class TesteRemovePorPosicao { public static void main(String[] args) { Aluno a1 = new Aluno(101, "Rafael"); Aluno a2 = new Aluno(201, "Paulo"); Vetor lista = new Vetor(); lista.adiciona(a1); lista.adiciona(a2); lista.remove(0); System.out.println(lista); Saída esperada: } Aluno [matricula=201, nome=Paulo] }Vetores em Java ©2012 Ludimila Monjardim Casagrande 13
    • Classes para Teste package poo.testes; import poo.modelo.Aluno; import poo.estruturas.Vetor; public class TesteContemAluno { public static void main(String[] args) { Aluno a1 = new Aluno(101, "Rafael"); Aluno a2 = new Aluno(201, "Paulo"); Vetor lista = new Vetor(); lista.adiciona(a1); lista.adiciona(a2); System.out.println(lista.contem(a1)); Saída esperada: System.out.println(lista.contem(a2)); true Aluno a3 = new Aluno(301, "Ana"); true System.out.println(lista.contem(a3)); false } }Vetores em Java ©2012 Ludimila Monjardim Casagrande 14
    • Classes para Teste package poo.testes; import poo.modelo.Aluno; import poo.estruturas.Vetor; public class TesteRecuperaTamanhoDaLista { public static void main(String[] args) { Aluno a1 = new Aluno(101, "Rafael"); Aluno a2 = new Aluno(201, "Paulo"); Aluno a3 = new Aluno(); Vetor lista = new Vetor(); lista.adiciona(a1); lista.adiciona(a2); Saída esperada: System.out.println(lista.obtemTotalDeElementos()); 2 lista.adiciona(a3); 3 System.out.println(lista.obtemTotalDeElementos()); } }Vetores em Java ©2012 Ludimila Monjardim Casagrande 15
    • Método: adiciona(Aluno aluno)Possívelimplementação:Vetores em Java ©2012 Ludimila Monjardim Casagrande 16
    • Método: adiciona(Aluno aluno)  Problema da implementação anterior:  O consumo de tempo do método piora proporcional- mente na medida em que o número de elementos que existem no vetor aumenta, o que representa um consumo linear de tempo.Vetores em Java ©2012 Ludimila Monjardim Casagrande 17
    • Complexidade de Algoritmos  Consumo Linear x Consumo Constante:  Consumo (ou complexidade) linear: proporcional ao número de elementos do vetor. Indicado por: O(n).  Consumo (ou complexidade) constante: não varia em função do número de elementos do vetor. Indicado por: O(1). Consumo Linear x Consumo ConstanteVetores em Java ©2012 Ludimila Monjardim Casagrande 18
    • Método: adiciona(Aluno aluno) Implementação alternativa com consumo (complexidade) constante: Quantidade de elementos = Índice da primeira posição vazia Implementação parcial. Ainda falta verificar se o vetor está cheio, isto é, se totalDeAlunos < alunos.length.Vetores em Java ©2012 Ludimila Monjardim Casagrande 19
    • Método: adiciona(int posicao, Aluno aluno)  Verifique se o vetor está cheio.  Verifique se a posição desejada é válida. As posições válidas são as posições ocupadas e a primeira posição desocupada (=totalDeAlunos). Além disso, a posição desejada deve ser menor do que o tamanho do vetor.  Se a posição desejada for a última posição válida, apenas adicione o elemento nesta posição.Vetores em Java ©2012 Ludimila Monjardim Casagrande 20
    • Método: adiciona(int posicao, Aluno aluno)  Se a posição desejada for uma posição ocupada, desloque os elementos para a direita até desocupar a posição desejada. Por fim, adicione o elemento nesta posição e incremente o total de alunos.Vetores em Java ©2012 Ludimila Monjardim Casagrande 21
    • Método: recupera(int posicao)  A dica em relação a esse método é primeiro verificar se a posição desejada é uma posição ocupada, isto é, se a posição pertence ao intervalo de 0 a totalDeAlunos - 1.  Se sim, basta recuperar o objeto desta posição.Vetores em Java ©2012 Ludimila Monjardim Casagrande 22
    • Método: remove(int posicao)  Verifique se a posição desejada é uma posição ocupada.  Se for, remova o objeto alterando o valor da posição para null.  Em seguida, desloque os objetos à direita do objeto removido uma posição para a esquerda, caso eles existam.  Decremente o número total de alunos.Vetores em Java ©2012 Ludimila Monjardim Casagrande 23
    • Método: contem(Aluno aluno)  Nesta operação, precisamos comparar o aluno dado com todos os alunos existentes no vetor.  Para isso implemente um laço e compare os objetos usando o método equals.Vetores em Java ©2012 Ludimila Monjardim Casagrande 24
    • Caixas de Diálogo  Você pode exibir mensagens de erro ou informativas para o usuário usando uma caixa de diálogo da seguinte forma:Vetores em Java ©2012 Ludimila Monjardim Casagrande 25
    • Referências  CS-14: Algoritmos e Estruturas de Dados em Java. Caelum: Ensino e Inovação. http://www.caelum.com.br/curso/cs-14-algoritmos-estruturas-dados- java/  Capítulo 4 – Arrays. Orientação a Objetos em Java. K19 Treinamentos. http://www.k19.com.br/downloads/apostilas-java.  Capítulo 16 – Collections framework. Caelum: Ensino e Inovação. http://www.caelum.com.br/curso/fj-11-java-orientacao-objetos/Vetores em Java ©2012 Ludimila Monjardim Casagrande 26