Herança ou Composição?  XML
Índice dos Fóruns » Metodologias de Desenvolvimento e Testes de Software
Autor Mensagem
davilima81
Entusiasta Java
[Avatar]

Membro desde: 30/12/2007 17:44:56
Mensagens: 17
Localização: Fortaleza - Ce
Offline

Caros Javaneses,

Qual das modelagens é a correta?

Estou tendo dificuldades em entender padrões de Projetos
Não sei se penso na perfomance do sistema ou na ótima modelagem do sistema.
[Thumb - modelagem1_fruta.jpg]
 Nome do arquivo modelagem1_fruta.jpg [Disk] Download
 Descrição Modelagem Herança
 Tamanho 61 Kbytes
 Baixado:  26 vez(es)

[Thumb - Class Modelagem Composição.jpg]
 Nome do arquivo Class Modelagem Composição.jpg [Disk] Download
 Descrição Modelagem Composição e Herança
 Tamanho 73 Kbytes
 Baixado:  29 vez(es)

This message was edited 3 times. Last update was at 28/07/2011 16:31:15


Davi Ferreira de Lima
Técnico em EletroEletrônica
Técnico em Automação
Analista de Sistemas I
Perfil Profissional: http://br.linkedin.com/in/davilima81
[Email] [WWW]
davilima81
Entusiasta Java
[Avatar]

Membro desde: 30/12/2007 17:44:56
Mensagens: 17
Localização: Fortaleza - Ce
Offline

Tentarei ser mais específico, existe a modelagem de um sistema OO com banco OO(exemplo:Caché) e a outra com banco Relacional(PostgreSQL) que é o meu caso.
Ai veio a dúvida usar ou não usar Herança ?


package com.frutacor.producao;

/**
* @author DAVI FERREIRA DE LIMA
* @author CRISTIANO SALES
*
*/

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import com.frutacor.enums.EnuTipoUnidadePeso;
import com.frutacor.seguranca.BtpUsuario;

/**
*
*
* ENTIDADE QUE REPRESENTA O CONJUNTO DE FRUTAS DA EMPRESA
*
*
*
*/
@Entity
@Inheritance
@Table(name = "\"FRU_FRUTA\"")
@DiscriminatorColumn(name = "\"FRU_NOME_FRUTA\"", discriminatorType = DiscriminatorType.STRING)
@SequenceGenerator(name = "\"seqFruta\"", sequenceName = "\"seqFruta\"", allocationSize = 1)
public abstract class Fruta implements Cloneable,Serializable{

/**
*
*/
private static final long serialVersionUID = -4460758749463077394L;


/**
* É UTILIZADO ID DEVIDO AO MAPEAMENTO DO BANCO DE DADOS RELACIONAL
*/
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "\"seqFruta\"")
@Column(name = "\"FRU_SEQ_FRUTA\"", nullable = false)
protected Long fruSeqFruta;

/**
* NOME DA FRUTA
*/
@Column(name = "\"FRU_NOME_FRUTA\"", nullable = false, length = 60)
protected String fruNomeFruta;

/**
* TIPO DA UNIDADE DE PESO
*/
@Basic(optional = false)
@Enumerated(EnumType.ORDINAL)
@Column(name = "\"FRU_UNIDADE_PESO_FRUTA\"", nullable = false, length = 2, columnDefinition = "NUMBER", precision = 0)
protected EnuTipoUnidadePeso fruTipoUnidadePesoFruta;


public Fruta(Long fruSeqFruta, String fruNomeFruta,
EnuTipoUnidadePeso fruTipoUnidadePesoFruta,
Date fruDatCadastroFruta,
BtpClassificacaoCientifica btpClassificacaoCientifica,
BtpUsuario btpUsuario) {
super();
this.fruSeqFruta = fruSeqFruta;
this.fruNomeFruta = fruNomeFruta;
this.fruTipoUnidadePesoFruta = fruTipoUnidadePesoFruta;
}

public Long getFruSeqFruta() {
return fruSeqFruta;
}

public void setFruSeqFruta(Long fruSeqFruta) {
this.fruSeqFruta = fruSeqFruta;
}

public String getFruNomeFruta() {
return fruNomeFruta;
}

public void setFruNomeFruta(String fruNomeFruta) {
this.fruNomeFruta = fruNomeFruta;
}

public EnuTipoUnidadePeso getUnidadePesoProducao() {

return fruTipoUnidadePesoFruta;
}


public void setUnidadePesoProducao(EnuTipoUnidadePeso enuTipoUnidadePeso) {

this.fruTipoUnidadePesoFruta = enuTipoUnidadePeso;
}





}





