0% acharam este documento útil (0 voto)
11 visualizações6 páginas

Livro Cap3.1.1

Enviado por

Fabricia Lima
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
11 visualizações6 páginas

Livro Cap3.1.1

Enviado por

Fabricia Lima
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 6

Imprimir

FOCO NO MERCADO DE TRABALHO


TRATAMENTO DE EXCEÇÕES E USO DE CLASSES ABSTRATAS

0
Jesimar da Silva Arantes

seõçatona reV
MAIOR SOFISTICAÇÃO NA CONSTRUÇÃO DO SIMULADOR DE ROBÔ
Leitura de dados do teclado para movimentação do robô, tratamento de exceção para deixar a
aplicação mais tolerante a falhas e criação de uma classe robô abstrata para modelar a ideia da
entidade robô.

Fonte: Shutterstock.

Deseja ouvir este material?

Áudio disponível no material digital.

SEM MEDO DE ERRAR


A startup em que você faz estágio lhe passou a tarefa de melhorar a modelagem
do simulador de robô que está produzindo. Dessa maneira, o seu chefe, após
revisar o seu código, listou as seguintes tarefas para desenvolver:

0
Fazer a leitura das posições que o robô irá deslocar por meio do teclado.

seõçatona reV
Criar um tratamento de exceção em pontos possivelmente críticos.

Criar uma classe robô abstrata que irá modelar a ideia da entidade robô.

Transformar a classe CaixaIdeia em uma classe abstrata.


Após olhar com calma todas as sugestões de seu chefe, você, então, partiu do
Código 2.14 que tinha e percebeu que a primeira coisa que devia fazer era alterar a
classe App. Nessa classe, você criou um objeto da classe Scanner, que receberá os
comandos por meio do teclado, sendo estas as possíveis teclas a serem

0
pressionadas: 'w', ‘a', ‘s’ e ‘d’. (Caso a tecla zero (0) seja pressionada, então, será

seõçatona reV
encerrada a aplicação, mas caso alguma outra tecla seja pressionada, uma exceção
será lançada e uma nova tecla será requisitada.) Em seguida, você criou a classe
RoboIdeia, na qual constam os seguintes atributos: posicaoX, posicaoY, orientacao,
nome e peso, bem como a definição de que todo robô deve sobrescrever os
métodos move, moveX e moveY. Após isso, a classe Robo foi criada como uma
subclasse de RoboIdeia. Entre as linhas 35 e 80, foram destacados alguns aspectos
modificados do código anterior. Nessa versão do código, você colocou os métodos
move, moveX e moveY para lançarem exceções do tipo IllegalArgumentException
caso o argumento seja NaN (Not a Number) ou infinito. O método setOrientacao,
por sua vez, também lança uma exceção caso não seja pressionada nenhuma das
teclas 'w', ‘a', ‘s’ e ‘d’.

Por fim, você apenas modificou a assinatura da classe CaixaIdeia, conforme


mostrado na linha 81, para transformá-la em uma classe abstrata. Após esses
passos, o seu programa ficou pronto, apresentando todas as alterações do seu
chefe, e parecido com o Código 3.11. Repare que diversas partes foram omitidas,
mas o código completo pode ser acessado no GitHub do autor.

Código 3.11 | Nova modelagem das classes App, RoboIdeia, Robo e CaixaIdeia
1 public class App {
2 public static void main(String[] args) {

3 Robo robo = new Robo();


4 String tecla = "";

0
5 Scanner scan = new Scanner(System.in);

seõçatona reV
6 boolean ok = false;

7 do {
8 try {

9 tecla = scan.next();
10 robo.setOrientacao(tecla.charAt(0));

11 robo.printPos();
12 } catch (IllegalArgumentException ex){

13 if (tecla.charAt(0) == '0') {
14 ok = true;

15 } else {
16 System.out.println("Valor errado");

17 scan.nextLine();
18 ok = false;

19 }
20 }

21 } while(!ok);
22 robo.printPos();

23 }
24 }
25 public abstract class RoboIdeia {

26 protected float posicaoX;

27 protected float posicaoY;

28 protected int orientacao;


29 protected String nome;

30 protected float peso;

31 public abstract void move(float posX, float posY);

32 public abstract void moveX(float dist);


33 public abstract void moveY(float dist);

34 }
35 public class Robo extends RoboIdeia {

36 ...

37 @Override

38 public void move(float posX, float posY) {

0
39 if (Float.isNaN(posX) || Float.isNaN(posY) ||

40 Float.isInfinite(posX) || Float.isInfinite(posY)) {

seõçatona reV
41 throw new IllegalArgumentException("Args não válidos");
42 }

43 super.posicaoX = posX;

44 super.posicaoY = posY;

45 }
46

47 @Override

48 public void moveX(float dist) {

49 if (Float.isNaN(dist) || Float.isInfinite(dist)) {
50 throw new IllegalArgumentException("Arg não válido");

51 }

52 super.posicaoX += dist;

53 }
54

55 @Override

56 public void moveY(float dist) {

57 if (Float.isNaN(dist) || Float.isInfinite(dist)) {
58 throw new IllegalArgumentException("Arg não válido");

59 }

60 super.posicaoY += dist;

61 }
62

63 public void setOrientacao(char tecla) {

64 if (tecla == 'w') {

65 super.orientacao = FRENTE;
66 moveY(5);

67 } else if (tecla == 's') {

68 super.orientacao = ATRAS;

69 moveY(-5);
70 } else if (tecla == 'a') {

71 super.orientacao = ESQUERDA;

72 moveX(-5);

73 } else if (tecla == 'd') {

0
74 super.orientacao = DIREITA;

75 moveX(5);

seõçatona reV
76 } else {

77 throw new IllegalArgumentException("Arg não válido");


78 }

79 }

80 }

81 public abstract class CaixaIdeia {


82 ...

83 }

Fonte: elaborado pelo autor.

Você também pode gostar

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy