Parametrização Dinamica

12 respostas
bruno_savi

olá pessoal me deparei com um sistema no qual… ele teria que receber parametros dinamicos…
gostaria de saber se alguem ja desenvolveu algo assim ou tem alguns articos para ler…

o exemplo que me deram é o seguinte…

o sistema recebe certos parametros vindo de um banco de dados como por exemplo…

Caminhão , tipo, Motor e para cada Parametro deste tem valores

caso Caminhão = 6 eixo Tipo = bau Motor = 2.0 e por ai vai indo mas isto seria dinamico e com essas informações ele me retornaria a melhor carga para o caminhão…

mas esses parametros são dinamicos

ou seja eles podem aumentar ou diminuir dinamicamente

caso pode começar apenas com caminhão e dentro de 2 meses ter caminhão e tipo e motor e por ai vai indo…

alguem ja fez algo semelhante?

12 Respostas

hudson.negao

da uma olhada ve se ajuda você
http://guj.com.br/posts/list/111685.java

espero ter ajudado

bruno_savi

no caso isso ai é estatico teria que ser algo assim dinamico…

onde vc não sabe quais parametros passar para o sistema

quem cuidaria disso seria o banco de dados…

davidtiagoconceicao

Acho complicado fazer isso diretamente do banco de dados.
Sugiro que você faça uma classe que acesse o banco de dados e crie os parâmetros conforme a especificação.
Algumas outras sugestões:
Crie uma superclasse de todos os possíveis parâmetros (Veiculo, por exemplo).
Encapsule das determinadas informações dentro das subclasses desta classe. Por exemplo, se para o caminhão as informações do motor são importantes, adicione esta informação como atributo/métodos da subclasse.
Dentro do determinado método, utilize o instanceof para verificar qual a subclasse que foi passada como parâmetro real.
Para passar uma quantidade indeterminada de parâmetros, utilize var-args.

bruno_savi

só que este é o problema…
ele ficara estatico pq eu não sabemos quais os parametros que iriam entrar essa é a complexidade do sistema

ele recebe os parametros e trata do jeito que tem os valores dos parametros eu sei que teria algo com estatistica no meio…

mas é meio complicadinho mesmo assim heheheh

F

Mas como o sistema saberia como tratar o novo valor? Tipo os calculos sobre motor seriam diferentes do para o eixo. E se pode “surgir” novos parâmetros com regras não previstas, só com mágica para funcionar. :lol:

Acho que teria que ter um universo de possibilidades conhecidas, ai ficava fácil.

bruno_savi

poiseh esta é a piração do sistema…

ele recebe as regras vindas do banco de dados ou de qualquer coisa e faz um calculo estatico e retorna alguma coisa

meio piração por isso do topico.

davidtiagoconceicao

bruno_savi, antes de mais nada, boa sorte com este sistema maluco :lol:

O que eu estava pensando é uma construção deste tipo:

public interface Veiculo {

	// Métodos quaisquer conforme desejado.
	// Ou mesmo nenhum método.

}

public class Caminhao implements Veiculo {
	private String motor;
	private int numeroEixos;

	public Caminhao(String motor, int numeroEixos) {
		this.motor = motor;
		this.numeroEixos = numeroEixos;
	}

	public String getMotor() {
		return motor;
	}

	public void setMotor(String motor) {
		this.motor = motor;
	}

	public int getNumeroEixos() {
		return numeroEixos;
	}

	public void setNumeroEixos(int numeroEixos) {
		this.numeroEixos = numeroEixos;
	}

}

public class Carro implements Veiculo {

	private String motor;
	private int lugares;

	public String getMotor() {
		return motor;
	}

	public void setMotor(String motor) {
		this.motor = motor;
	}

	public int getLugares() {
		return lugares;
	}

	public void setLugares(int lugares) {
		this.lugares = lugares;
	}

	public Carro(String motor, int lugares) {
		this.motor = motor;
		this.lugares = lugares;
	}

}

public class ControleVeiculos {

	// Usa var-arg para
	public void metodo(Veiculo... veiculos) {
		if (veiculos == null || veiculos.length == 0) {
			// Se for vazio ou não tiver nenhuma informação, retorna
			return;
		}

		for (Veiculo veiculo : veiculos) {
			if (veiculo instanceof Caminhao) {
				Caminhao caminhao = (Caminhao) veiculo;
				// Faz o tratamento necessário
			}
			if (veiculo instanceof Carro) {
				Carro carro = (Carro) veiculo;
				// Faz o tratamento necessário
			}
		}

	}

}

Como eu havia falado no post anterior:
Uma interface comum é criada e à partir de um método com número variável de argumentos você verificar de qual classe se trata a instância.

Agora, quanto à criação dos objetos que serão passados pra este método, aí são outros 500…

bruno_savi

é assim seria o jeito que eu tbm enchergaria o sistema…
mas o negocio é outra engenhoca maluca…
vamos se ver depois do levantamento o comportamento do sistema fica mais simples…

rmendes08

Eu acho que o melhor que você faz é o seguinte:
1 - crie uma interface que deve ser comum a todos os objetos que podem ser passados como parâmetros
2 - faça o seu método receber um varargs desses objetos

interface Parametro{
   void doSome1();
   void doSome2();
}

class BlaBla{
   void metodoRecebeParametros( Parametro ... args){
       //aqui vc acessa os seus  parametros como um vetor
       args[0].doSome1();
       args[1].doSome2();
       //...
   }
}

Agora, se nem uma interface comum eles podem compartilhar, o jeito é chutar o balde:

class BlaBla{
   void metodoRecebeParametros( Object ... args){
       //e seja o que deus quiser ...
   }
}
bruno_savi

rmendes08

vc me deu uma ideia super boa…

recebo os objetos do banco…

crio um metodo que recebe um objeto como parametro e o outro como valor e faz a verificação conforme for passado no levantamento…

acho que assim funciona…
vamos esperar a fase de levantamentos…
:smiley:

rmendes08

Eu acho que pode ser algo assim:

interface ParametroCalculoCarga{
     String getNomeParametro();
     Object getValor();
}

class CalculadorCarga{
     public tiporetorno calculaCarga( ParametroCalculaCarga ... parametro ){
        //faz o que precisa
     }
}
deniswsrosa

Se entendi muito bem o problema minha dica é o seguinte
Bom, na minha visão talvez você possa ao invés de utilizar varargs, colocar os parãmetros diretamente em uma collection ou Map, agora… se cada parâmentro adiciona um comportamento a mais, vc pode para cada parâmentro criar um objeto e implementar o design pattern decorator. Assim não importa o número de parãmetros, voc~e sempre vai poder por exemplo, calcular a caraga máxima.

Criado 4 de dezembro de 2008
Ultima resposta 4 de dez. de 2008
Respostas 12
Participantes 6