Comentários

0%

FOCO NO MERCADO DE TRABALHO

DEFINIÇÃO E USO DE INTERFACES

Jesimar da Silva Arantes

Implementação de novos recurSos no simulador de robô

Documentação do código utilizando javadoc, declaração de constantes utilizando enumeração, descrição de utilização do código executado pelo terminal e execução de uma lista de comandos automaticamente com a utilização de for each e varargs.

Fonte: Shutterstock.

Deseja ouvir este material?

Áudio disponível no material digital.

Sem medo de errar

A startup em que você trabalha lhe passou diversas tarefas:

Como forma de iniciar o trabalho, você decidiu revisar o Código 3.11 para adicionar os recursos que lhe foram designados. Observando o seu código, você percebeu que um tipo Enum podia ser criado para agrupar as constantes FRENTE, ATRAS, ESQUERDA e DIREITA, e notou que, após isso, seu código ficou melhor estruturado. No Código 3.22, mostrado abaixo, nas linhas 1 a 3, temos a definição dessa enumeração, e nas linhas 6 a 22, temos o código que foi adaptado para receber a nova estrutura de dados.

Em seguida, você decidiu imprimir algumas informações que dão uma descrição da aplicação caso especificado durante a execução por meio do terminal. Dessa maneira, você criou as opções: --author, --version, --help, --commands e –move, que podem ser vistas nas linhas 38 a 56 do Código 3.22. 

Após isso, você decidiu trabalhar na opção –move, que modela as movimentações agendadas, usando uma lista de comandos passados pelo terminal. O método que manipula os movimentos agendados pode ser visto nas linhas 23 a 30. Repare que esse método utilizou a ideia de argumentos variados (varargs) e o comando for each, conforme sugerido.

O Código 3.22 destacou apenas as principais alterações feitas. O código completo pode ser acessado no GitHub do autor. Lá, você encontrará a documentação do código utilizando javadoc

Caro aluno, faça as devidas implementações e execute o código para que possa entender melhor o seu funcionamento.

Código 3.22 | Modelagem das classes Orientacao, Robo e App
public enum Orientacao {
    FRENTE, ATRAS, ESQUERDA, DIREITA;
}

public class Robo extends RoboIdeia {   
    public void setOrientacao(char tecla) {
        if (tecla == 'w') {
            super.orientacao = Orientacao.FRENTE;
            moveY(5);
        } else if (tecla == 's') {
            super.orientacao = Orientacao.ATRAS;
            moveY(-5);
        } else if (tecla == 'a') {
            super.orientacao = Orientacao.ESQUERDA;
            moveX(-5);
        } else if (tecla == 'd') {
            super.orientacao = Orientacao.DIREITA;
            moveX(5);
        } else {
            throw new IllegalArgumentException("Arg não válido");
        }
    }
    public void movimentosAgendados(String... moves){
        for (String tecla : moves){
            if (!tecla.equals("--move")) {
                setOrientacao(tecla.charAt(0));
                printPos();
            }
        }
    }
    //foi omitido o código do restante da classe Robo.
}

public class App {
    public static void main(String[] args) {
        if (args.length != 0){
            args[0] = args[0].toLowerCase();
            if (args[0].equals("--author")) {
                System.out.println("Autor: Jesimar S. Arantes");
            } else if (args[0].equals("--version")) {
                System.out.println("Versão: 1.0.0");
            } else if (args[0].equals("--help")) {
                System.out.println("Exec. Movimentos Agendados:");
                System.out.println("\t--move w a w w s d d a");
            } else if (args[0].equals("--commands")) {
                System.out.println("Comandos suportados:");
                System.out.println("\tw: move para cima");
                System.out.println("\ta: move para esquerda");
                System.out.println("\ts: move para baixo");
                System.out.println("\td: move para direita");
                System.out.println("\t0: sair da aplicação");
            } else if (args[0].equals("--move")) {
                Robo robo = new Robo();
                System.out.println("Movimentos agendados: ");
                robo.movimentosAgendados(args);
            } else {
                System.out.println("Argumento não válido");
            }
            System.exit(0);
        }
        //foi omitido o código do restante da aplicação.
    }
} 
Fonte: elaborado pelo autor.
Bons estudos!

AVALIE ESTE MATERIAL

OBRIGADO PELO SEU FEEDBACK!