codigo reformulado com Observer