Tipos Abstratos de Dados
Conforme a demanda do usuário por sistemas maiores e mais complexos aumenta, fica evidente a necessidade que temos de mecanismos para expressar conceitos do mundo real. Nas primeiras linguagens de programação só era possÃvel utilizar variáveis de tipos primitivos tais como números inteiros ou reais, e estruturar informação em vetores, para a realização de cálculos essa é uma forma suficiente de representação de informação. Com o aumenta da complexidade uma das alternativas era utilizar um conjunto de vetores de tipos diferentes onde cada Ãndice representaria a referência entre todos eles “compondo” assim um conceito mais complexo.
Atualmente contamos com mecanismos mais adequados para esse tipo de representação, as linguagens estruturadas oferecem uma forma de compor novos tipos, criados pelo usuário, utilizando os tipos primitivos e/ou outros tipos do usuário. Na linguagem C esse mecanismo é o struct, que cria uma “estrutura” composta de outras variáveis, assim podemos criar um struct categoria composta de um inteiro código e um vetor de caracteres nome. Chamamos esses novos tipos definidos pelo usuário de Tipos Abstratos de Dados porque estão relacionados a conceitos mais abstratos do que os conceitos primitivos oferecidos pela própria linguagem de programação. Nas linguagens orientadas a objetos utilizamos classes para representar os conceitos que modelamos para o sistema então as classes são as definições dos Tipos Abstratos de Dados.
A relação com o conceito de “tipo” está no fato de que a partir da definição criada pelo usuário podemos declarar variáveis que representarão durante o processamento os dados que queremos associar com as representações que damos a modelagem do sistema.
No entanto existem diferenças importantes entre a forma de trabalhar com as linguagens estruturadas e as orientadas a objetos. Na orientação a objetos além de estruturar as variáveis que compõe o conceito (do mundo real) podemos incluir métodos para tratar essas variáveis e/ou para expor outros “comportamentos,” assim quando usamos um objeto (instância da classe em tempo de execução) ele pode executar certas funcionalidades ou serviços de acordo com as responsabilidades que se referem ao conceito no mundo real. Apenas para exemplificar, uma classe LancamentoMensal, não deveria ter um método “imprimir” porque não faz parte das responsabilidades associadas a esse conceito. Por outro lado esta classe poderia ter um método “calcularTotal.”


[...] Isso acontece e fica claro quando pensamos na programação estruturada de forma comparada com a programação orientada a objetos. Essas duas formas de visão (ou paradigmas) não são contrárias entre si, apenas fornecem métodos de modelagem diferentes. Costumo dizer que a mudança está no foco, enquanto a programação estruturada trabalha com o foco nas funções do sistema, a programação orientada a objetos tem o foco nos dados, ou mais precisamente nos tipos abstratos de dados e isso é uma diferença fundamental. [...]
[...] Auto-completar – essa é a característica preferida de todos, de acordo com o que vamos digitando o ambiente vai identificando quais as possibilidade do código e pode oferecer uma lista de opções, isso é especialmente interessante para programação orientada a objetos em que queremos lembrar um método de algum objeto (que está sendo manipulado através de uma variável,) mas também é muito útil em linguagens estruturadas, pois permite acessar campos de tipos abstratos de dados e acessar funções. Conforme vamos digitando as opções vão se restringindo até que podemos escolher a que nos serve. [...]
[...] a criar e usar tipos abstratos de dados – o programador pode criar seus próprios tipos de dados para organizar melhor seus programas [...]