package com.frutacor.producao;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import com.frutacor.enums.EnuTipoUnidadePeso;
import com.frutacor.seguranca.BtpUsuario;

@Entity
@Table(name = "\"BAN_BANANA\"")
@DiscriminatorValue("BANANA")
@SequenceGenerator(name = "seqBanana", sequenceName = "seqBanana", allocationSize = 1)
public class Banana extends Fruta implements Serializable,IBanana{


private static final long serialVersionUID = 3195685501727132993L;

@Enumerated(EnumType.ORDINAL)
@Column(name = "\"BAN_UNIDADE_PROUCAO_BANANA\"", nullable = false, length = 2, columnDefinition = "NUMBER", precision = 0)
protected EnuTipoUnidadePeso banUnidadeProducaoBanana;

@Column(name = "\"BAN_DAT_CADASTRO_BANANA\"", columnDefinition = "DATE")
@Temporal(TemporalType.DATE)
protected Date banDataCadastroBanana;

@Column(name = "\"BAN_PESO_MEDIO_BANANA\"", precision = 10, scale = 2)
protected Double banPesoMedioBanana;

@Column(name = "\"BAN_CICLO_BANANA\"", nullable = false, length = 2, columnDefinition = "NUMBER", precision = 0)
protected Long banCicloBanana;

@Column(name = "\"BAN_CICLO_PROUCAO_BANANA\"", nullable = false, length = 2, columnDefinition = "NUMBER", precision = 0)
protected Long banCicloProducaoBanana;


public Banana(Long fruSeqFruta, String fruNomeFruta,
EnuTipoUnidadePeso fruTipoUnidadePesoFruta,
Date fruDatCadastroFruta,
BtpClassificacaoCientifica btpClassificacaoCientifica,
BtpUsuario btpUsuario,
EnuTipoUnidadePeso banUnidadeProducaoBanana,
Date banDataCadastroBanana, Double banPesoMedioBanana,
Long banCicloBanana, Long banCicloProducaoBanana) {
super(fruSeqFruta, fruNomeFruta, fruTipoUnidadePesoFruta,
fruDatCadastroFruta, btpClassificacaoCientifica, btpUsuario);
this.banUnidadeProducaoBanana = banUnidadeProducaoBanana;
this.banDataCadastroBanana = banDataCadastroBanana;
this.banPesoMedioBanana = banPesoMedioBanana;
this.banCicloBanana = banCicloBanana;
this.banCicloProducaoBanana = banCicloProducaoBanana;
}


public Date getDataCadastro() {

return banDataCadastroBanana;
}


public void setDataCadastro(Date dataCadastro) {
this.banDataCadastroBanana = dataCadastro;

}

@Override
public Long getCiclo() {

return banCicloBanana;
}

@Override
public void setCiclo(Long ciclo) {
this.banCicloBanana = ciclo;

}

@Override
public Long getCicloProducao() {

return banCicloProducaoBanana;
}

@Override
public void setCicloProducao(Long cicloProducao) {
this.banCicloProducaoBanana = cicloProducao;

}


@Override
public Double getPesoMedio() {
return banPesoMedioBanana;
}


@Override
public void setPesoMedio(Double pesoMedio) {
this.banPesoMedioBanana = pesoMedio;

}




}




 Nome do arquivo Fruta.java [Disk] Download
 Descrição Classe Abstrata Fruta
 Tamanho 3 Kbytes
 Baixado:  26 vez(es)

 Nome do arquivo Banana.java [Disk] Download
 Descrição Classe Concreta Banana
 Tamanho 3 Kbytes
 Baixado:  29 vez(es)

This message was edited 2 times. Last update was at 29/07/2011 08:19:47


Davi Ferreira de Lima
Técnico em EletroEletrônica
Técnico em Automação
Analista de Sistemas I
Perfil Profissional: http://br.linkedin.com/in/davilima81
[Email] [WWW]
Jemerson
Thread.start()
[Avatar]

Membro desde: 26/09/2009 22:53:37
Mensagens: 46
Localização: Serra/ES
Offline

Pelo que você postou,não consegui captar nenhuma forma de estruturar as suas classes a não ser por herança.
Por falar em estruturação,você inverteu a seta que indica que a classe Banana herda de fruta( e para as demais).
Mas se houvesse alguma forma de você estruturar esse modelo colocando composição, seria o mais indicado.
Vamos esperar para ver se alguém posta alguma sugestão que encaixe no seu modelo
Abraços.


J.S
[MSN] [ICQ]
 
Índice dos Fóruns » Metodologias de Desenvolvimento e Testes de Software
Ir para:   
Powered by JForum 2.1.8 © JForum Team