1. Um programa editor gráfico usa a seguinte interface 
para representar formas geométricas, que dá as ações 
que o usuário pode fazer para manipular as formas no editor:

      interface Forma {
        // Mover a forma, dado o deslocamento
        void mover(int dx, int dy);
        // Redimensiona a forma por um fator de escala
        void redimensionar(float escala);
        // Rotaciona a forma em tantos graus
        void rotacionar(int graus);
      }

Um dos requisitos do editor é oferecer undo (desfazer) 
e redo (refazer) de vários níveis para o usuário, onde ele
 pode desfazer as últimas ações tomadas, ou refazer ações desfeitas. Um jeito de fazer isso é representar as ações do usuário como objetos que implementam a seguinte interface:

      interface Acao {
        void fazer();
        void desfazer();    
      }

1.1. Defina classes para cada uma das três ações que o
 usuário pode fazer com uma forma: mover, redimensionar,
 rotacionar.

1.2. Complete o fragmento classe Editor abaixo (implementando os métodos marcados com TODO), que implementa parte do recurso desfazer/refazer do editor gráfico:

      import java.util.Stack;

      class Editor {
        // Ações feitas
        Stack<Acao> feitas = new Stack<Acao>();
        // Ações desfeitas
        Stack<Acao> desfeitas = new Stack<Acao>();;

        void fazer(Acao a) {
          // TODO: faz uma ação nova
        }

        void desfazer() {
          // TODO: desfaz última ação,
          // caso possível
        }

        void refazer() {
          // TODO: refaz última ação,
          // caso possível
        }
      }

Toda vez que o usuário faz uma ação ela deve entrar na
 pilha de ações feitas. Para desfazer uma ação remove-se
 a ação que está no topo dessa pilha depois move-se ela 
 para a pilha de ações desfeitas. Para refazer uma ação 
 remove-se a ação que está no topo de pilha de ações
 desfeitas e move-se ela para a pilha de ações feitas.
 Não se esqueça de chamar os métodos fazer() e desfazer()
 das ações!
 