Protegendo seu objeto através do TAD
O Tipo Abstrato de Dados (TAD) não é um conceito novo. Os TADs, junto com a própria OO, cresceu a partir da linguagem de programação Simula, introduzida em 1966. Na verdade, os TADs são decididamente não OO; em vez disso, eles são um subconjunto da OO. Entretanto, os TADs apresentam duas características interessantes: abstração e tipo. É essa idéia de tipo que é importante, pois sem ela, você não pode ter um verdadeiro encapsulamento.
O verdadeiro encapsulamento é imposto em nível de linguagem, através de construções internas da linguagem. Qualquer outra forma de encapsulamento é simplesmente um acordo de cavalheiros, que é facilmente malogrado. Os programadores o contornarão porque podem fazer isso!
Novo Termo Um TAD é um conjunto de dados e um conjunto de operações sobre esses dados. Os TADs permitem que você defina novos tipos na linguagem, ocultando dados internos e o estado, atrás de uma interface bem definida. Essa interface apresenta o TAD como uma única unidade atômica.
Os TADs são uma maneira excelente de introduzir encapsulamento, pois eles o liberam de considerar o encapsulamento sem a bagagem extra da herança e do polimorfismo: você pode se concentrar no encapsulamento. Os TADs também permitem que você explore a noção de tipo. Uma vez que o tipo seja entendido, é fácil ver que a OO oferece uma maneira natural de estender uma linguagem, definindo tipos personalizados do usuário.
O que é um tipo?
Quando programar, você criará diversas variáveis e atribuirá valores para elas. Os tipos definem as diferentes espécies de valores que estão disponíveis para seus programas. Você usa tipos para construir seu programa. Exemplos de alguns tipos comuns são integers (inteiros), longs (inteiros longos) e floats (reais). Essas definições de tipo informam exatamente quais espécies de tipos estão disponíveis, o que os tipos fazem e o que você pode fazer com eles.
Usaremos a seguinte definição de tipo:
Novo Termo Os tipos definem as diferentes espécies de valores que você pode usar em seus programas. Um tipo define o domínio a partir do qual seus valores válidos podem ser extraídos. Para inteiros positivos, são os números sem partes fracionárias e que são maiores ou iguais a 0. Para tipos estruturados, a definição é mais complexa. Além do domínio, a definição de tipo inclui quais operações são válidas no tipo e quais são seus resultados.
O tratamento formal de tipo está fora dos objetivos de um livro sobre POO para iniciantes.
Os tipos são unidades atômicas da computação. Isso significa que um tipo é uma unidade independente. Pegue o inteiro, por exemplo. Quando soma dois inteiros, você não pensa sobre a adição de bits individuais; você pensa apenas a respeito da adição de dois números. Mesmo que os bits representem o inteiro, a linguagem de programação apresenta o inteiro apenas como um número para o programador.
Pegue o exemplo Item do Dia 1. A criação da classe Item adiciona um novo tipo em seu vocabulário de programação. Em vez de pensar a respeito de uma id, uma descrição e um preço de produto como entidades separadas, provavelmente regiões desconectadas da memória ou variáveis, você pensa simplesmente em termos de Item. Assim, os tipos permitem representar estruturas complexas em um nível mais simples e mais conceituai. Eles o protegem dos detalhes desnecessários. Isso o libera para trabalhar no nível do problema, em vez de trabalhar no nível da implementação.
Embora seja verdade que um tipo protege o programador dos detalhes subjacentes, os tipos oferecem uma vantagem ainda mais importante. A definição de um tipo protege o tipo do programador. Uma definição de tipo garante que qualquer objeto que interaja com o tipo, o faça de maneira correta, consistente e segura. As restrições impostas por um tipo impedem os objetos de terem uma interação inconsistente, possivelmente destrutiva. A declaração de um tipo impede que o tipo seja usado de maneira não projetada e arbitrária. Uma declaração de tipo garante o uso correto.
Sem uma definição clara das operações permitidas, um tipo poderia interagir com outro tipo da maneira que quisesse. Freqüentemente, tal interação indefinida pode ser destrutiva.
Comentários
Postar um comentário