1 Aula 3 Listas e iteradores (cont.). 2003/2004 Programação Orientada para Objectos 2 ListaDeInt : interface class ListaDeInt { public: typedef int Item;

Slides:



Advertisements
Apresentações semelhantes
LISTAS Dilvan Moreira, parcialmente baseado em material do prof. Ricardo Campello.
Advertisements

O TAD fila O TAD fila armazena objetos arbitrários
Listas Lineares Estrutura que permite representar um conjunto de dados de forma a preservar a relação de ordem linear. Uma lista linear é composta de nós,
Classes C++ Class nome da classe { private: membros privados
Estruturas de Dados Árvores Binárias
Listas duplamente encadeadas
Programação II Estruturas de Dados
List templates Vamos considerar a lista ligada (singly linked list) O objecto da classe slink O objecto da classe slink O objecto da classe slink NULL.
1. Classes 2. Membros estáticos 1.1. Palavra chave this
Vamos abordar o exemplo
ESTRUTURAS DO TIPO FILA
INE 5384 Estruturas de Dados Prof a. Patrícia Vilain
Filas David Menotti Estruturas de Dados I DECOM – UFOP.
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Aula T12 – BCC202 Listas Túlio Toffolo
David Menotti Estruturas de Dados I DECOM – UFOP
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Erros A Evitar Redundância de Programação public void insere( Priorizavel obj ) throws listaVaziaException; Lançamento de exceções.
Slides: Prof. João Fabro UTFPR - Curitiba
1 Aula 5 Instâncias dinâmicas. 2003/2004 Programação Orientada para Objectos 2 Instâncias… int j = 20; int f() { int const i = 10; // … } Constante automática.
Matrizes clássicas e vectores em C++
1 Aula 4 Ponteiros. 2003/2004 Programação Orientada para Objectos 2 Instâncias de um programa C++ int i = 10; Nome: i Tipo: int Valor: 10.
Aula 7 Instrução de iteração while. 2003/2004 Introdução à Programação 2 passo [G][G] [¬G][¬G] Início da actividade Fim da actividade Actividade Transição.
2002/2003 Programação Orientada para Objectos 1 Aula 7 - Herança Herança pública: relação é um. A relação tem um. A relação é composto por um. Ponteiros,
Aula 11 Tipos Abstractos de Dados II. 2003/2004 Introdução à Programação 2 Estrutura global do programa #include using namespace std; int mdc(int const.
Programação Orientada para Objectos
Aula 8 Polimorfismo.
Aula 6 Instruções de selecção e instruções condicionais.
1 Aula 7 Herança. 2003/2004 Programação Orientada para Objectos 2 Conceitos fundamentais: Herança Polimorfismo Ligação dinâmica.
1 Aula 6 Classes que reservam recursos externos. 2003/2004 Programação Orientada para Objectos 2 PilhaDeInt : interface /** Representa pilhas de int.
Sobrecarga de nomes de rotinas Rotinas recursivas Invocação de rotinas
Aula 12 Biblioteca padrão do C++ O que é? Composição
Aula 9 Fases do desenvolvimento de software UML Diagramas de classes
2002/2003 Programação Orientada para Objectos 1 Aula 5 Memória livre e instâncias dinâmicas Criação de instâncias dinâmicas Destruição de instâncias dinâmicas.
Fases do desenvolvimento de software UML
2002/2003 Programação Orientada para Objectos 1 Aula 4 Memória, unidade básica de memória e conceito de endereço Ponteiros Relação de ponteiros com matrizes.
2002/2003 Programação Orientada para Objectos 1 Aula 3 Utilização de listas Melhorando a implementação das listas e iteradores Reflexão sobre interfaces.
Aula 2 Listas e iteradores.
ALGORITMOS E ESTRUTURAS DE DADOS
Prof. Hilton Cardoso Marins Junior LISTA LINEAR
Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C
Listas Encadeadas Raquel O. Prates, Luiz Chaimowicz, Jussara Almeida
Algoritmos e Estruturas de Dados
Revisão /*======================================================*/
Classes Revisando: –Forma de implementação de estruturas específicas –Atributos (grupos de dados) –Métodos (conjuntos de procedimentos)
Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista Linguagens de Programação Prof. Miguel Elias Mitre Campista
INTELIGÊNCIA ARTIFICIAL
Lista Encadeada Circular Lista Duplamente Encadeada
Faculdade de Informática e Tecnologia de Pernambuco ESTRUTURA DE DADOS
Orientação a Objetos e Java Graduação em Ciência da Computação
Programação orientada a objectos em C++
Desenvolvimento de Jogos e Entretenimento Digital Oficina temática: Algoritmos e Programação Orientação a Objetos: herança Professor: Sandro Rigo.
Árvore Binária de Busca
Filas. #define MAXFILA 100 typedef struct queue { int item [ MAXFILA]; int inic, fim; } fila; fila q;
2002/2003 Programação Orientada para Objectos 1 Aula 6 Classes que reservam recursos externos Problemas comuns Construtores e destrutores Construção por.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Universidade Católica de Angola Prática de laboratório Fundamentos de Programação II Frei Joaquim José Hangalo.
2002/2003 Programação Orientada para Objectos 1 Aula 2 Noção de lista e de iterador Operações com listas e iteradores Classes embutidas.
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Coleções em Java - Parte 2
Estruturas de Dados Aula 9 -2: Listas simplesmente encadeadas sem sentinela e sem cabeçalho 19/06/2013.
Estruturas de Dados Aula 10: Listas (parte 2) 07/05/2014.
Associação. 2 Desafio – Aula class Aluno { 2. private String nome; 3. private float nota; 4. public Aluno(String nome, float nota){ 5. this.nome.
Profa. Juliana Mafra ESTRUTURA DE DADOS 30 de Setembro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.
Implementação Orientada a Objetos – Aula 07 Agregação e composição de objetos Prof. Danielle Martin Universidade de Mogi das Cruzes
Implementação Orientada a Objetos – Aula 04 Métodos, parâmetros e retorno Prof. Danielle Martin/Marcia Bissaco Universidade de Mogi das Cruzes
Algoritmos de Pesquisa
IDENTIFICAÇÃO DOS RELACIONAMENTOS Nesta atividade devem ser definidos os relacionamentos entre as classes Podem ser representados pela: – associação, –
Introdução a Programação
Orientação a Objetos - Programação em C++
Transcrição da apresentação:

1 Aula 3 Listas e iteradores (cont.)

2003/2004 Programação Orientada para Objectos 2 ListaDeInt : interface class ListaDeInt { public: typedef int Item; class Iterador; ListaDeInt(); Item const& frente() const; Item const& trás() const; int comprimento() const; bool estáVazia() const; bool estáCheia() const; void põeNaFrente(Item const& item); void põeAtrás(Item const& item); void tiraDaFrente(); void tiraDeTrás(); void insereAntes(Iterador& iterador, Item const& item); void remove(Iterador& iterador); void esvazia(); Iterador primeiro(); Iterador último(); Iterador início(); Iterador fim();

2003/2004 Programação Orientada para Objectos 3 ListaDeInt : implementação class ListaDeInt { … private: static int const número_máximo_de_itens = 100; Item itens[número_máximo_de_itens]; int número_de_itens; bool cumpreInvariante() const; friend class Iterador; }; return 0 <= número_de_itens and número_de_itens <= número_máximo_de_itens;

2003/2004 Programação Orientada para Objectos 4 ListaDeInt::Iterador : interface class ListaDeInt::Iterador { public: explicit Iterador(ListaDeInt& lista_associada); Item& item() const; bool operator==(Iterador const& outro_iterador) const; bool operator!=(Iterador const& outro_iterador) const; Iterador& operator++(); Iterador& operator--(); Iterador operator++(int); Iterador operator--(int);

2003/2004 Programação Orientada para Objectos 5 ListaDeInt::Iterador : implementação class ListaDeInt::Iterador { … private: ListaDeInt& lista_associada; int índice_do_item_referenciado; bool cumpreInvariante() const; friend class ListaDeInt; }; return -1 <= índice_do_item_referenciado;

2003/2004 Programação Orientada para Objectos 6 Aluno class Aluno { public: Aluno(string const& nome =, int número = 0); string const& nome() const; int número() const; private: string nome_; int número_; }; Aluno::Aluno(string const& nome, int const número) : nome_(nome), número_(número) {} string const& Aluno::nome() const { return nome_; } int Aluno::número() const { return número_; }

2003/2004 Programação Orientada para Objectos 7 Listas de outros tipos Alterar Nome da lista e respectivo construtor Alterar typedef Exemplo: ListaDeInt para ListaDeAluno typedef int Item; passa a typedef Aluno Item;

2003/2004 Programação Orientada para Objectos 8 Utilização de listas int main() { ListaDeAluno lista; for(int i = 0; i != 100; ++i) { string nome; // uma só palavra! int número; cin >> nome >> número; Aluno aluno(nome, número); // Inserir por ordem… } for(ListaAluno::Iterador i = lista.primeiro(); i != lista.fim(); ++i) cout << i.item().nome() << ' ' << i.item().número() << endl; }

2003/2004 Programação Orientada para Objectos 9 Inserir por ordem int main() { ListaDeAluno lista; for(int i = 0; i != 100; ++i) { string nome; // uma só palavra! int número; cin >> nome >> número; Aluno aluno(nome, número); ListaDeAluno::Iterador i = lista.primeiro(); while(i != lista.fim() and i.item().nome() < nome) ++i; lista.insereAntes(i, aluno); } for(ListaAluno::Iterador i = lista.primeiro(); i != lista.fim(); ++i) cout << i.item().nome() << ' ' << i.item().número() << endl; }

2003/2004 Programação Orientada para Objectos 10 Diagrama lista : ListaDeAluno itens : Item [100] i: ListaDeAluno. Iterador índice_do_item_referenciado : int 5 número_de_itens : int itens [0]: Ana itens [1]: itens [2]: itens [3]: itens [4]: itens [5]: itens [99]: itens [6]: Berto Carlos Duarte Xico lista_associada : ListaDeAluno &

2003/2004 Programação Orientada para Objectos 11 Cadeia simplesmente ligada class ListaDeInt { … private: … struct Elo { Item item; int seguinte; }; Elo elos[número_máximo_de_itens]; … };

2003/2004 Programação Orientada para Objectos 12 Diagrama: cadeia simplesmente ligada elos [0]: seguinte : 13 item : Aluno Ana elos [13]: seguinte : 1 item : Aluno Berto 12345

2003/2004 Programação Orientada para Objectos 13 ListaDeInt::insereAntes() void ListaDeInt::insereAntes(Iterador const& iterador, Item const& item) { assert(cumpreInvariante()); assert(not estáCheia()); assert(iterador != início()); ++número_de_itens; ? assert(cumpreInvariante()); } int const elo_reservado = reservaElo(); elos[elo_reservado].item = item; elos[elo_reservado].seguinte = iterador.elo_do_item_referenciado;

2003/2004 Programação Orientada para Objectos 14 Cadeia duplamente ligada class ListaDeInt { … private: … struct Elo { Item item; int anterior; int seguinte; }; … };

2003/2004 Programação Orientada para Objectos 15 Diagrama: cadeia duplamente ligada elos [10]: seguinte : 45 item : Aluno Ana elos [45]: seguinte : 11 item : Aluno Berto anterior : 33 anterior : 10

2003/2004 Programação Orientada para Objectos 16 ListaDeInt::insereAntes() void ListaDeInt::insereAntes(Iterador const& iterador, Item const& item) { assert(cumpreInvariante()); assert(not estáCheia()); assert(iterador != início()); ++número_de_itens; int const elo_reservado = reservaElo(); elos[elo_reservado].item = item; elos[elo_reservado].seguinte = iterador.elo_do_item_referenciado; ? assert(cumpreInvariante()); } int const anterior = elos[iterador.elo_do_item_referenciado].anterior; elos[anterior].seguinte = elo_reservado;

2003/2004 Programação Orientada para Objectos 17 ListaDeInt::insereAntes() : completo (I) void ListaDeInt::insereAntes(Iterador const& iterador, Item const& item) { assert(cumpreInvariante()); assert(not estáCheia()); assert(iterador != início()); ++número_de_itens; int const elo_reservado = reservaElo(); (continua)

2003/2004 Programação Orientada para Objectos 18 ListaDeInt::insereAntes() : completo (II) (continuação) elos[elo_reservado].item = item; elos[elo_reservado].anterior = elos[iterador.elo_do_item_referenciado].anterior; elos[elo_reservado].seguinte = iterador.elo_do_item_referenciado; int const anterior = elos[iterador.elo_do_item_referenciado].anterior; elos[anterior].seguinte = elo_reservado; elos[iterador.elo_do_item_referenciado].anterior = elo_reservado; assert(cumpreInvariante()); }

2003/2004 Programação Orientada para Objectos 19 Cadeia duplamente ligada com guardas class ListaDeInt { … private: … struct Elo { Item item; int anterior; int seguinte; }; … Elo elos[número_máximo_de_itens + 2]; static int const inicial = número_máximo_de_itens; static int const final = número_máximo_de_itens + 1; … };

2003/2004 Programação Orientada para Objectos 20 ListaDeInt : construtor ListaDeInt::ListaDeInt() : número_de_itens(0) { elos[inicial].seguinte = final; elos[final].anterior = inicial; ? // falta aqui qualquer coisa... assert(cumpreInvariante()); }

2003/2004 Programação Orientada para Objectos 21 ListaDeInt::remove() (I) inline void ListaDeInt::remove(Iterador& iterador) { assert(cumpreInvariante()); assert(not estáVazia()); assert(iterador != início() and iterador != fim()); --número_de_itens; int const elo_a_remover = iterador.elo_do_item_referenciado; ++iterador; // Avançar iterador! (continua)

2003/2004 Programação Orientada para Objectos 22 ListaDeInt::remove() (II) (continuação) elos[elos[elo_a_remover].anterior].seguinte = elos[elo_a_remover].seguinte; elos[elos[elo_a_remover].seguinte].anterior = elos[elo_a_remover].anterior; libertaElo(elo_a_remover); assert(cumpreInvariante()); }

2003/2004 Programação Orientada para Objectos 23 A fazer… reservaElo() libertaElo() Saber quais os elos livres Implementar os restantes métodos Implementar classe Lista.Iterador

2003/2004 Programação Orientada para Objectos 24 Diagrama: cadeia duplamente ligada com guardas elos [0]: anterior : 7 seguinte : elos [10]: Ana item : Aluno 100 anterior : 101 seguinte : elos [100]: anterior : 10 seguinte : elos [101]: 10 anterior : seguinte : 1 número_de_itens : int 100 elo_inicial : int 101 elo_final : int 0 primeiro_elo_livre : int elos [7]: anterior : 43 seguinte :

2003/2004 Programação Orientada para Objectos 25 Interface vs. implementação Alteração da implementação não implica alteração da interface Programas que usavam Lista não precisam de ser alterados

2003/2004 Programação Orientada para Objectos 26 Aula 3 Utilização de listas Fazendo inserções ordenadas Melhorando a implementação das listas e iteradores: Identificando problemas de eficiência Noções de cadeia simplesmente ligada, cadeia duplamente ligada e cadeia duplamente ligada com guardas Necessidade de distinguir posições livres Implementação parcial do módulo Reflexão sobre interfaces e implementação: Vantagens de definir uma boa interface