version funcional, comentada y testeada