Home > Exercícios > Resolução exercício 4


Aqui a implementação dos métodos solicitados. Mais abaixo está a classe Ponto completa com todos os métodos.

O enunciado pede duas sobrecargas do método distance. A primeira implementação do método já faz os cálculos necessários, não há motivo para não aproveitar o código já implementado antes. Então as novas sobrecargas do método chamam a versão anterior para evitar duplicação de código.

public double distance(Ponto pt) {
  return distance(pt.x, pt.y);
}
 
public double distance() {
  return distance(0, 0);
}
 

A seguir é pedida a implementação do método toString() para a classe Ponto. Aqui cabem algumas observações. Este método é implementado pela classe Object, que é ancestral de toda e qualquer classe no Java. Portanto a implementação será na verdade uma sobreposição do método, por isso foi acrescentada a diretiva @Override. A função de toString() é fornecer uma representação do objeto na forma de string para permitir a sua serialização, ou seja, permitir que ele seja transformado em uma fila (série) de bytes (ou caracteres) a fim de ser armazenado ou transmitido e reconstruído depois mantendo seu estado interno atual. Esse recurso permite a construção de objetos persitentes.
@Override
public String toString()
  return "(" + x + "," + y + ")";
}

Para finalizar é pedida a implementação do método equals:

public boolean equals(Ponto pt) {
  return (x==pt.x) && (y==pt.y);
}


Abaixo o código completo para a classe Ponto:
public class Ponto {
   protected double x, y;  // coordenadas do ponto
 
   // Construtor padrão (não tem parâmetros).
   // Inicializa o ponto na origem do plano.
   //
   public Ponto(){
      x = 0;
      y = 0;
   }
 
   // Construtor parametrizado.
   // Inicializa o ponto com as coordenadas fornecidas nos parâmetros.
   //
   public Ponto(double vX, double vY){
      x = vX;
      y = vY;
   }
 
   // Copy constructor (Construtor clone ou de cópia).
   // Inicializa o ponto com as coordenadas de outro ponto já existente.
   //
   public Ponto(Ponto pt){
      x = pt.x;
      y = pt.y;
   }
 
   // Retorna uma string com as coordenadas do ponto no formato "(x,y)"
   @Override
   public String toString(){
      return "(" + x + "," + y + ")";
   }
 
   //
   public boolean equals(Ponto pt) {
      return (x==pt.x) && (y==pt.y);
   }
 
   /////////////////////////////////////////////////////////////////
   /// Getters e Setters
 
   // Retorna o valor de x
   public double getX(){
      return x;
   }
 
   // Retorna o valor de y
   public double getY(){
      return y;
   }
 
   // Modifica o valor de x
   public void setX(double newX){
      x = newX;
   }
 
   // Modifica o valor de y
   public void setY(double newY){
      y = newY;
   }
 
   // Modifica o valor de x e y
   public void setXY(double newX, double newY){
      x = newX;
      y = newY;
   }
 
   // Copia os atributos de pt
   public void assign(Ponto pt){
      x = pt.x;
      y = pt.y;
   }
 
   ///////////////////////////////////////////////////////////
   /// Cálculos
 
   // Retorna o delta x em relação a vX
   public double deltaX(double vX){
      return vX - x;
   }
 
   // Retorna o delta y em relação a vY
   public double deltaY(double vY){
      return vY - y;
   }
 
   // Retorna a distancia do ponto até as coordenadas informadas
   public double distance(double posX, double posY){
      double dx = deltaX(posX);
      double dy = deltaY(posY);
      return Math.sqrt(dx*dx + dy*dy);
   }
 
   // Sobrecarga. Retorna a distancia até o ponto informado.
   public double distance(Ponto pt) {
      return distance(pt.x, pt.y);
   }
 
   // Sobrecarga. Retorna a distancia até a origem.
   public double distance() {
      return distance(0, 0);
   }
 
   ///////////////////////////////////////////////////////////
   /// Transformações
 
   // Multiplica X e Y por um fator de escalonamento.
   public void escale(double factor){
      x *= factor;
      y *= factor;
   }
 
   // Desloca o ponto.
   public void desloc(double dX, double dY){
      x += dX;
      y += dY;
   }
 
} // classe Ponto