Instruções para a prova:
- Prova individual.
- Prova avaliada em 100 pontos.
- É permitida a consulta ao catálogo de refatorações.
- Para cada questão, realize um commit com a mensagem descrita na propria questão.
- A prova deverá ser entregue via pull request com uma mensagem no seguinte formato: Numero de matricula - Nome completo
- Horário da prova: das 16:00 às
18:0019:00 horas do dia 7/10/2019. Provas entregues fora desse horário não serão aceitas.
Questão 1: Responda cada um dos itens abaixo em um arquivo chamado questao1.txt. Ao terminar de responder a questão, crie um commit com a seguinte mensagem: "Questão 1". Valor 20 pontos - 5 pontos cada resposta.
a) Diferencie interfaces públicas de interfaces publicadas e justifique por que interfaces publicadas não devem ser refatoradas.
b) Qual a diferença entre os maus cheiros "Cirurgia com rifle" e "Mudanças divergentes". Responda informando claramente os princípios de projetos que estão sendo violados em cada um dos maus-cheiros.
c) Refatoração sempre leva a projetos mais eficientes em termo de desempenho. A afirmativa é verdadeira ou falsa? Justifique.
d) Como se tem a garantia de que uma refatoração teve sucesso?
O código anexo a esse repositório é de uma aplicação em fase muito inicial de implementação. Trata-se de uma aplicação para controle de notas e frequencias das turmas de um professor. Faça o que se pede em cada uma das questões abaixo.
Questão 2: As classes Aluno, Disciplina, Professor e Turma, em seus métodos construtores, podem disparar exceções sempre que o valor de um atributo obrigatório não foi informado. Toda exceção é disparada com uma mensagem informando qual foi o erro. A mensagem de exceção é formada no próprio construtor do objeto, o que torna-o confuso e difícil de ser entendido. Aplique extrair método nos trechos de código que formam tais mensagens de modo a tornar o construtor menos confuso. Ao terminar de responder a questão, crie um commit com a seguinte mensagem: "Questão 1". Valor 20 pontos - 5 pontos cada.
Questão 3: O método ordenarAlunos, presente na classe CadastroAlunos, possui duas instruções para formação da matrícula de um aluno no format dd/ddddddd onde d é um dígito. Aplique extrair método nessas instruções de modo a criar um método que retorne a matrícula no formato citado anteriormente. Ao terminar de responder a questão, crie um commit com a seguinte mensagem: "Questão 3". Valor 10 pontos.
Questão 4: Com base no resultado da refatoração aplicada na questão 3, aplique a refatoração Substituir método por método objeto no método ordenarAlunos da classe CadastrarAlunos. Ao terminar de responder a questão, crie um commit com a seguinte mensagem: "Questão 4". Valor 50 pontos.