Desenvolvimento - ASP. NET
.NET 2.0 - Introdução ao Generics (Whidbey)
Entre muitas novidades do .NET Framework 2.0 abordaremos nesse artigo o suporte a programação genérica (Generics). Esse artigo tem o propósito de apresentar esse novo modelo de programação que pode se aplicar nos diversos modelos de projetos disponíveis.
por Ramon DurãesEntre muitas novidades do .NET Framework 2.0 abordaremos nesse artigo o suporte a programação genérica (Generics). Esse artigo tem o propósito de apresentar esse novo modelo de programação que pode se aplicar nos diversos modelos de projetos disponíveis.
Conforme o próprio nome esse novo modelo de programação permite diversos ganhos para o desenvolvedor. Dentre eles podemos citar a diminuição da quantidade de código escrito pois não será mais necessário escrever diversos métodos iguais com parâmetros diferentes (sobrecarga), maior ganho em desempenho evitando uso de Boxing & Unboxing (conversões implícitas de tipos primitivo p/Objeto / vice-versa, lembrando que no mundo OOP tudo é objeto.), ganhos consideráveis em produtividade e reutilização, o modelo de programação genérica veio para potencializar suas classes.
O modelo Generics se assemelha ao templates do C++ com os diferenciais de produtividade da plataforma .NET
Podendo ser aplicado:
- Class
- Interfaces
- Methods
- Delegates
- Contraints
Confira na Listagem 01 o modelo tradicional utilizado atualmente baseado em sobrecargas para ter a possibilidade de receber diversos tipos diferentes como parâmetro.
Public Class Modelo_Atual
Function addItems(ByVal arritens() As
String) As
String
Return "Adicionado"
End Function
Function addItems(ByVal arritens() As
Int32) As String
Return "Array Inteiro"
End Function
End Class
Listagem 01 - Modelo de class atual
Observando o modelo da Listagem 01 confira que existem dois métodos addItems um pedindo um array do tipo String e outro pedindo um array para o tipo Int32. Agora vamos ao modelo da Listagem 02 onde a mesma class está escrita no novo padrão Generics.
Public Class Modelo_Generics(Of itemType) Function addItems(ByVal arritens() As itemType) As String Return "Array " + arritens.GetType.ToString End Function End Class Listagem 02 - Modelo de class Generics
Conferindo agora a Listagem 02 você deve observar que no lugar de ter dois métodos agora temos apenas um e o tipo do parâmetro agora é um tipo genérico "itemType", permitindo dessa forma receber os mais diversos parâmetros reduzindo a necessidade de se ter vários métodos.
Para verificar como se utiliza esse tipo de class confira o exemplo na Listagem 03.
Protected Sub btGenerics_Click(ByVal sender As
Object, ByVal
e As System.EventArgs) Handles btGenerics.Click
Dim arrCodigos() As Int32 = {2, 4,
1}
Dim ModeloCodigos As New
Modelo_Generics(Of Int32)
Dim
ModeloNomes As New Modelo_Generics(Of String)
ModeloNomes.addItems(arrNomes)
End Sub
Listagem 03 - Utilizando class Generics
Conforme exemplo da Listagem 03 criamos o objeto ModeloCodigos que vai receber parâmetro do tipo In32 conforme essa chamada da Class Modelo_Generics(Of Int32).
Até esse ponto você já pode concluir que com Generics você evitou de ter vários métodos apenas pra receber parâmetros de tipos diferentes.
Para melhor facilitar sua compreensão estarei apresentando no próximo exemplo uma nova class, dessa vez será um carrinho de compras que recebera "objetos" como itens e serão passados pelo método. Avaliando em uma situação anterior ao modelo Generics você precisaria construir um método para objeto que fosse passado como parâmetro. Descrito essa situação dessa Class imaginaria do carrinho de compras de objetos confira mais um exemplo na Listagem 04.
Namespace Compras Public Enum Frutas Melancia = 0 Manga = 1 Banana = 2 End Enum Public Enum Verduras Cenoura = 0 Batata = 1 Abobora = 2 End Enum Public Class Carrinho(Of itemType) Private CestadeItens() As itemType Private intIndiceItens As Integer Public Sub New(ByVal intQuantidade As Integer) ReDim CestadeItens(intQuantidade - 1) intIndiceItens = 0 End Sub Public Sub Adiciona_Itens(ByVal item As itemType) If intIndiceItens> UBound(CestadeItens)Then Throw New Exception("Não é possivel adicionar mais itens") End If CestadeItens(intIndiceItens) = item intIndiceItens += 1 End Sub Public Function Retorna_Lista_Itens() As String Dim i As Int32 Dim strItens As String = "" For i = 0 To CestadeItens.Length - 1 If i> 0 Then strItens += "," End If strItens += CestadeItens(i).ToString Next Return strItens End Function End Class End Namespace
Listagem 04 - Carrinho de compras de objetos
Analisando a Listagem 04 identificamos o método principal que é o Adiciona_Itens o mesmo recebe os nossos "objetos" virtuais que serão adicionados ao carrinho. Agora confira na Listagem 05 o código necessário para utilização dessa class.
Protected Sub btCarrinhoCompras_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btCarrinhoCompras.Click
Dim ComprasFrutas As New Compras.Carrinho(Of Compras.Frutas)(2)
ComprasFrutas.Adiciona_Itens(Compras.Frutas.Banana)
ComprasFrutas.Adiciona_Itens(Compras.Frutas.Manga)
Response.Write(ComprasFrutas.Retorna_Lista_Itens)
End
Sub
Listagem 05 - Utilizando class carrinho de compras
Referências
Finalizando
O modelo de programação genérica (Generics) funcionara como uma reengenharia na forma como as classes atuais são escritas. Conforme visto podemos comprovar uma redução brutal de código.
O que você gostaria saber?
Aguardo seu comentário! Ele é muito importante. Participe!!! Até próximo artigo!