A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Tipos Abstratos de Dados

Apresentações semelhantes


Apresentação em tema: "Tipos Abstratos de Dados"— Transcrição da apresentação:

1 Tipos Abstratos de Dados
Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática Tipos Abstratos de Dados Paradigmas de Programação Prof. Gláucya Carreiro Boechat

2 Paradigmas de Programação - prof Gláucya Carreiro Boechat
Abstração Concentrar mais em idéias gerais do que em detalhes específicos. Em Análise - concentrar em aspectos essenciais de um problema e ignorar detalhes irrelevantes. Em Programação - distinguir entre “o que” um trecho de programa faz e “como” foi implementado. Sempre que um novo procedimento ou função é inserido no programa, um novo nível de abstração é criado. Paradigmas de Programação prof Gláucya Carreiro Boechat

3 Abstração - Tipos Fundamentais
Abstração de Processo Oferece uma maneira do programa especificar que algum processo deve ser feito, sem oferecer os detalhes de como será feito Todos subprogramas são abstrações de processo Exemplo Ordena_int(lista, comp_lista); Sort_float(array, len); Abstração de Dados Toda Abstração de Dado suas operações são definidas como abstração de processo Paradigmas de Programação prof Gláucya Carreiro Boechat

4 Tipos primitivos: exemplo de abstração
// float: abstração de um número em ponto flutuante float a, b, c, s; // tipo de dados é associado a um domínio de valores b = 1.0; c = 2.0; // tipo de dados é associado a conjunto de operações a = b + c; a+=; c++; // tipo de dados associado a uma representação interna 8 bits, 16 bits, 32 bits ... Paradigmas de Programação prof Gláucya Carreiro Boechat

5 Paradigmas de Programação - prof Gláucya Carreiro Boechat
Modulos Modulos são "containers" sintáticos contendo subprogramas e grupos de dados relacionados logicamente Modularização: processo de projetar os módulos de um programa A compreensão do programa pelos mantenedores seria impossível sem organização modularizada Ponto Crítico: Quando o projeto de um programa estende-se por milhares de linhas, recompilá-lo totalmente a cada atualização do código é absolutamente inviável - daí a necessidade de modularizá-lo Paradigmas de Programação prof Gláucya Carreiro Boechat

6 Paradigmas de Programação - prof Gláucya Carreiro Boechat
Encapsulamento Agrupamento de subprogramas e dados que é compilado separada/independentemente Também chamado de unidade de compilação Muitas vezes são colocados em bibliotecas e postos a disposição para serem reutilizados em outros programas Exemplo: Linguagens que oferecem a capacidade de agrupar subprogramas e dados pode ser colocada em um arquivo, então compilado independentemente C, Fortran 90, Ada, Simula 67, C++ Paradigmas de Programação prof Gláucya Carreiro Boechat

7 Paradigmas de Programação - prof Gláucya Carreiro Boechat
Abstração de Dados Um Tipo Abstrato de Dados (TAD) é um encapsulamento que inclui somente um tipo específico de dado e os subprogramas que fornecem as operações para este tipo Detalhes desnecessários da implementação do tipo podem ser ocultos das unidades fora do encapsulamento que o contém dados operações Paradigmas de Programação prof Gláucya Carreiro Boechat

8 Paradigmas de Programação - prof Gláucya Carreiro Boechat
Abstração de Dados Um objeto é uma variável (instância) de um tipo abstrato de dados, declarada por alguma unidade de programa Programação Orientada a Objetos consiste no uso de objetos no desenvolvimento do software Paradigmas de Programação prof Gláucya Carreiro Boechat

9 Tipos de Dados Abstratos Definidos pelo Usuário
Definição do tipo e as operações sobre objetos do tipo estão contidas numa única unidade sintática Outras unidades de programa podem ter permissão para criar variáveis do tipo definido A representação de objetos do tipo não é visível pelas unidades de programa que usam o tipo Paradigmas de Programação prof Gláucya Carreiro Boechat

