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 3 Utilização de listas Melhorando a implementação das listas e iteradores Reflexão sobre interfaces.

Apresentações semelhantes


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

1 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 e implementação: vantagens de definir uma boa interface

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

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

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

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

6 2002/2003 Programação Orientada para Objectos 6 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); 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().numero() << endl; }

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

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

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

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

11 2002/2003 Programação Orientada para Objectos 11 Remoção de um elemento inline void ListaDeInt::remove(Iterador& iterador) { assert(cumpreInvariante()); 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! 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()); }


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

Apresentações semelhantes


Anúncios Google