S_LP1_TAD_slides_estudados - Pré P2 - Schneider
16 pág.

S_LP1_TAD_slides_estudados - Pré P2 - Schneider


DisciplinaProgramação I21.440 materiais244.556 seguidores
Pré-visualização1 página
Tipos de Dados Abstratos
Paradigmas de Linguagens de Programação
http://www.ybadoo.com.br/
Paradigmas de Linguagens de Programação
Tipos de Dados Abstratos
Cristiano Lehrer
http://www.ybadoo.com.br/
Tipos de Dados Abstratos
Paradigmas de Linguagens de Programação
http://www.ybadoo.com.br/
Conceito de Abstração
\u25cf O conceito de abstração é fundamental em programação.
\u25cf Quase todas as linguagens suportam abstração de processos, 
através de subprogramas:
\u25cf Exemplo em Java:
\u2013 public void sort(int vetor[])
\u25cf Quase todas as linguagens de programação projetadas desde 1980 
tem suporte à abstração de dados com algum tipo de módulo.
Tipos de Dados Abstratos
Paradigmas de Linguagens de Programação
http://www.ybadoo.com.br/
Encapsulamento
\u25cf Motivação original:
\u25cf Grandes programas tem duas necessidades especiais:
\u2013 Algum tipo de organização, além da simples divisão em subprogramas.
\u2013 Algum tipo de compilação parcial:
\u25cf Unidades de compilação são menores que o programa inteiro.
\u25cf Solução óbvia: 
\u25cf Um agrupamento de subprogramas que são logicamente relacionados 
em uma unidade que pode ser compilada separadamente:
\u2013 São chamados encapsulamento.
Tipos de Dados Abstratos
Paradigmas de Linguagens de Programação
http://www.ybadoo.com.br/
Exemplo de Mecanismos de Encapsulamento
\u25cf Subprogramas aninhados em alguma linguagem similar ao ALGOL:
\u25cf Pascal
\u25cf FORTRAN 77 e C:
\u25cf Arquivos contendo um ou mais subprogramas podem ser compilados 
independentemente.
\u25cf FORTRAN 90, C++, Ada (e outras linguagens contemporâneas):
\u25cf Separadamente em módulos compiláveis.
Tipos de Dados Abstratos
Paradigmas de Linguagens de Programação
http://www.ybadoo.com.br/
Abstração de Dados (1/3)
\u25cf Um tipo abstrato de dados é um tipo de dados definido pelo usuário 
que satisfaz a duas condições:
\u25cf A representação e as operações em objetos do tipo são definidos em 
uma unidade sintática simples:
\u2013 Outras unidades podem também criar objetos daquele tipo.
\u25cf A representação de objetos de tipo é oculto das unidades do programa 
que usam esses objetos, assim as únicas operações possíveis são 
aquelas que provêm da definição do tipo.
Tipos de Dados Abstratos
Paradigmas de Linguagens de Programação
http://www.ybadoo.com.br/
Abstração de Dados (2/3)
\u25cf Vantagens:
\u25cf As mesmas referentes à encapsulamento:
\u2013 Organização do programa, alterabilidade (tudo que estiver associado com 
uma estrutura de dados está junto), e compilação separado.
\u25cf Confiabilidade:
\u2013 Ao esconder as representações dos dados, o código do usuário não pode 
acessar diretamente objetos do tipo. O código do usuário não pode 
depender da representação dos dados, permitindo que tal representação 
seja alterada sem afetar o código do usuário.
Tipos de Dados Abstratos
Paradigmas de Linguagens de Programação
http://www.ybadoo.com.br/
Abstração de Dados (3/3)
\u25cf Tipos Primitivos (built-in) são tipos abstratos de dados:
\u25cf Exemplo: tipo int no C
\u2013 A representação é oculta.
\u2013 Todas as operações são built-in.
\u2013 Programas do usuário podem definir objetos do tipo int.
\u2013 Tipos de dados definidos pelo usuário devem ter as mesmas características 
dos TAD built-in.
Tipos de Dados Abstratos
Paradigmas de Linguagens de Programação
http://www.ybadoo.com.br/
Requisitos da Linguagem para Abstração de Dados
\u25cf Uma unidade sintática na qual a definição de tipo seja encapsulada.
\u25cf Um método de fazer nomes de tipos e cabeçalhos de subprogramas 
visíveis a clientes, ao mesmo tempo que esconde as verdadeiras 
definições.
\u25cf Algumas operações primitivas devem fazer parte do processador da 
linguagem (usualmente apenas atribuições e comparações para 
igualdade desigualdade):
\u25cf Algumas operações são normalmente necessárias, mas devem ser 
definidas por quem especifica o tipo.
\u25cf Ex.: Construtores e destrutores.
Tipos de Dados Abstratos
Paradigmas de Linguagens de Programação
http://www.ybadoo.com.br/
Exemplo (1/2)
\u25cf Tipo de dado abstrato deve ser construído para uma pilha que tem as 
seguintes operações abstratas:
\u25cf create(pilha) \u2192 cria e possivelmente inicializa um objeto da pilha.
\u25cf destroy(pilha) \u2192 desaloca o armazenamento da pilha.
\u25cf empty(pilha) \u2192 uma função predicada (ou booleana) que retorna 
true (verdadeiro) se a pilha especificada estiver vazia, e false (falso) se 
não estiver.
\u25cf push(pilha, elemento) \u2192 empurra o elemento especificado para a 
pilha especificada.
\u25cf pop(pilha) \u2192 remove o elemento do topo da pilha especificada.
\u25cf top(pilha) \u2192 retorna uma cópia do elemento do topo da pilha 
especificada.
Tipos de Dados Abstratos
Paradigmas de Linguagens de Programação
http://www.ybadoo.com.br/
Exemplo (2/2)
\u25cf Um cliente do tipo pilha poderia ter uma sequência de código como a 
seguinte:
 create(STK1);
 push(STK1, COR1);
 push(STK1, COR2);
 if(not empty(STK1))
 then TEMP := top(STK1);
