Duvida sobre POO - coisa simples

7 respostas
d34d_d3v1l

Boa noite.

Estou estudando Java (matéria de A&E I) na Faculdade e POO por conta própria. Sei que muitos não recomendam isto: dar um passo maior que a perna, ou estudar por conta própria. O que acontece é que sempre fui autodidata e não consigo acompanhar a velocidade do meu curso. Bom, chega de introduções… aduhasd… Comecei a estudar POO a pouco tempo e ao começar a fazer meus primeiros programas, surgiu uma dúvida, que se baseia neste pequeno e pobre código:
(Obs: por estar acostumado com o Jeliot, acabei usando-o para testar. Portanto não estranhem o código, por favor)

import jeliot.io.*;

class Armario{
   private String produto;
   private double preco;
   private int quantidade;

   public void setProduto(String prod){
      produto = prod;
   }

   public void setPreco(double pre){
     preco = pre;
   }

   public void setQuantidade(int qnt){
      quantidade = qnt;
   }


   public String getProduto(){
      return produto;
   }

   public double getPreco(){
      return preco;
   }

   public int getQuantidade(){
     return quantidade;
   }
}

class Bar{
   public static void main(){
   String produto;
   double preco;
   int quantidade;
   int ok;

   Armario a1 = new Armario();
   Armario a2 = new Armario();


   Output.println("Digite o produto o preço e em seguida a quantidade");  //Output.println coisa do Jeliot...
   produto = Input.readString();                                                           //Input.readString() coisa do Jeliot também...
   preco = Input.readDouble();
   quantidade = Input.readInt();

   a1.setProduto(produto);
   a1.setPreco(preco);
   a1.setQuantidade(quantidade);

   Output.println("Digite o produto o preço e em seguida a quantidade");
   produto = Input.readString();
   preco = Input.readDouble();
   quantidade = Input.readInt();

   a2.setProduto(produto);
   a2.setPreco(preco);
   a2.setQuantidade(quantidade);

   Output.println("O primeiro objeto armazena as seguintes informações:\nProduto: " + a1.getProduto() +" Preço: " + a1.getPreco() + " Quantidade: " + a1.getQuantidade());
   Output.println("O segundo objeto armazena:\nProduto: " + a2.getProduto() +" Preço: " + a2.getPreco() + " Quantidade: " + a2.getQuantidade());  

   }
}

Seria possível realizar uma tarefa mais ou menos assim: Perguntar a quantidade de Produtos que o usuário gostaria de “cadastrar” e baseado na sua resposta, criar o número de objetos correspondentes ?

Não sei se entendi bem o conceito de construtor, mas creio que seja um método para iniciar a classe com valores. Se o meu conceito estiver correto, seria possível criar algo mais ou menos assim:
(O objetivo disto, é para que a cada novo objeto a própria classe ‘setar’ seus argumentos, assim poderia desconsiderar setProduto, setPreco e setQuantidade no exemplo do código anterior)

