Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Instanciar um objeto após conhecer o seu tipo em tempo de execução

Prezados, gostaria de tirar uma dúvida...

Quando eu tenho, hipoteticamente, uma classe do tipo "Carga" (uma carga qualquer, dessas que são entregues via caminhão, avião, etc), que possui um atributo Modal (que pode ser do tipo caminhão, trem ou navio). O Caminhão, Trem e Navio tbm são Classes pois possuem atributos diferentes(nem todos, mas há desigualdades entre as demais). Sendo assim, como faço para instanciar o Modal na Classe carga? Eu pensei em fazer um if/else na classe Carga para descobrir o tipo, se for "navio" eu faço new Navio(); e assim com os demais. No entanto, eu teria que ter os três atributos (Trem, Navio e Caminhão) na classe, e eu quero somente um deles!!! E, principalmente, como eu represento esta situação num diagrama de classes?? Há um padrão específico para estes problemas??? Grata!

4 respostas
solução!

Se entendi bem a pergunta essa classe carga seria assim:

class Carga{ 
 void fazAlgo(Modal m){
 }

}

isole o comportamento que você deseja das classes caminhao e navio em uma interface modal e faça as duas implementarem e use na sua classe carga uma referencia de modal;

interface Modal{
 void metodoUtilizadoNaClasseCarga();
}

class Caminhao implements Modal{
 void metodoUtilizadoNaClasseCarga(){
   //código dessa classe
 }
}

class Navio implements Modal{
 void metodoUtilizadoNaClasseCarga(){
   //código dessa classe
 }
}

Instancie usando polimorfismo assim:

 Modal navio = new Navio();
 Modal caminhão = new Caminhao();
 Carga c = new Carga();
 c.fazAlgo(navio);
 c.fazAlgo(caminhao);

Diego .. Muito obrigada, era isso mesmo.. No entanto, qual seria o padrão?? Como eu poderia descrever essa situação de implementação de interfaces num diagrama de Classes?? Poderia de dar uma ideia?? Grata !!

Oi Valéria

O que o Diego explicou foi o uso de interfaces da Orientação a Objetos. Você pode ler um pouco mais sobre o assunto na apostila aberta da caelum: https://www.caelum.com.br/apostila-java-orientacao-objetos/interfaces/#10-2-interfaces

As interfaces são relacionadas a diversos padrões de projeto como o State, Command e o Strategy dependendo da finalidade da classe no código. A criação da implementação correta da interface poderia ser implementada utilizando-se o padrão Factory Method.

Veja que o nome do padrão de projeto não está ligado a implementação do padrão (diversos padrões de projeto possuem implementações iguais ou muito parecidas), mas sim ao uso que será feito no código.

OI Valéria

A sua dúvida foi resolvida?