Pular para conteúdo

Avaliação 2 — regras e formato

Cobertura

Unidades 4, 5 e 6, ou seja, os capítulos 8 a 13: iteradores, lambdas e <algorithm>; classes, encapsulamento, construtores, destrutor, RAII, regra do zero, herança, polimorfismo (virtual/override), classes abstratas, sobrecarga de operadores, e estruturas de dados com new/delete (filas, pilhas, listas encadeadas).

A partir desta avaliação, use as ferramentas prontas: o que na Avaliação 1 tinha que ser escrito à mão (ordenar, buscar, contar) agora se resolve com std::sort, std::find e std::count_if.

Peso

A Avaliação 2 vale 1/3 da nota final — o mesmo peso da Avaliação 1 e do projeto.

Formato

Mesmo formato da Avaliação 1:

  • Prova manuscrita, em papel. Sem computador e sem compilador: o código que você escrever não vai ser executado, vai ser lido.
  • Duração: 90 minutos.
  • 1 questão de leitura de código: você recebe um trecho e precisa dizer o que ele imprime e explicar por que se comporta assim — aqui, focada nos bugs característicos de orientação a objetos (herança sem virtual, destrutor não-virtual, cópia de quem gerencia recurso).
  • 4 questões de escrever código: a declaração da classe vem dada no enunciado, e você escreve o corpo dos métodos pedidos. Você não vai precisar transcrever uma classe inteira à mão.

Consulta

Sem consulta ao material do curso. Você pode levar uma folha de consulta — uma página, frente e verso, escrita por você.

Nesta prova ela tende a ser mais útil que na Avaliação 1, e por um motivo específico: a sintaxe de OO em C++ é cheia de detalhes que ninguém decora (a sintaxe da lista de inicialização, onde entra o const, onde entra o override, como se declara um método virtual puro). Uma folha com três ou quatro esqueletos de classe bem escolhidos resolve boa parte disso, e montá-la é um jeito eficiente de revisar.

Como é corrigida

Vale o mesmo princípio da Avaliação 1 — o que se avalia é o raciocínio, não a sintaxe perfeita. Sem compilador para apontar erro, um ; esquecido ou um std:: faltando não zera questão nenhuma, e uma resposta com a lógica certa e um detalhe errado vale bem mais que uma folha em branco.

A diferença desta prova é que, em orientação a objetos, funcionar não basta: o desenho precisa estar certo. Uma solução que "daria o resultado" mas expõe o que deveria estar protegido não recebe nota cheia. Três coisas são avaliadas além da lógica:

  • Encapsulamento — os campos ficam privados e o invariante da classe é protegido pelos métodos públicos. Um método que deixa o objeto num estado impossível está errado, mesmo que produza o valor esperado naquele exemplo.
  • RAII e regra do zero — nada de new/delete manual onde vector, string ou unique_ptr resolveriam. Escrever um destrutor desnecessário conta contra, porque ele traz junto a regra dos 3.
  • virtual, override e destrutor virtual usados corretamente nas questões de polimorfismo. Esquecer o destrutor virtual numa classe base é o erro que mais custa pontos nesta prova, justamente porque o programa parece funcionar.

Se faltar tempo, explique em português o que o trecho faltante deveria fazer — uma explicação correta do raciocínio vale pontos.

Como se preparar

  1. Refaça as listas 08 a 12 sem consultar sua solução anterior.
  2. Resolva o simulado completo, à mão e cronometrado em 90 minutos. Escrever classe no papel é lento; descubra isso no simulado, não na prova.
  3. Monte sua folha de consulta enquanto refaz as listas, colecionando os esqueletos de sintaxe que você percebeu que esquece.
  4. Releia as seções "Erros comuns" dos capítulos 8 a 13 — a maioria dos pontos perdidos nesta prova historicamente vem de esquecer override/destrutor virtual, ou copiar um objeto que gerencia recurso sem RAII.