Contêiner (tipo de dados abstrato)

Na ciência da computação , um contêiner é uma classe ou estrutura de dados [1] [2] cujas instâncias são coleções de outros objetos. Ou seja, armazenam objetos de forma organizada e seguindo regras de acesso específicas.

O tamanho do contêiner depende do número de objetos (elementos) que ele contém. As implementações subjacentes (herdadas) de vários tipos de contêineres podem variar em tamanho, complexidade e tipo de linguagem, mas em muitos casos fornecem flexibilidade na escolha da implementação certa para qualquer cenário.

Estruturas de dados contêineres são comumente usadas em muitos tipos de linguagens de programação .

Função e propriedades

Os contêineres podem ser caracterizados pelas três propriedades a seguir:

  • access , essa é a forma de acessar os objetos do container. No caso de arrays, o acesso é feito através do índice do array. No caso das pilhas o acesso é feito pela ordem LIFO (último a entrar, primeiro a sair) e no caso das filas é feito pela ordem FIFO (primeiro a entrar, primeiro a sair);
  • storage , que é a forma de armazenar os objetos do container;
  • traversal , essa é a forma de percorrer os objetos do container.

Espera-se que as classes de contêiner implementem métodos do tipo CRUD para fazer o seguinte:

  • crie um contêiner vazio (construtor);
  • insira objetos no contêiner;
  • exclua objetos do contêiner;
  • exclua todos os objetos do contêiner (limpar);
  • acessar os objetos no contêiner;
  • acessar o número de objetos no contêiner (contagem).

Às vezes, os contêineres são implementados em conjunto com iteradores .

Tipos

Os contêineres podem ser classificados como contêineres de valor único ou contêineres associativos .

Os contêineres de valor único armazenam cada objeto de forma independente. Os objetos podem ser acessados ​​diretamente, por uma construção de loop de linguagem (por exemplo, for loop ) ou com um iterador .

Um contêiner associativo usa um array , mapa ou dicionário associativo, composto de pares chave-valor, de modo que cada chave apareça no máximo uma vez no contêiner. A chave é usada para encontrar o valor, o objeto, se estiver armazenado no contêiner. Contêineres associativos são usados ​​em linguagens de programação como modelos de classe.

Os tipos de dados abstratos do contêiner incluem:

As estruturas de dados comuns usadas para implementar esses tipos abstratos incluem:

Contêineres gráficos

Os kits de ferramentas de widget também usam contêineres, que são widgets especiais para agrupar outros widgets, como janelas , painéis . Além de suas propriedades gráficas, elas possuem o mesmo tipo de comportamento das classes contêineres, pois mantêm uma lista de seus widgets filhos e permitem adicionar, remover ou recuperar widgets entre seus filhos.

Em linguagens de tipo estaticamente

As abstrações de contêiner podem ser escritas em praticamente qualquer linguagem de programação, independentemente do seu tipo de sistema. [3] : 273  No entanto, em linguagens de programação orientadas a objetos fortemente tipadas, pode ser um tanto complicado para um desenvolvedor escrever contêineres homogêneos reutilizáveis.

Devido às diferenças nos tipos de elementos, isso resulta em um processo tedioso de escrever e manter uma coleção de contêineres para cada tipo de elemento. [3] : 274–276 

Muitos tipos elementares (por exemplo, inteiros ou números flutuantes) são inerentemente incompatíveis entre si devido ao tamanho da memória que ocupam e ao seu significado semântico e, portanto, requerem contêineres diferentes (a menos, é claro, que sejam mutuamente compatíveis ou conversíveis). [3] : 274–276  Linguagens de programação modernas oferecem várias abordagens para ajudar a resolver o problema: [3] : 274–281 

Tipo básico universal
Um tipo que pode ser atribuído universalmente por qualquer outro (por exemplo, classe Object raiz).
Downcasting ;
Substituição de classe
As três abordagens anteriores acima são usadas para linguagens de tipo fraco; estes geralmente implicam herança e polimorfismo compartilhado por tipos.
Tipos de união (linguagem C/C++)
Permite armazenar tipos de dados de diferentes tamanhos; no entanto, é difícil garantir qual tipo é armazenado em uma união após a recuperação e deve ser seguido cuidadosamente.
Conversão de tipo
Modelos ou genéricos
Garante a reutilização e segurança de tipo; pode ser pensado como uma herança reversa. No entanto, esta abordagem pode exigir a implementação de uma especialização de modelo que é supostamente um processo demorado, uma vez que os tipos diferem nos seus métodos. [3] : 281 

Veja também

Referências

  1. ^ Paul E. Black (ed.), entrada para estrutura de dados no Dicionário de Algoritmos e Estruturas de Dados . Instituto Nacional de Padrões e Tecnologia dos EUA . 15 de dezembro de 2004. Acessado em 4 de outubro de 2011.
  2. ^ Estrutura de dados de entrada na Encyclopædia Britannica (2009) Entrada online acessada em 4 de outubro de 2011.
  3. ^ abcde Budd, Timothy (1997). Uma introdução à programação orientada a objetos (2ª ed.). Reading, Massachusetts: Addison-Wesley. ISBN 0-201-82419-1. OCLC34788238  .

links externos

  • Declaração e inicialização da estrutura de dados do contêiner
Obtido em "https://en.wikipedia.org/w/index.php?title=Container_(abstract_data_type)&oldid=1200437794"