System.Collection: Conheça as interfaces
Temos neste artigo as principais interfaces, genéricas ou não, e estruturas de dados presentes no namespace System.Collections do .NET Framework, que permitem a implementação de diversos tipos de coleções de dados.
Ao longo desse artigo traremos as principais
interfaces do namespace System.Collections, bem como a relação delas com
algumas estruturas de dados importantes no desenvolvimento de software.
Mostraremos a importância da interface ICollection, bem como o funcionamento
básico de Generics, além da comparação entre alguns dos elementos relacionados
mais importantes que enxergamos no desenvolvimento C#.
O conceito de herança é um dos mais importantes da orientação a objetos. A ideia é que as classes filhas sejam capazes de reaproveitar o código das classes pai. No caso do C#, por exemplo, quando pensamos em herança, pensamos na classe Object, da qual todas as demais herdam, direta ou indiretamente.
Mas na maioria dos casos a herança é um recurso para os desenvolvedores utilizarem e criarem um código mais conciso, de fácil reutilização e manutenção.
Algumas linguagens orientadas a objetos utilizam um conceito conhecido como herança múltipla. Esse conceito aparece, por exemplo, em C++, e consiste em permitir que uma única classe herde de várias (tenha vários “pais”).
Isso pode gerar problemas, especialmente em classes da terceira geração, como mostra a Figura 1. Esse tipo de comportamento impede que a classe de hierarquia mais baixa (ClasseFilha3) saiba de onde estão vindo cada uma das propriedades que utiliza, caso tenham o mesmo nome.
Isso gera uma dose extra de cuidado para que a aplicação possa funcionar corretamente.
Figura 1. Exemplo herança múltipla
O problema da herança múltipla foi resolvido em C# e outras linguagens mais modernas como Java com o acréscimo das interfaces. Esses são elementos
abstratos que precisam ser implementados por alguma classe para funcionarem. Eles podem trazer assinaturas de métodos e propriedades que serão compartilhadas por todas as classes que os implementam. Em outras palavras, eles formam uma base de representação para classes com características semelhantes.
Ao longo desse artigo, veremos como funcionam algumas das interfaces padrão do C# .NET, porque elas existem e o que podem fazer por nós, além da relação que as interfaces têm com algumas estruturas de dados importantes para a aplicação.
Além disso, veremos como é importante a utilização desse tipo de artifício para a criação de um sistema de qualidade.
Conhecendo as principais Interfaces do C#
O C# possui uma série de namespaces que podem ser utilizados diretamente. Um deles é o System.Collections, que traz uma série de interfaces, classes e estruturas de dados de uso comum no desenvolvimento de aplicações.
Essas interfaces são muito úteis, formando uma base de representação para futuras classes que as implementarão. Veremos as principais delas ao longo do artigo em detalhes.
Vamos começar apresentando as interfaces. A principal delas é a ICollection, que define alguns atributos essenciais das coleções não-genéricas (as entenderemos a seguir). Essa interface fornece a base necessária às demais, que formam representações de dados, trazendo diversas opções para os desenvolvedores.
São as características que as definem, e precisamos entender qual delas é mais interessante para nós de acordo com o aplicativo que estamos desenvolvendo. As opções são muitas, como mostra a Tabela 1, que não traz todas as interfaces presentes no namespace System.Colletions, apenas as mais importantes, que entenderemos ao longo desse artigo.
Interface |
Descrição |
ICollection |
Tamanho, Enumeradores e métodos de sincronização para coleções não-genéricas |
IDictionary |
Coleção não-genérica de par chave/valor |
IEnumerable |
Enumerador que oferece suporte a iterações simples sobre uma coleção não-genérica |
IEnumerator |
Oferece suporte a iterações simples sobre uma coleção não-genérica |
IList |
Coleção simples de objetos não-genéricos |
Tabela 1. Principais interfaces do namespace System.Collections
O entendimento das interfaces fica mais fácil quando analisamos as implementações das mesmas. Por exemplo, o namespace fornece a classe ArrayList, que implementa a interface IList através de uma matriz cujo tamanho é aumentado dinamicamente quando necessário.
A partir desse exemplo, podemos concluir que a interface IList é, verdadeiramente, uma representação básica de uma coleção simples de objetos não-genéricos.
Em outras palavras, ela traz uma base a ser seguida, com alguns atributos essenciais para a criação de estruturas de dados do tipo Lista. Outras implementações que podemos destacar são:
· Queue: Implementa ICollection, IEnumerable e ICloneable, esta última não pertencente ao namespace System.Collections (e sim ao System). Representa uma fila de dados, baseado no padrão FIFO (" [...] continue lendo...
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo