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/deletemanual ondevector,stringouunique_ptrresolveriam. Escrever um destrutor desnecessário conta contra, porque ele traz junto a regra dos 3. virtual,overridee 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¶
- Refaça as listas 08 a 12 sem consultar sua solução anterior.
- Resolva o simulado completo, à mão e cronometrado em 90 minutos. Escrever classe no papel é lento; descubra isso no simulado, não na prova.
- Monte sua folha de consulta enquanto refaz as listas, colecionando os esqueletos de sintaxe que você percebeu que esquece.
- 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.