Comentários
Criação de modificadores de acessos adequados aos atributos e métodos, e de métodos getters e setters para encapsular os atributos, utilização de herança na aplicação, além de sobrescrever os métodos toString e equal.
Fonte: Shutterstock
Deseja ouvir este material?
Áudio disponível no material digital.
A empresa em que você trabalha lhe passou, novamente, mais algumas tarefas para desenvolver. As tarefas listadas abaixo foram especificadas para você:
De forma a iniciar o trabalho, você decidiu revisar o Código 2.9 para adicionar os recursos mencionados. Inicialmente, você criou dois pacotes: simulator.code (aqui, ficarão as classes Robo, Caixa e Mundo2D) e simulador.main (em que ficará a classe App). Após isso, criou os devidos modificadores de acesso para os atributos, bem como os métodos getters e setters para os atributos, de forma a garantir um melhor encapsulamento, e uma classe chamada CaixaIdeia, que será uma superclasse de Caixa.
Por fim, então, você decidiu sobrescrever os métodos toString (na classe Caixa e Robo) e equals (na classe Robo), finalizando o seu programa com todas as alterações sugeridas pelo seu chefe.
O seu programa ficou parecido com o Código 2.18. Repare que algumas poucas partes foram omitidas. O código completo pode ser acessado no GitHub do autor.
public class Robo {
private float posicaoX;
private float posicaoY;
private int orientacao;
private final String nome;
private final float peso;
private final float velocidadeMax = 5;
private final float pesoCargaMax = 20;
private final String tipoTracao = "esteira";
public static final int FRENTE = 0;
public static final int ATRAS = 1;
public static final int ESQUERDA = 2;
public static final int DIREITA = 3;
...
public float getPosicaoX() {
return posicaoX;
}
public float getPosicaoY() {
return posicaoY;
}
public int getOrientacao() {
return orientacao;
}
@Override
public String toString() {
return "Robo{" + "posicaoX=" + posicaoX + ", posicaoY="
+ posicaoY + ", orientacao=" + orientacao + '}';
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Robo){
Robo robo = (Robo)obj;
return this.nome.equals(robo.nome);
} else {
return false;
}
}
}
public class CaixaIdeia {
protected int posX;
protected int posY;
protected float peso;
protected final float comprimento;
protected final float largura;
protected final float altura;
public CaixaIdeia(int posX, int posY, float peso,
float comprimento, float largura, float altura) {
this.posX = posX;
this.posY = posY;
this.peso = peso;
this.comprimento = comprimento;
this.largura = largura;
this.altura = altura;
}
... //métodos gets e sets ocultos para posX, posY e peso.
}
public class Caixa extends CaixaIdeia {
public String nomeItem;
public int qtdItem;
public Caixa(String nomeItem, int qtdItem, int posX,
int posY, float peso, float comprimento,
float largura, float altura) {
super(posX, posY, peso, comprimento, largura, altura);
this.nomeItem = nomeItem;
this.qtdItem = qtdItem;
}
@Override
public String toString() {
return "Caixa{" + "nomeItem=" + nomeItem +
", qtdItem=" + qtdItem + '}';
}
}
public class Mundo2D {
public final int DIM_X;
public final int DIM_Y;
...
}
Após todas essas modificações, você continuou a utilizar o GitHub, conforme sugerido. Inicialmente, você estava utilizando o repositório de código via linha comando, porém, seguindo a sugestão de utilizar alguma ferramenta para facilitar o processo de versionamento, entrou no site do git e viu alguns dos principais clientes GUI (clientes com interface gráfica) para acessar o GitHub, que são: Sourcetree, disponível para Windows e MacOS; TortoiseGit, disponível apenas para Windows; GitKraken, sistema multiplataforma; e GitAhead, que também é um sistema multiplataforma. Caso tenha interesse, escolha e instale uma dessas ferramentas. Como dica, há diversos vídeos tutoriais na internet ensinando-nos como utilizar essas ferramentas.