Encapsulamento, classes e métodos

Boa Noite pessoal, eu to começando na linguagem Java, mas estou tendo umas dificuldades em questão de classes, ojetos, encapsulamento e essas coisas básicas.

Eu tenho 17 exercícios pra fazer, os algoritimos eu consigo fazer tranquilamente mas o professor me pediu para refazer utilizando classes, métodos, encapsulamento e interface gráfica, mas ta bem complicado e gostaria que alguém fizesse esse único exercício dentro desse “padrão” para eu tentar entender e fazer os outros. Quem puder me ajudar eu agradeço muito mesmo.

Abraço a todos.

Ex. Construa um algoritimo que tendo como dados de entrada leia dois pontos quaisquer em um plano. P1(x1, x2) e P2(y1, y2) e mostre a distância entre eles. A fórmula que efetua tal cálculo é: V(x2-x1)²+(y2-y1)². (O V na fórmula é raiz.)

Bom eu até fiz esse exercício mas na forma mais simples possível, e ele quer que eu trate erros, encapsule crie classe e métodos. Mas eu não estou conseguindo pensar nem entender como fazer dessa forma. Se alguém puder me dar umas dicas, agradeça mais uma vez de verdade.

Bem, poste o código do que você já fez, assim a gente fica sabendo o que você já entendeu ou não.

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { double x1 = 0, x2 = 0, y1 = 0, y2 = 0, x = 0, y = 0, d = 0; x1 = Float.parseFloat(jTextField1.getText()); x2 = Float.parseFloat(jTextField2.getText()); y1 = Float.parseFloat(jTextField3.getText()); y2 = Float.parseFloat(jTextField4.getText()); x = x2 - x1; y = y2 - y1; x = Math.pow(x,2); y = Math.pow(y,2); d = x + y; d = Math.sqrt(d); jLabel5.setText("A distância entre os pontos vale " + d);

Então isso o que eu fiz no ação d eum botão. Mas nada de encapsulado, nem classe e etc.

Bem, a minha dica é que você crie uma classe ponto, que armazene as coordenadas é que tenha um método que calcula a distancia. Uma interface para essa classe pode ser:

interface Ponto{
  double x();
  double y();
  double distancia(Ponto p);
}

Bem a minha dica pra você é que não peça para fazermos exercicios para você! :twisted: :twisted: :twisted: , agora ajudaremos se você fizer algo, demonstrar que tentou aprender.

mas sempre tem gente que responde de qquer forma… enfim.

até

magocebolinha Obrigado, eu na verdade queria só um exercício demonstrado Encapsulamento, classe e método, porque eu sinceramento só sei fazer da forma que mostrei acima sem nenhuma estrutura decente, mas com o que o rmendes08 falou, me fez pensar mais ou menos e estou dando uma pesquisada em cima disso. :slight_smile:

Olá,

Você pode partir dessa implementação:

[code]public class Exercicio {

private Ponto p1;
private Ponto p2;

public static void main( String[] args ) {
new Exercicio();
}

public Exercicio(){
p1 = getPonto();
p2 = getPonto();

  // aqui eu chamei a action na mao... mas quando estiver na sua interface grafica..
  // deverá ser removida, pois o evento será tratado pelo swing
  new ActionCalcula().actionPerformed( new ActionEvent( this, ActionEvent.ACTION_PERFORMED, "" ) );

}

private Ponto getPonto(){
double x = recebeEntrada();
double y = recebeEntrada();

  return new Ponto( x, y );

}

private double recebeEntrada(){
Scanner scanner = new Scanner( System.in );

  try {
     System.out.print( "Informe uma coordenada para o referido ponto: " );
     double coordenada = scanner.nextDouble();
     return coordenada;
  }
  // trata a possibilidade do usuario digitar algo que não seja um número valido...
  // vc pode verificar no javadoc que o método Scanner.nextDouble() lança esta execeção
  catch ( InputMismatchException  e ) { 
     System.out.println();
     System.out.println( "A entrada nãos e refere a um número válido. Tente novamente." );
     return recebeEntrada();
  }

}

class ActionCalcula implements ActionListener{

  @Override
  public void actionPerformed( ActionEvent e ) {
     if ( p1 == null || p2 == null ){
        throw new IllegalStateException( "Os pontos ainda não foram informados. Não é possível realizar o cálculo" );
     }
     
     // aqui foi feito o mesmo que vc já havia feito... exceto pelo fato de usar os
     // métodos do objeto Ponto para obter os valores...
     // eu preferi escrever numa linha so por comodidade... :P
     double distancia = Math.sqrt( Math.pow( p2.getX() - p1.getX(), 2 ) + Math.pow( p2.getY() - p1.getY(), 2 ) );
     
     //aqui vc decide o que vai fazer com o valor obtido... eu so vou escrever no console
     System.out.println( distancia );
  }

}
}

class Ponto{
private double x;
private double y;

Ponto( double x, double y ){
this.x = x;
this.y = y;
}

// o encapsulamento se refere a vc criar atributos de classe privados e fornecer
// interfaces (nesse caso, os métodos get e set) para que possam ser acessados externamente
public double getX() {
return x;
}

public void setX( double x ) {
this.x = x;
}

public double getY() {
return y;
}

public void setY( double y ) {
this.y = y;
}
}[/code]

Só não criei uma interface, como foi sugerido, por comodidade… não achei necessário, mas você vai decidir o que será mais adequado ao seu ambiente.
Eu usei o console ao invés de uma interface gráfica como sugerido no seu exercício. Assim, se você tiver um pouquinho de vontade e fizer as devidas alterações conseguirá adaptá-lo com facilidade dentro de um ambiente gráfico.
Procurei utilizar os conceitos cobrados no exercício, é provável que eu tenha exagerado. Mas assim você deve conseguir visualizar o uso de classes, métodos e tratamento de exceções. Esta implementação não é definitiva, existem vários pontos que podem ser modificados… mas eu escrevi aqui meio que na correria (quando comecei estava sem fazer nada… agora estou atolado :S ).

Espero ter ajudado,

[]s

Ahh eberson_oliveira muito obrigado mesmo, me ajudou muito vo dar uma estudada nesse código e entender o que cada parte dele faz e fazer meus outros 16 exercícios hahaha eu nunca iria conseguir fazer isso hehehehe vocês me ajudaram bastante. Quando eu terminar os exercícios eu posto aqui pra vocês verem se eu fiz certinho. :slight_smile:
Obrigado mesmo, de verdade.

Abraço a todos.

eberson_oliveira

Assim cara, acho legal você querer ajudar também, mas nesses caso em que o pessoal ajuda com exercício de faculdade nós evitamos pasar código pronto, no máximo algum stub, só pra ilustrar a idéia. Senão ao invés do cara tentar resolver ele simplesmente copia e cola o que você fez e entrega.

[quote=rmendes08]eberson_oliveira

Assim cara, acho legal você querer ajudar também, mas nesses caso em que o pessoal ajuda com exercício de faculdade nós evitamos pasar código pronto, no máximo algum stub, só pra ilustrar a idéia. Senão ao invés do cara tentar resolver ele simplesmente copia e cola o que você fez e entrega.[/quote]

Concordo contigo. Eu nem costumo responder a este tipo de tópico por causa disso. No entanto, se o cara simplesmente copiar e colar não vai atingir o objetivo do exercício. Por isso eu não coloquei interface gráfica.
A solução do exercício ele já tinha alcançado (me refiro ao cálculo) só faltava aplicar os conceitos pedidos no exercício. Então resolvi o exercício dele usando o console. Para entregar ele vai ter que entender o que eu fiz e fazer o mesmo num ambiente gráfico.
Concorda que várias alterações deverão ser feitas para adaptá-la a uma interface gráfica? Serão alterações simples, mas se ele souber alterar vai estar provado (na minha opinião) que conseguiria fazer, gastando mais ou menos tempo para isso.

[]s