Home > POO > Exercícios > Resolução exercício 5

Classe Segmento, representa um segmento de reta no plano cartesiano através de dois pontos.
Exemplifica o uso de objetos como atributos de outros objetos. Um objeto da classe Segmento utiliza dois objetos da classe ponto como atributos.

Os métodos implementados na classe Ponto são aproveitados por esta classe para evitar duplicação de código. Sempre que possível a classe usa os cálculos feitos pela classe Ponto.

Declaração da classe e dos atributos:
public class Segmento {
   protected Ponto p1, p2;   // Pontos que limitam o segmento

Note que os atributos ficam protegidos, isso impede que sejam diretamente acessados de fora da classe. A seguir o enunciado pede que sejam feitos 3 construtores: padrão, parametrizado e de cópia.
   /** Construtor padrão: cria um segmento limitado
    *  pelos pontos (0,0) e (0,1).
    */
   public Segmento(){
      p1 = new Ponto();
      p2 = new Ponto(0,1);
   }
 
   /** Construtor parametrizado
    */
   public Segmento(double x1, double y1, double x2, double y2){
      p1 = new Ponto(x1, y1);
      p2 = new Ponto(x2, y2);
   }
 
   /** Copy constructor
    */
   public Segmento(Segmento sg){
      p1 = new Ponto(sg.p1); // usa o copy constructor do Ponto
      p2 = new Ponto(sg.p2);
   }
 

Os dois primeiros métodos são transformações aplicadas ao segmento: deslocamento e escalonamento. Como estas transformações já estão implementadas na classe Ponto, vamos aproveitar o código já escrito.
   ////////////////////////////////////////////////////////////
   ///
   ///  Transformações
 
   /** Escalonamento do segmento.
    */
   public void escale(double Fator){
      p1.escale(Fator);
      p2.escale(Fator);
   }
 
   /** Desloca o segmento.
    */
   public void desloc(double dX, double dY){
      p1.desloc(dX, dY);
      p2.desloc(dX, dY);
   }
 

Os dois métodos seguintes, toString e equals, também podem aproveitar o código já implementado pela classe Ponto.

   /** Retorna uma representação do segmento em string
    */
   public String toString( ){
      return "[" + p1.toString() + "," + p2.toString() + "]";
   }
 
   /** Retorna true se o segmento é exatamente igual ao segmento informado.
    */
   public boolean equals(Segmento sg){
      return (p1.equals(sg.p1)&&p2.equals(sg.p2))||
             (p1.equals(sg.p2)&&p2.equals(sg.p1));
   }

Continua...