Tipo abstrato como parâmetro

5 respostas
D
Olá! Eu tenho quatro classes: Torre, CPU, Periféricos e Computador. A classe Computador faz a seguinte chamada de método
montaComputador(Monitor m, Torre t, Periferico mse, Periferico tecl)
. Como funciona a chamada desse método? Como devo proceder para utilizá-la no main?
class Computador 
{
  Monitor monitor;
  Torre torre;
  Periferico mouse;
  Periferico teclado;
  double desc = 0;
  
  void montaComputador(Monitor m, Torre t, Periferico mse, Periferico tecl)
  {
    monitor = m;
    torre = t;
    mouse = mse;
    teclado = tecl;
  }
  
  double calculaPreco()
  {
    if (desc > 100) 
      desc = 100;
    double precoBruto =  monitor.obtemPreco() + torre.obtemPreco() + mouse.obtemPreco() + teclado.obtemPreco();
    return ((100-desc)/100)*precoBruto ;
  }
  
  void compra(int quantidade)
  {
    desc += quantidade/10; // desc = desc + quantidade/10;
  }
  
}

Obs.: As outras classes possuem apenas métodos set/get (obtem/altera Preco).

5 Respostas

R

Computador c = new Computador(); Monitor m = new Monitor(); Torre t = new Torre(); Periferico p1 = new Periferico(); Periferico p2 = new Periferico(); c.montaComputador(m, t, p1, p2);

D

Obrigado! :slight_smile:

yorgan

Opa,
Tente algo assim:

public class ComputadorMain {
       public static void main(String args[]) {
                Computador comp = new Computador();
                Monitor m = new Monitor();
                Torre t = new Torre();
                Periferico pMouse = new Periferico();
                Periferico pTeclado = new Periferico();
                

                //Aqui você seta os valores nos objetos
                //Ex. comp.setAlgumaCoisa(valor);

                comp.montaComputador(m, t, pMouse, pTeclado);
       }
}

Mas eu faria uma alteração. Como sua classe Periferico é para ser genérica e pode haver uma lista dela para cada computador, você poderia fazer assim:

class Computador 
{
  Monitor monitor;
  Torre torre;
  List<Periferico> perifericos;
  double desc = 0;
  
  void montaComputador(Monitor monitor, Torre torre, List<Periferico> perifericos) {
    this.monitor = monitor ;
    this.torre = torre;
    this.perifericos = perifericos;
  }
  
  double calculaPreco()
  {
    if (desc > 100) 
      desc = 100;
      double precoBruto =  monitor.obtemPreco() + torre.obtemPreco();
      //Pega o preco de todos os perifericos:
      if(perifericos != null) {
            for(int i = 0; i < perifericos.size(); i++) {
                Periferico p = perifericos.get(i);
                precoBruto += p.obtemPreco();
            }
      }
      return ((100-desc)/100)*precoBruto ;
  }
  
  void compra(int quantidade)
  {
    desc += quantidade/10; // desc = desc + quantidade/10;
  }
  
}

E no main você criaria assim:

public class ComputadorMain {
       public static void main(String args[]) {
                Computador comp = new Computador();
                Monitor m = new Monitor();
                Torre t = new Torre();
                List<Periferico> listaPerifericos = new ArrayList<Periferico>();
                
                Periferico mouse = new Periferico();
                Periferico teclado= new Periferico();
                Periferico caixaSom= new Periferico();

                listaPerifericos.add(mouse);
                listaPerifericos.add(teclado);
                listaPerifericos.add(caixaSom);
                

                //Aqui você seta os valores nos objetos
                //Ex. comp.setAlgumaCoisa(valor);

                comp.montaComputador(m, t, listaPerifericos );
       }
}

[]´s

Daniel

R

Uma sugestão para o uso da classe Computador ficar mais prático: por que não colocar estes parâmetros no construtor? Ficaria assim:

public Computador(Monitor m, Torre t, Periferico mse, Periferico tecl) {  
  montaComputador(m, t, mse, tecl);
} 

public Computador() {
  this(null, null, null, null);
}

void montaComputador(Monitor m, Torre t, Periferico mse, Periferico tecl) {  
  monitor = m;  
  torre = t;  
  mouse = mse;  
  teclado = tecl;  
}
tnaires
roger_rf:
por que não colocar estes parâmetros no construtor?
Ou como alternativa usar o padrão Builder:
Periferico mouse = new Periferico();
Periferico teclado = new Periferico();

Computador c = new ComputadorBuilder()
    .setMonitor(new Monitor())
    .setTorre(new Torre())
    .setPerifericos(mouse, teclado) // Varargs
    .build();
Criado 25 de junho de 2009
Ultima resposta 25 de jun. de 2009
Respostas 5
Participantes 4