10 Tipos de Dados Abstratos Definidos pelo Usuário
As unidades de programa que usam um TAD específico e chamado de Cliente cliente cliente cliente usa TAD Paradigmas de Programação prof Gláucya Carreiro Boechat

11 Paradigmas de Programação - prof Gláucya Carreiro Boechat
Exemplo - TAD - Pilha Operações Abstratas Cria(pilha) Cria e inicializa um objeto na pilha Destroi(pilha) Desloca o armazenamento da pilha Vazia(pilha) Retorna (true) se a pilha estiver vazia Empilha(pilha, elemento) Empilha o elemento no topo da pilha Desempilha(pilha) Remove o elemento do topo da pilha Topo(pilha) Retorna uma copia do topo da pilha Um Cliente do tipo pilha poderia ter uma seqüência de código ... Cria(pilha1); Empilha(pilha1, cor1); If ( !Vazia(pilha) temp = Topo(pilha) Paradigmas de Programação prof Gláucya Carreiro Boechat

12 Paradigmas de Programação - prof Gláucya Carreiro Boechat
TAD SIMULA 67 Primeiras facilidades de linguagem para suporte a TAD Oferece encapsulamento, mas não ocultacao de informacao Forma Sintática Class nome_da_classe begin -- declarações de variáveis da classe -- -- definições de subprogramas da classe – -- seção de código da classe -- end nome_da_classe Paradigmas de Programação prof Gláucya Carreiro Boechat

13 Paradigmas de Programação - prof Gláucya Carreiro Boechat
TAD C++ Os Tipos Abstratos de Dados em C++ são as chamadas classes Variáveis são declaradas como instâncias de classes Classes do C++ são baseadas SIMULA67 struct do C Os dados definidos na classe são os membros de dados Paradigmas de Programação prof Gláucya Carreiro Boechat

14 Paradigmas de Programação - prof Gláucya Carreiro Boechat
Funções Membro Funções-membro São as funções definidas na classe Compartilhadas por todas as instâncias de classe Cada instância tem seu próprio conjunto de membros de dados Pode ter sua definição completa dentro da classe ("inlined") ou apenas seu cabeçalho #define Paradigmas de Programação prof Gláucya Carreiro Boechat

15 Ocultacao da Informacao em C++
Cláusula private: para entidades ocultas na classe Cláusula public: para as entidades visíveis aos clientes. Descreve a interface com objetos da classe Cláusula protected: relacionada com herança Paradigmas de Programação prof Gláucya Carreiro Boechat

16 Paradigmas de Programação - prof Gláucya Carreiro Boechat
Construtores Funções-membro usadas para inicializar os membros de dados de um objeto recém-criado Possue o mesmo nome da classe Pode-se sobrecarregar construtores Não têm tipo de retorno, não usam return Paradigmas de Programação prof Gláucya Carreiro Boechat

17 Paradigmas de Programação - prof Gláucya Carreiro Boechat
Destrutores Implicitamente chamados quando se encerra o tempo de vida de um objeto O destrutor pode conter chamadas delete para desalocar membros de Nome do destrutor: ~ <nome_da_classe> Não têm tipo de retorno, não usam return Paradigmas de Programação prof Gláucya Carreiro Boechat

18 Paradigmas de Programação - prof Gláucya Carreiro Boechat
Exemplo ~pilha( ){ //** um destrutor delete [ ] ptr_pilha; } void Empilha ( int elem) { if (top_ptr = = tam_max) cout << “Erro - pilha cheia\n”; else ptr_pilha[ + + top_ptr ] = elem; void Desempilha( ) { if (top_ptr = = -1) cout << “Erro - pilha vazia\n”; else top_ptr -- ; int Topo { return ( ptr_pilha[top_ptr] ); #include <iostream.h> class pilha { private: int *ptr_pilha; int tam_max; int top_ptr ; public: pilha( ){ //** um construtor ptr_pilha = new int [100]; tam_max = 99; top_ptr = -1; } Paradigmas de Programação prof Gláucya Carreiro Boechat

19 Paradigmas de Programação - prof Gláucya Carreiro Boechat
Exemplo Código no cliente: void main ( ) { int top_one; pilha stk; stk.Empilha(42); stk.Empilha(17); top_one = stk.topo( ); stk.pop( ); ... } Paradigmas de Programação prof Gláucya Carreiro Boechat

20 “Objeto Matriz” x “Objeto Vetor”
Em qual classe essa operação deve ser definida? class Matriz { friend Vetor mult(const Matriz&, const Vetor&); ...} class Vetor { //** a função q usa os objetos Matriz e Vetor Vetor mult(const Matriz& m1, const Vetor& v1){ ..} Todos os membros privados da classe são visiveis a todos os membros da classe amiga Se Matriz e Vetor pudessem ser definidas num único pacote, evitaríamos esta construção pouco natural. Paradigmas de Programação prof Gláucya Carreiro Boechat

21 Paradigmas de Programação - prof Gláucya Carreiro Boechat
TAD JAVA Suporte para tipos abstratos similar a C++ Todos os tipos de dados definidos pelo usuário são classes Todos os subprogramas (métodos) em Java somente podem ser definidos em classes public e private são modificadores anexados às definições de métodos/variáveis Paradigmas de Programação prof Gláucya Carreiro Boechat

22 Paradigmas de Programação - prof Gláucya Carreiro Boechat
Pacotes - JAVA Pacotes podem conter mais de uma classe public e private são os chamados modificadores Os membros sem modificador (e os membros public) de uma classe são visíveis a todas as classes do mesmo pacote (escopo de pacote) Não há, portanto, necessidade de declarações friend explícitas em Java Paradigmas de Programação prof Gláucya Carreiro Boechat

23 Paradigmas de Programação - prof Gláucya Carreiro Boechat
Exemplo public void push ( int elem) { if (top_index = = tam_max) System.out.println(“Erro”); else ref_pilha[ + + top_index ] = elem; } public void pop ( ) { if (top_index = = -1) else --top_index ; public int top { return ( ref_pilha[top_index] ); } \\** fim da classe Pilha import java.io.* class Pilha { private int [ ] ref_pilha; private int tam_max, top_index ; public Pilha( ){//construtor ref_pilha = new int [100]; tam_max = 99; top_index = -1; } Paradigmas de Programação prof Gláucya Carreiro Boechat

24 Paradigmas de Programação - prof Gláucya Carreiro Boechat
Exemplo public class Testa_Pilha { public static void main (String [ ] args) { Pilha p1 = new Pilha( ); p1.push(42); p1.push(29); p1.pop( ); p1.pop( ); // Produz msg de erro ... } Não há destrutor eliminado pela coleta de lixo implícita em Java) Observe o uso de variável de referência em vez de ponteiro Paradigmas de Programação prof Gláucya Carreiro Boechat

25 Classes Parametrizadas em C++
Exemplo: suponha que o método construtor para a classe pilha fosse: pilha (int size ){ ptr_pilha = new int [size]; tam_max = size-1; top_ptr = -1; } No cliente: ... pilha(150) p1; Paradigmas de Programação prof Gláucya Carreiro Boechat

26 Classes genéricas em C++
pilha (int size ){ // construtor sobrecarregado ptr_pilha = new TIPO [size]; tam_max = size-1; top_ptr = -1; } ~pilha( ) { delete ptr_pilha; } void empilhar( TIPO elem) { if (top_ptr = = tam_max) cout << “Erro - pilha cheia\n”; else ptr_pilha[ + + top_ptr ] = elem; TIPO topo { return ( ptr_pilha[top_ptr] ); } } \\** fim da classe pilha #include <iostream.h> template < class TIPO > class pilha { private: TIPO *ptr_pilha; int tam_max; int top_ptr ; public: pilha( ){ //** um construtor ptr_pilha = new TIPO [100]; tam_max = 99; top_ptr = -1; } void desempilha ( ) { top_ptr--; } Paradigmas de Programação prof Gláucya Carreiro Boechat


Carregar ppt "Tipos Abstratos de Dados"

Apresentações semelhantes


Anúncios Google