Atributo do Tipo de uma Classe

14/01/2009

Estou querendo saber a seguinte questão... Tenho uma Classe chamada Aluno e outra classe chamada Turma. na Classe Aluno tenho as propriedades:  int ID  string Nome  string Telefone  string Matricula  Turma Turma   na Classe Turma eu tenho  int ID  string Nome  string Turno   Gostaria de saber como eu faço para na hora que eu chamar Aluno o mesmo ja retorne com a propriedade Turma preenchida também preciso de um exemplo da Camada de Persistência e da Camada de Negócios, de preferência com comentários no mesmo, se for um vídeo ajudaria também. Além disso Gostaria de outro exemplo caso eu tivesse o Aluno inscrito em N turma com um atributo do tipo List<Turma> Turma ou invé de Turma Turma, gostaria dos DOIS exemplos.   Obrigado e aguardo contato, Vinícius Climaco.
Vinicius Climaco

Vinicius Climaco

Curtidas 0

Respostas

Luiz Maia

Luiz Maia

14/01/2009

Olá Vinicius,   Você tem duas opções para esta implementação, ambas dentro do escopo de orientação a objetos. A mais fácil de manipular é você criar o atributo id_turma dentro do seu objeto/classe aluno, outra forma é criar a instancia da Classe turmas dentro do seu objeto aluno, já que um aluno pode estar em várias turmas e uma turma possui vários alunos.     Cairemos na mesma situação do chamado anterior no qual você solititou o atendimento, mas para aluno x materia. Segue o post completo, com os exemplos das camadas de persistência e negocios, lembrando que vc terá que substituir a classe abaixo de Materia, por Turmas:   Segue a representação:     O relacionamento na classe seria da seguinte forma: 1 - Vc deve criar um atributo List no Aluno para as materias pertinentes a ele. 2 - O preenchimento do List de materias seria exatamente na hora da chamada da classe Aluno. 3 - Se vc esta usando Link,  o Linq requer que vc defina a tabela ponte como uma entidade. Não tem outro jeito.     Segue o codigo:   public class Aluno{
// Alguns membros privados vc coloca aqui
// ...
public Aluno() {}

// Propriedades do objeto Aluno public String Codigo { get {return _codigo;} set {_codigo = value;}}
public String Nome { get {return _nome;} set {_nome = value;}}
// 1-n propriedade do relacionamento public ArrayList Aluno_Materia
{ get {return _aluno_materia;} set {_aluno_materia= value;}}
}

public class Aluno_Materia{
// membros privados e etc
// ...
public Aluno_Materia() {}

// Propriedades do objeto Aluno_Materia public String AlunoId { get {return _alunoId;} set {_alunoId= value;}}
public String MateriaId { get {return _materiaId;} set {_materiaId = value;}}

// n-1 Propriedades dos relacionamentos public Aluno Aluno { get {return _aluno;} set {_aluno = value;}}
public Materia Materia { get {return _materia;} set {_materia = value;}}
}   public class Materia{
// ...
public Materia() {}

// Propriedades do objeto Materia public String Codigo { get {return _codigo;} set {_codigo = value;}}
public String Nome { get {return _nome;} set {_nome = value;}}

//  relacionamento um para um public ArrayList Aluno_Materia
{ get {return _aluno_materia;} set {_aluno_materia= value;}}
}   Como vc pode ver acima, Aluno e Materia, ambos mantem a coleção Aluno_Materia como propriedade. Agora, se Aluno_Materia nao ter nenhum atributo alem das PKs, nos poderiamos simplesmente ter colocado a coleção de Alunos em Materias e a coleção de Materias em Alunos. Mas para manter a conscistencia, sempre devemos colocar a coleção dos objetos mapeados na Classe da tabela "ponte". Desta forma, se vc decidir adicionar atributos na tabela ponte, não perderá a sua consistencia e não precisará refazer seu Objectc Model.   Agora o código da camada de persistencia, para recuperação do Aluno com todos os dados seguindo o que vc me solicitou:   public class Aluno_MateriaFactory : DbObject, IAluno_MateriaFactoryFactory {
 // ...
 public Aluno_MateriaFactoryFactory() {}  public ArrayList ProcurarComMaterias (String alunoId)
 {
  try
  {
  
String sql = "SELECT codigo, am.materia, .... FROM materia INNER JOIN aluno_materia am ON m.codigo = am.materia
WHERE codigo = ?";
ArrayList ctList = new ArrayList(); PrepareSql(sql);
BeginTransaction();
AddCmdParameter("@alunoId", EDataType.eString, alunoId, EParamDirection.eInput);
ExecuteReader();
while (Read())
{
Aluno_MAteria am = new Aluno_MAteria();
FillAluno_MAteria(am); // copia os registros do Reader para Aluno_MAteria   Materia mat = new Materia();
FillMateria (mat); // copia regsitros do Reader para Materia am.Materia = mat; // a referencia de am agora é de (n-1)  para Materia
amList.Add(am);
}
ReleaseReader();
CommitTransaction();
ReleaseCommand(); return amList;
}
catch (Exception ex)
{
Rollback();
throw ex;
}   Acima é a representação de todo o codigo que precisa. Qualquer coisa estou a disposição.     Seguem dois videos de UML bastante interressantes e que irão ajudá-lo bastante: (caso não tenha permissão, me avise que providencio para você) https://www.devmedia.com.br/articles/viewcomp.asp?comp=9609
https://www.devmedia.com.br/articles/viewcomp.asp?comp=10949 Abraços Vinicius Aguardo seu retorno, por favor me avise se tiver alguma dúvida ou precise de mais exemplos. Att, Luiz Maia  
GOSTEI 0
Luiz Maia

Luiz Maia

14/01/2009

E ai Vinícius, blz? Como vai o desenvolvimento da classe, suas dúvidas foram sanadas com os posts acima? Aguardo seu retorno. Abraços   Att Luiz Maia          
GOSTEI 0
Luiz Maia

Luiz Maia

14/01/2009

Ola Vinicius,   Como não obtivemos um retorno seu, estamos cancelando o chamado. Continuamos a sua disposição. Abraços e até a próxima.   Att Luiz Maia
GOSTEI 0
POSTAR