Relação Entre Objetos - OO
Por: jairussilva • 4/5/2015 • Trabalho acadêmico • 1.098 Palavras (5 Páginas) • 294 Visualizações
Olá,
Vejo alguns alunos com dificuldade em trabalhar com o relacionamento entre objetos e como escrever estas relações, por isso irei escrever murais com exemplos de como escrever uma relação entre objetos.
Inicialmente vou descrever o problema que eu quero resolver e irei escrever murais com a solução. O problema é definir a relação entre um produto e cor do mesmo, sendo que as informações são as seguintes:
- código do produto
- nome do produto
- preço do produto
- código da cor do produto
- nome da cor do produto
- desconto do produto de acordo com a sua cor.
Como criar a(s) classe(s) para resolver este problema? Vou iniciar da forma errada, criando apenas uma única classe com todas as informações como atributos desta classe, nos próximos murais irei alterar esta definição, mas vocês pode (e devem) irem pensando em como resolver isto de uma forma mais elegante.
public class Produto {
private Integer codigo;
private String nome;
private Double preco;
private Integer codigoCor;
private String nomeCor;
private Double descontoCor;
// Apenas por razões de espaço ocultarei os metodos get/set
}
Na classe acima, todos os atributos são armazenados dentro de uma única classe, o que é um problema porque se eu tiver dois produtos diferentes, mas da mesma cor, o espaço de memória acaba sendo maior, uma vez que estarei repetindo informações sobre a cor nos dois produtos, e isto é totalmente desnecessário, além do tamanho da minha classe ficar maior do que ela precisaria.
A questão para você pensarem é, como resolver isto?
Pensem....
Abraços,
================================================================================
Continuando o mural sobre relações entre objetos, tínhamos definido uma classe Produto contendo todos os atributos próprios e os atributos da sua cor, e isto não é um relacionamento entre objetos, afinal somente um objeto foi criado, o Produto.
Para melhorar a resposta minha proposta é criar uma nova classe que conterá as informações específicas da cor e a classe Produto irá se relacionar com esta classe. A solução abaixo mostra como estas 2 classes se relacionam.
Nota: para salvar espaço os métodos get/set foram ocultos, mas considerem que os mesmos existam
public class Produto {
private Integer codigo;
private String nome;
private Double preco;
private Cor cor;
}
Reparem que da classe Produto foram retirados todos os atributos específicos de sua cor, e estes foram substituídos por um atributo que representa um relacionamento com uma instância da classe Cor, a qual a definição pode ser vista abaixo:
public class Cor {
private Integer codigo;
private String nome;
private Double desconto;
}
A classe Cor concentra todas as informações específicas de uma cor, e desta forma além de modelarmos melhor a resposta ao problema, tornamos o código menor (a classe Produto ficou menor) e deixamos mais claro para o leitor onde encontrar as nformações de cada tipo de objeto (lembrem-se que uma classe representa um tipo de coisas).
Agora com as classes modeladas, como tribuir valores as mesmas? Isto pode ser feito como mostrado a seguir, e para isto, vamos considerar que existe uma outra classe (Main) com o famoso método "public static void main" de onde o trecho abaixo foi copiado.
Produto produto = new Produto();
produto.setCodigo(Integer.parseInt(JOptionPane.showInputDialog("digite o codigo do produto")));
produto.setNome(JOptionPane.showInputDialog("digite o nome do produto"));
produto.setPreco(Double.parseDouble(JOptionPane.showInputDialog("digite o preco do produto")));
Cor cor = new Cor();
cor.setCodigo(Integer.parseInt(JOptionPane.showInputDialog("digite o codigo da cor")));
cor.setNome(JOptionPane.showInputDialog("digite o nome da cor"));
cor.setDesconto(Double.parseDouble(JOptionPane.showInputDialog("digite o desconto da cor")));
// Aqui eh definido a relacao entre o objeto produto e o objeto cor
produto.setCor(cor);
Perceberam como as informações podem ser setadas nos objetos e principalmente como a relação entre eles é estabelecida? Isto é muito importante.
Para o próximo mural, notem que tipo de informação em comum existem entre os objetos Produto e Cor e pensem: Será que eu não poderia usar a herança para tornar meu código ainda mais compacto?
Pensem....
...