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

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

1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai.

Apresentações semelhantes


Apresentação em tema: "1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai."— Transcrição da apresentação:

1 1 Aula 2 Listas e iteradores

2 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai Fazer trabalho de SO Comprar bilhete para o Rock in Rio

3 2003/2004 Programação Orientada para Objectos 3 Uma lista é… Sequência de itens Ordem é relevante Ordem determinada por entidade exterior à lista

4 2003/2004 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 2003/2004 Programação Orientada para Objectos 5 Iterador Ferramenta para percorrer e referenciar itens em listas Estudar POO Comprar prenda para o dia do pai Fazer trabalho de AC II Comprar bilhete para o Rock in Rio

6 2003/2004 Programação Orientada para Objectos 6 Operações com iteradores Construir Saber item referenciado Passar ao próximo item Recuar para o item anterior Comparar iteradores (igualdade e diferença)

7 2003/2004 Programação Orientada para Objectos 7 Operações: listas e iteradores Obter iterador primeiro Obter iterador último Inserir item antes do item referenciado pelo iterador Remover item referenciado pelo iterador Iterador que referencia o primeiro item da lista.

8 2003/2004 Programação Orientada para Objectos 8 Itens fictícios Item inicial Item aquém da frente da lista Referenciado pelo iterador início Item final Item além da traseira da lista Referenciado pelo iterador fim

9 2003/2004 Programação Orientada para Objectos 9 Exemplo ( ! ! ) Item fictício inicial. Item fictício final. Itens regulares.

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

11 2003/2004 Programação Orientada para Objectos 11 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();

12 2003/2004 Programação Orientada para Objectos 12 Classes dentro de classes Classes embutidas Definidas dentro de uma classe envolvente Membro da classe envolvente Evitam repetições de nomes Relação íntima com classe envolvente

13 2003/2004 Programação Orientada para Objectos 13 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);

14 2003/2004 Programação Orientada para Objectos 14 Mostrar itens no ecrã ListaDeInt lista; // Inserção de itens… for(ListaDeInt::Iterador i = lista.primeiro(); i != lista.fim(); ++i) cout << i.item() << endl;

15 2003/2004 Programação Orientada para Objectos 15 Inserir por ordem ListaDeInt lista; // Inserção de itens… int n; cin >> n; ListaDeInt::Iterador i = lista.primeiro(); while(i != lista.fim() and i.item() < d) ++i; lista.insere(i, d);

16 2003/2004 Programação Orientada para Objectos 16 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; }; return 0 <= número_de_itens and número_de_itens <= número_máximo_de_itens;

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

18 2003/2004 Programação Orientada para Objectos 18 ListaDeInt : métodos (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; }

19 2003/2004 Programação Orientada para Objectos 19 ListaDeInt : métodos (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()); }

20 2003/2004 Programação Orientada para Objectos 20 ListaDeInt : métodos (III) void ListaDeInt::tiraDeTrás() { assert(cumpreInvariante()); assert(not estáVazia()); --número_de_itens; assert(cumpreInvariante()); }

21 2003/2004 Programação Orientada para Objectos 21 ListaDeInt : métodos (IV) 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; (continua…)

22 2003/2004 Programação Orientada para Objectos 22 ListaDeInt : métodos (V) (continuação) ++iterador.índice_do_item_referenciado; assert(iterador.cumpreInvariante()); ++número_de_itens; assert(cumpreInvariante()); }

23 2003/2004 Programação Orientada para Objectos 23 ListaDeInt : métodos (VI) 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); }

24 2003/2004 Programação Orientada para Objectos 24 ListaDeInt : métodos (VI) inline ListaDeInt::Iterador ListaDeInt::último() { assert(cumpreInvariante()); Iterador iterador(*this); iterador.índice_do_item_referenciado = comprimento() – 1; assert(iterador.cumpreInvariante()); assert(cumpreInvariante()); return iterador; }

25 2003/2004 Programação Orientada para Objectos 25 ListaDeInt : métodos (VII) inline ListaDeInt::Iterador ListaDeInt::início() { assert(cumpreInvariante()); Iterador iterador(*this); iterador.índice_do_item_referenciado = –1; assert(iterador.cumpreInvariante()); assert(cumpreInvariante()); return iterador; }

26 2003/2004 Programação Orientada para Objectos 26 ListaDeInt : métodos (VIII) inline ListaDeInt::Iterador ListaDeInt::fim() { assert(cumpreInvariante()); Iterador iterador(*this); iterador.índice_do_item_referenciado = comprimento(); assert(iterador.cumpreInvariante()); assert(cumpreInvariante()); return iterador; }

27 2003/2004 Programação Orientada para Objectos 27 ListaDeInt::Iterador : métodos (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; }

28 2003/2004 Programação Orientada para Objectos 28 ListaDeInt::Iterador : métodos (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; }

29 2003/2004 Programação Orientada para Objectos 29 ListaDeInt::Iterador : métodos (III) 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; }

30 2003/2004 Programação Orientada para Objectos 30 ListaDeInt::Iterador : métodos (IV) 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]; }

31 2003/2004 Programação Orientada para Objectos 31 Aula 2 Noção de lista e de iterador Listas como sequências de itens com ordem relevante Iteradores como ferramentas para percorrer e referenciar itens em listas Operações com listas e iteradores Implementação parcial Classes embutidas


Carregar ppt "1 Aula 2 Listas e iteradores. 2003/2004 Programação Orientada para Objectos 2 O que é uma lista? Exemplo: Estudar POO Comprar prenda para o dia do pai."

Apresentações semelhantes


Anúncios Google