Guião da 10ª Aula Prática

Sumário

Ver Tipos Enumerados no Resumo da Aula 10.  Fazer uma pequena introdução.

Ver Construtores no Resumo da Aula 10.  Explicar que têm de se usar listas de inicializadores quando há atributos constantes.  Mas frisar que as listas de inicializadores são preferíveis mesmo para variáveis.

Atenção!  Estes exercícios devem ser feitos pausadamente, com calma, com tudo bem explicado!  Os exercícios, e a disciplina na sua resolução, são muito importantes para se entrar na matéria das classes e, sobretudo, para incentivar a política de escrever os testes primeiro.  Explorar todos os erros que ocorram: chamar a atenção para a sua detecção quer pela programação por contrato, quer pelo programa de teste.

Resoluções

1.  Ver lampada.C.

2.  A resolução pausada e acompanhada deste exercício é muito, mesmo muito importante!

2.a)  Ver ex2a.C.

Ensinar a escrever código mesmo incompleto.  Ver o primeiro if da opção de inserção, por exemplo.  Explicar a razão para o typedef de BI!

2.b)  Uma fila é um contentor de itens.  Neste caso temos uma file de BI.  Do código já escrito é óbvio que são necessárias para o TAD FilaDeString pelo menos as seguintes operações:

  1. Construtor de uma fila vazia.  A capacidade máxima da fila pode ser indicada durante a construção ou limitada a priori pela própria classe.  Neste caso optar-se-á pela última alternativa.
  2. Inspector para o valor do item que está na frente da fila.
  3. Já agora, um inspector para saber o comprimento da fila.
  4. Predicado para saber se a fila está vazia.
  5. Predicado para saber se a fila está cheia.
  6. Modificador para acrescentar um novo item à traseira da fila.
  7. Modificador para retirar o item na frente da fila.

Explicar:

Explicar que inspectores são quase sempre funções membro (por vezes são procedimentos membro), predicados são sempre funções membro que devolvem bool e modificadores são sempre procedimentos membro.

Dizer que faltou o mais importante!  O contrato das operações!

  1. Construtor de uma fila vazia.  A capacidade máxima da fila é limitada a priori a 12 itens pela própria classe.
  2. Inspector para o valor do item que está na frente da fila.  A fila não pode estar vazia!
  3. Inspector para saber o comprimento da fila.
  4. Predicado para saber se a fila está vazia.
  5. Predicado para saber se a fila está cheia.
  6. Modificador para acrescentar um novo item à traseira da fila.  A fila não pode estar cheia!
  7. Modificador para retirar o item na frente da fila.  A fila não pode estar vazia!

2.c)  Atenção!  Não esquecer que este exercício é para durar três aulas!  Na resolução usa-se operações constantes e devoluções por referência constante.  Alguns desses conceitos dizem respeito às aulas seguintes:

Assim, da resolução usar apenas aquilo que for possível em cada aula.

Ver ex2c.C.  Esta versão não compila!  Nem sequer o teste!

2.d)  Ver ex2d.C.  Ver o código.  Discutir passo a passo o que colocar nos métodos!  Discutir cuidadosamente o programa de teste.  Discutir calmamente como compilar ambas as versões.

2.e)  Discutir com eles pausadamente a implementação.  Devem ser eles a descobrir a forma de representar a fila.  Mesmo que seja com dicas subtis!  Ver ex2e.C.  Notar a definição da constante comprimento_maximo, para além da sua declaração!

2.f)  Ir pela ordem de ocorrência das invocações das operações no programa de teste.  É muito importante que eles vão sempre compilando e executando o programa de teste, verificando que vão ultrapassando cada vez mais barreiras.  Ver ex2f.C.

3.    Ver ex3.C.