Aula prática 2

Sumário

Objectivos

Os alunos no final desta aula deverão conhecer:

  1. Os conceitos de lista e iterador e operações associadas. 
  2. A noção de itens fictícios de uma lista e sua utilidade para a utilização de iteradores.
  3. A implementação destes conceitos à custa de matrizes de dimensão fixa.
  4. A utilidade da modularização física para reaproveitamento de código entre projectos.
  5. A utilidade da modularização física para uma melhor estruturação e modularização do código.

Deverão também ser capazes de:

  1. Implementar completamente as classes listas e iterador à custa de matrizes de dimensão fixa.
  2. Utilizar as classes definidas em programas.

Caso os alunos sintam que os objectivos não foram atingidos na totalidade deverão concluir/repetir os exercícios desta aula autonomamente e ou recorrer aos horários de dúvidas.

Material de apoio

Os ficheiros relativos a esta aula estão disponíveis no arquivo Aula2.zip.

Exercícios

1.  No módulo físico lista_de_telefonema, constituído pelos ficheiros lista_de_telefonema.H, lista_de_telefonema_impl.H e lista_de_telefonema.C , encontra uma versão incompleta da classe ListaDeTelefonema.  Esta classe representa uma lista cujos itens pertencem à classe Telefonema (disponibilizada no módulo físico telefonema, com ficheiros telefonema.H, telefonema_impl.H e telefonema.C que se encontram em ~/POO/Aula2).

1.a)  Qual o objectivo da classe Iterador, embutida na classe ListaDeTelefonema?

1.b)  Porque se declara a classe Iterador como classe amiga de ListaDeTelefonema?

1.c)  Porque razão existem ambos os métodos Item const& ListaDeTelefonema::frente() const e Item& ListaDeTelefonema::frente()?

1.d)  Qual o interesse da instrução typedef Telefonema Item?  Que alterações seriam necessárias para  desenvolver a classe ListaDeAluno,  representando listas de itens do tipo Aluno (ver classe implementada na Aula 1).

1.e)  Complete os métodos e rotinas a seguir indicados (por ordem):

  1. void ListaDeTelefonema::remove(Iterador& iterador);
  2. Iterador& ListaDeTelefonema::Iterador::operator++();
  3. duracaoDosTelefonemasPara(std::string const& numero, ListaDeTelefonema& lista_de_telefonemas); do ficheiro duracao_dos_telefonemas.C.
  4. void ListaDeTelefonema::poeAtras(Item const& novo_item);
  5. void ListaDeTelefonema::tiraDaFrente();
1.f)  Teste o seu programa de duas formas:
  1. Usando o main() de teste do módulo lista_de_telefonema.
  2. Usando o main() que se encontra no ficheiro duracao_dos_telefonemas.C.

Em qualquer dos casos pode recorrer ao ficheiro de construção fornecido (Makefile).