Parametrização Dinamica

12 respostas
B

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

H

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

espero ter ajudado

B

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…

D

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.

B

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.

B

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.

D

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…

B

é 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…

R

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 ...
   }
}
B

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:

R

Eu acho que pode ser algo assim:

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

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

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