codigo limpiado, documentado y separado en clases