C# - Implementando o relacionamento um-para-muitos
Neste artigo eu vou mostrar como podemos implementar o relacionamento um-para-muitos em classes com esse tipo de associação usando a linguagem C#. |
Imagine um cenário onde você esta iniciando no paradigma da orientação a objetos
e tenha que definir as classes com uma associação um-para-muitos e também
a sua implementação.
Você deverá definir as classes, os atributos, representar o relacionamento, gerar uma associação entre as classes e criar um projeto para mostrar a implementação das classes. Um típico exercício acadêmico que se repete aos milhares no dia a dia de um desenvolvedor que usa uma linguagem orientada a objetos.
Este é um assunto recorrente e já muito bem conhecido para quem tem uma boa experiência com programação orientada a objetos, mas o que pode parecer simples para quem têm experiência, para quem esta começando agora, pode ser um pesadelo.
Neste artigo eu vou mostrar como definir e implementar as classes envolvidas em uma associação um-para-muitos, o mesmo existente entre duas tabelas de um banco de dados relacional. Vou mostrar também como gerar a associação entre as classes e criar um projeto para implementar a solução, enfim mostrar uma das possíveis maneiras de resolver este problema usando apenas como ferramenta a linguagem C# que é uma linguagem orientada a objetos.
Recursos Usados
Conceitos Básicos - O relacionamento um-para-muitos
Nosso ponto de partida será um banco de dados relacional com duas tabelas onde existe um relacionamento um-para-muitos. (assim fica mais fácil entender o exemplo das classes.)
O relacionamento um-para-muitos é o mais frequente e ocorre quando uma linha na Tabela A pode ter muitas linhas coincidentes na Tabela B, mas uma linha na Tabela B tem uma só linha coincidente na Tabela A.
Este relacionamento é representado por => 1:N
Neste tipo de relacionamento a chave primária da tabela que tem o lado 1 vai para a tabela do lado N. No lado N ela é chamada de chave estrangeira.
Chave Primária é o campo no qual não podem haver valores repetidos |
No banco de
dados Northwind.mdf temos um exemplo desse relacionamento entre as
tabelas Customers e Orders. Cada cliente somente é cadastrado só uma vez na tabela Customers (por isso o campo CustomerID, na tabela Customer, é uma chave primária), portanto a tabela Customer será o lado um do relacionamento. Ao mesmo tempo cada cliente pode fazer diversos pedidos, por isso que o mesmo Código de Cliente(CustomerID) poderá aparecer várias vezes na tabela Orders: tantas vezes quantos forem os pedidos que o Cliente tiver feito. Por isso temos um relacionamento do tipo Um-para-Muitos entre a tabela Customers e Orders, através do campo CustomerID, indicando que um mesmo Cliente pode realizar Muitos (vários) pedidos. |
O exemplo que eu vou implementar neste artigo vai ser mais simples para tornar bem claro o entendimento a todos os que estão iniciando com a programação orientada a objetos.
Vou implementar as classes e os métodos sem a ajuda de nenhuma ferramenta, usando apenas o Visual Studio 2013 Express Edition. Lembrando que a solução apresentada apenas é uma das soluções possíveis e não a única solução.
Existem muitos cenários onde podemos implementar um relacionamento um-para-muitos entre duas classes. Vejamos alguns exemplos :
1- Uma classe Pessoa e uma
classe Veículo : representando a relação entre uma pessoa e veículos onde
uma pessoa pode ser proprietário de mais de um veículo;
2- Uma classe Pessoa e uma classe Conta : representa a relação
entre uma pessoa e uma conta bancária onde uma pessoa pode ser possuir mais de
uma conta;
3- Uma classe Pessoa e uma classe Dependente : representando a
relação entre uma pessoa e seus dependentes onde uma pessoa pode possuir mais de
um dependente;
4- Uma classe Cliente e uma classe Pedido: representando a relação
entre um cliente e seus pedidos onde um cliente pode possuir mais de um pedido;
E como podemos implementar esses relacionamentos representados pelas associações entre as classes usando a linguagem C# ?
Implementando a associação um-para-muitos entre duas classes
Para realizar a implementação vamos criar uma nova solução abrindo o VS 2013 for windows desktop e clicando em New Project;
A seguir selecione a linguagem Visual C# e o template Console Application informando o nome : Relacionamento_Um_Para_Muitos;
Vamos começar definindo um classe Cliente e uma classe Dependente onde um cliente pode ter nenhum ou muitos dependentes.
- A definição da classe Dependente pode ser feita assim:
public class Dependente
{
public int Id { get; set; }
public string Nome { get; set; }
}
|
Para ficar bem simples defini na classe apenas duas propriedades : Id e Nome.
A seguir vamos criar a classe Pessoa com o seguinte código:
using System;
using System.Collections.Generic;
namespace Relacionamento_Um_para_Muitos
{
public class Pessoa
{
public int Id { get; set; }
public string Nome { get; set; }
public List<Dependente> Dependentes;
public void Imprimir()
{
Console.WriteLine(" .: Pessoa :. ");
Console.WriteLine(" Id : " + this.Id);
Console.WriteLine(" Nome : " + this.Nome);
Console.WriteLine(" ----- Dependentes ----- ");
foreach(Dependente d in Dependentes)
{
Console.WriteLine("Dependente : " + d.Nome);
}
}
}
}
|
Na classe Pessoa definimos 2 Propriedades e um Campo: Id do tipo int , Nome do tipo string e Dependentes que é uma lista de dependentes.
Campos armazenam os dados que uma classe necessita para cumprir o seu objetivo.( https://msdn.microsoft.com/en-US/library/ms173118%28v=vs.80%29.aspx ) Os campos são inicializados imediatamente antes que o construtor para a instância do objeto seja chamado, por isso, se o construtor atribuir um valor a um campo, |
Definimos também o método Imprimir que imprime os dados da Pessoa e seus dependentes.
É a propriedade Dependentes que define o relacionamento muitos para a classe Pessoa.
Vamos agora criar o código abaixo no método Main() onde vamos criar objetos da classe Dependente e Pessoa e imprimir a pessoa e seus dependentes:
|
using System;
using System.Collections.Generic;
namespace Relacionamento_Um_para_Muitos
{
class Program
{
static void Main(string[] args)
{
//cria lista de dependentes
List<Dependente> lista = new List<Dependente>();
//cria objeto dependente
Dependente d1 = new Dependente();
d1.Id = 1;
d1.Nome = "Jessica";
//cria objetos dependente usando o recurso inicializadores de objetos
Dependente d2 = new Dependente { Id = 2, Nome = "Jefferson" };
Dependente d3 = new Dependente { Id = 3, Nome = "Janice" };
//inclui os objetos na lista de dependentes
lista.Add(d1);
lista.Add(d2);
lista.Add(d3);
//cria um objeto Pessoa e atribui a lista de dependentes
Pessoa p = new Pessoa();
p.Id = 1;
p.Nome = "Macoratti";
p.Dependentes = lista;
//imprime a pessoa e seus dependentes
p.Imprimir();
Console.ReadLine();
}
}
}
|
Executando o projeto iremos obter o seguinte resultado:
Vimos assim como é simples implementar o relacionamento um-para-muitos usando a associação entre duas classes na linguagem C#.
Pegue o projeto completo aqui: Relacionamentos_Um_Muitos.zip
Quem
ama a sua vida perdê-la-á, e quem neste mundo odeia a sua vida, guardá-la-á para
a vida eterna.
Se alguém me serve, siga-me, e onde eu estiver, ali estará também o meu servo.
E, se alguém me servir, meu Pai o honrará.
João 12:25,26
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências: