Olá pessoal,
Interessante no exemplo o professor Maurício ter criado três métodos na classe base, a saber aprovado(), reprovado() e finalizado().
Estranho, porém, em minha opinião, é o fato de que nem sempre certas transições em nossa máquina de estado existem. Dai apenas lançar uma exceção ficou como a solução dele. Porém, me parece, pelo pouco que sei, um pequeno mau cheiro de código visto que é implementar algo desnecessário, ainda que pra apenas lançar uma exceção, fugindo portanto da responsabilidade da classe.
Soa coerente?