Tipos de Dados Abstratos
Paradigmas de Linguagens de Programação
http://www.ybadoo.com.br/
C++ (1/5)
\u25cf Baseado no tipo struct do C e nas classes do Simula 67.
\u25cf A classe é o dispositivo de encapsulamento.
\u25cf Todas as instâncias de uma classes compartilham uma só cópia das 
funções-membro.
\u25cf Cada instância de uma classe possui sua própria cópia dos membros 
de dados.
\u25cf Instâncias podem ser estáticas, dinâmicas na pilha ou dinâmicas no 
heap.
Tipos de Dados Abstratos
Paradigmas de Linguagens de Programação
http://www.ybadoo.com.br/
C++ (2/5)
\u25cf Ocultamento da informação:
\u25cf Cláusulas private para entidades ocultas.
\u25cf Cláusulas public para entidades da interface.
\u25cf Cláusulas protected para herança.
Tipos de Dados Abstratos
Paradigmas de Linguagens de Programação
http://www.ybadoo.com.br/
C++ (3/5)
\u25cf Construtores:
\u25cf Funções para inicializar os membros de dados das instâncias (não 
criam os objetos).
\u25cf Podem também fazer alocação de armazenamento se parte do objeto é 
dinâmico no heap.
\u25cf Implicitamente chamados quando uma instância é criada.
\u25cf Podem ser chamados explicitamente.
\u25cf O nome é o mesmo do nome da classe.
Tipos de Dados Abstratos
Paradigmas de Linguagens de Programação
http://www.ybadoo.com.br/
C++ (4/5)
\u25cf Destrutores:
\u25cf Funções para limpeza após uma instância ser destruída.
\u25cf Usualmente apenas retomada de espaço de armazenamento no heap.
\u25cf Implicitamente chamados quando o tempo de vida do objeto acaba.
\u25cf Podem ser chamados explicitamente.
\u25cf Nome é o mesmo do nome da classe, precedido de um til (~).
Tipos de Dados Abstratos
Paradigmas de Linguagens de Programação
http://www.ybadoo.com.br/
C++ (5/5)
\u25cf Funções ou classes friend:
\u25cf Provêm acesso a membros privados a algumas unidades ou funções 
não relacionadas (necessário em C++).
\u25cf Avaliação do suporte do C++ a TAD:
\u25cf Classes são similares a pacotes do Ada ao prover TAD.
\u25cf Diferença: pacotes são encapsulamento, enquanto que classes são 
tipos.
Tipos de Dados Abstratos
Paradigmas de Linguagens de Programação
http://www.ybadoo.com.br/
Java
\u25cf Similar ao C++, exceto que:
\u25cf Todos os tipos definidos pelo usuário são classes.
\u25cf Todos os objetos são alocados no heap e acessados através de 
variáveis de referência.
\u25cf Entidades individuais nas classes tem modificadores do controle de 
acesso (private ou public), ao invés de cláusulas.
\u25cf Java possui um segundo mecanismo de scoping, o package score, 
que pode ser usado no lugar de friends.
\u25cf Todas as entidades em todas as classes num pacote que não tem 
acesso aos modificadores do controle de acesso, são visíveis 
através do pacote.
	Slide 1
	Slide 2
	Slide 3
	Slide 4
	Slide 5
	Slide 6
	Slide 7
	Slide 8
	Slide 9
	Slide 10
	Slide 11
	Slide 12
	Slide 13
	Slide 14
	Slide 15
	Slide 16