Refatorando o código

* Algumas classes foram refatoradas sem modificar a lógica
* Alguns arquivos de teste foram refatorados e alguns removidos devido a lógica complexa.
* Foram adicionadas Exceptions de acordo com as necessidades do projeto.