class Armario{
   private String produto;
   private double preco;
   private int quantidade;

public Armario(){
   produto = Input.nextString();
   preco = Input.nextDouble();
   quantidade = Input.nextInt();

}

// ...

Case não seja possível realizar dessa maneira, existe alguma outra alternativa para se dispensar os “sets”?

Obrigado desde já, e peço desculpas por qualquer erro grotesco que eu possa ter cometido.
Um abraço,
d34d

7 Respostas

D

Vc Quer só um construtor? se for isso é bem simples

public Armario ( String produto, int quantidade, double preco){

this.produto=produto; 
this.preco=preco;
this.quntidade=quantidade;

}

No vc teria uma casse armario com seus valores instanciados.
Mas os getter e setters são inportantes, por exemplo, se quizer cadastrar um produto e alterar o preço ou quantidade teria uma contrutor vazio
e os getters e setters.

Espero ter ajudado.

gpd38

Diego C. Santos:
Vc Quer só um construtor? se for isso é bem simples

public Armario ( String produto, int quantidade, double preco){

this.produto=produto; 
this.preco=preco;
this.quntidade=quantidade;

}

No vc teria uma casse armario com seus valores instanciados.
Mas os getter e setters são inportantes, por exemplo, se quizer cadastrar um produto e alterar o preço ou quantidade teria uma contrutor vazio
e os getters e setters.

Espero ter ajudado.

Não somente isso mas pelo fato tbm das variaveis dele serem private. Isso garante uma proteção contra alteraçoes indesejaveis de outras classes.

d34d_d3v1l

Obrigado pela resposta.

Respondida uma pergunta. E quanto a outra? Seria possível realizar uma tarefa mais ou menos assim: Perguntar a quantidade de Produtos que o usuário gostaria de “cadastrar” e baseado na sua resposta, criar o número de objetos correspondentes ?

Abraços,
d34d

L

d34d_d3v1l:
Obrigado pela resposta.

Respondida uma pergunta. E quanto a outra? Seria possível realizar uma tarefa mais ou menos assim: Perguntar a quantidade de Produtos que o usuário gostaria de “cadastrar” e baseado na sua resposta, criar o número de objetos correspondentes ?

Outra coisa, o que seria o “this.” ?

Abraços,
d34d

É possível sim, você usaria um Array e um laço for pra preencher. Estou com preguiça pra pensar nos detalhes, mas é mais ou menos assim:

  • pergunta a quantidade de produtos
  • inicializa um array de produtos (Produto[] produtos = new Produto[quantidade]:wink:
  • incrementando um contador, preenche um produto
for (int i = 0; i < produtos.length; i++) {
    // cria um produto
}

O this. é uma referência ao próprio objeto.

Sad7

1- Sim eh possivel: faca um input e pergutne ao usuario qtos produtos ele deseja e armazene em uma variavel;
faca um for com essa quantia e dentro dele instancie um novo Produto, faca os inputs q vc esta fazendo e printe (tudo dentro do for)

2- O this eh utilizado quando vc tem uma variavel e um parametro com o mesmo nome, ex:

public class Teste {
   private int quantidade;

   public Teste(int quantidade) {
     this.quantidade = quantidade;
   }
}

resumindo, o this ira dizer que aquela “quantidade” é a primeira que ele encontrar declarada, ou seja, a sua variavel global, ou metodo.
deu pra sacar?

[]s

Sad7

Leonardo3001:
d34d_d3v1l:
Obrigado pela resposta.

Respondida uma pergunta. E quanto a outra? Seria possível realizar uma tarefa mais ou menos assim: Perguntar a quantidade de Produtos que o usuário gostaria de “cadastrar” e baseado na sua resposta, criar o número de objetos correspondentes ?

Outra coisa, o que seria o “this.” ?

Abraços,
d34d

É possível sim, você usaria um Array e um laço for pra preencher. Estou com preguiça pra pensar nos detalhes, mas é mais ou menos assim:

  • pergunta a quantidade de produtos
  • inicializa um array de produtos (Produto[] produtos = new Produto[quantidade]:wink:
  • incrementando um contador, preenche um produto
for (int i = 0; i < produtos.length; i++) {
    // cria um produto
}

O this. é uma referência ao próprio objeto.

hehe, malz sobrepor vc ae cara,
quando eu comecei ainda nao tinha respostas.

d34d_d3v1l

Obrigado pelas respostas…

Gente, acho que vocês não entenderam… Usando um array eu consigo fazer:

String produtos[];
int i,j;

Output.println("Quantos produtos quer cadastrar?");

j = Input.readInt();
produtos = new String[j];

for(i=0;i<j;i++){  //i<produtos.length da na mesma ...
   produtos[i] = Input.readString();
}

O que eu queria fazer era 1 objeto por produto. E não 1 objeto por array de produtos… Entenderam ?
Queria a mesma coisa só que com os objetos… Acho que não estou me expressando direito =/

Abraços,
d34d

Criado 16 de junho de 2010
Ultima resposta 16 de jun. de 2010
Respostas 7
Participantes 5