A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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.

Apresentações semelhantes


Apresentação em tema: "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."— Transcrição da apresentação:

1 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

2 2002/2003 Programação Orientada para Objectos 2 O que é uma lista? (I) Exemplo: Estudar POO Comprar prenda para o dia do pai Fazer trabalho de SO Combinar ida ao concerto do Mark Knopfler

3 2002/2003 Programação Orientada para Objectos 3 O que é uma lista? (II) Sequência de itens em que a ordem é relevante, mas não é dada pelos elementos em si: é determinada por uma entidade exterior à lista que insere os itens pela ordem que entende

4 2002/2003 Programação Orientada para Objectos 4 Operações com listas Construir Pôr item na frente Pôr item na traseira Tirar item da frente Tirar item de trás Saber item da frente Saber item de trás Saber comprimento Saber se está vazia Saber se está cheia (caso exista limite) Esvaziar

5 2002/2003 Programação Orientada para Objectos 5 Iterador Ferramenta para percorrer e referenciar itens em listas Operações: Construir Saber item referenciado Passar ao próximo item Recuar para o item anterior Comparar iteradores (igualdade e diferença)

6 2002/2003 Programação Orientada para Objectos 6 Operações: listas e iteradores Obter primeiro iterador Obter último iterador Inserir item antes do item referenciado pelo iterador Remover item referenciado pelo iterador Obter iterador para o início Obter iterador para o fim

7 2002/2003 Programação Orientada para Objectos 7 Interface das listas 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();

8 2002/2003 Programação Orientada para Objectos 8 Interface dos iteradores 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);

9 2002/2003 Programação Orientada para Objectos 9 Implementação das listas 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; };

10 2002/2003 Programação Orientada para Objectos 10 Implementação dos iteradores class ListaDeInt::Iterador { … private: ListaDeInt& lista_associada; int índice_do_item_referenciado; bool cumpreInvariante() const; friend class ListaDeInt; };

11 2002/2003 Programação Orientada para Objectos 11 ListaDeInt (I) inline ListaDeInt::ListaDeInt() : número_de_itens(0) { assert(cumpreInvariante()); } inline int ListaDeInt::comprimento() const { assert(cumpreInvariante()); return número_de_itens; } inline bool ListaDeInt::estáVazia() const { assert(cumpreInvariante()); return comprimento() == 0; }

12 2002/2003 Programação Orientada para Objectos 12 ListaDeInt (II) void ListaDeInt::põeNaFrente(Item const& item) { assert(cumpreInvariante()); assert(not estáCheia()); for(int i = comprimento(); i != 0; --i) itens[i] = itens[i – 1]; itens[0] = item; ++número_de_itens; assert(cumpreInvariante()); } inline void ListaDeInt::tiraDeTrás() { assert(cumpreInvariante()); assert(not estáVazia()); --número_de_itens; assert(cumpreInvariante()); }

13 2002/2003 Programação Orientada para Objectos 13 ListaDeInt (III) void ListaDeInt::insereAntes(Iterador& iterador, Item const& item) { assert(cumpreInvariante()); assert(not estáCheia()); assert(iterador != início()); for(int i = comprimento(); i != iterador.índice_do_item_referenciado; --i) itens[i] = itens[i – 1]; itens[iterador.índice_do_item_referenciado] = item; ++iterador.índice_do_item_referenciado; assert(iterador.cumpreInvariante()); ++número_de_itens; assert(cumpreInvariante()); }

14 2002/2003 Programação Orientada para Objectos 14 ListaDeInt (IV) inline ListaDeInt::Iterador ListaDeInt::primeiro() { assert(cumpreInvariante()); Iterador iterador(*this); assert(cumpreInvariante()); return iterador; } Ou simplesmente: inline ListaDeInt::Iterador ListaDeInt::primeiro() { assert(cumpreInvariante()); return Iterador(*this); }

15 2002/2003 Programação Orientada para Objectos 15 ListaDeInt (V) inline ListaDeInt::Iterador ListaDeInt::último() { assert(cumpreInvariante()); Iterador iterador(*this); iterador.índice_do_item_referenciado = comprimento() – 1; assert(iterador.cumpreInvariante()); assert(cumpreInvariante()); return iterador; }

16 2002/2003 Programação Orientada para Objectos 16 ListaDeInt::Iterador (I) inline ListaDeInt::Iterador::Iterador(ListaDeInt& lista) : lista_associada(lista), índice_do_item_referenciado(0) { assert(cumpreInvariante()); } inline ListaDeInt::Iterador& ListaDeInt::Iterador::operator--() { assert(cumpreInvariante()); assert(*this != lista_associada.início()); --índice_do_item_referenciado; assert(cumpreInvariante()); return *this; }

17 2002/2003 Programação Orientada para Objectos 17 ListaDeInt::Iterador (II) inline bool ListaDeInt::Iterador::operator==(Iterador const& outro) const { assert(cumpreInvariante() and outro.cumpreInvariante()); // assert(iteradores associados à mesma lista…); return índice_do_item_referenciado == outro.índice_do_item_referenciado; } ListaDeInt::Item& ListaDeInt::Iterador::item() { assert(cumpreInvariante()); assert(*this != lista_associada.início() and *this != lista_associada.fim()); return lista_associada.itens[índice_do_item_referenciado]; }


Carregar ppt "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."

Apresentações semelhantes


Anúncios Google