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

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

Tipos Abstratos de Dados Paradigmas de Programação Prof. Gláucya Carreiro Boechat Universidade Federal Rural de Pernambuco Departamento.

Apresentações semelhantes


Apresentação em tema: "Tipos Abstratos de Dados Paradigmas de Programação Prof. Gláucya Carreiro Boechat Universidade Federal Rural de Pernambuco Departamento."— Transcrição da apresentação:

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

2 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 2

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 3

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 4

5 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 5

6 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 6

7 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 Paradigmas de Programação - prof Gláucya Carreiro Boechat 7 dados operações

8 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 8

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 9

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

11 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 11

12 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 12

13 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 13

14 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 14

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 15

16 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 16

17 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: ~ Não têm tipo de retorno, não usam return Paradigmas de Programação - prof Gláucya Carreiro Boechat 17

18 Exemplo #include 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; } ~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] ); } Paradigmas de Programação - prof Gláucya Carreiro Boechat 18

19 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 19

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 { friend Vetor mult(const Matriz&, const 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 20

21 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 21

22 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 22

23 Exemplo 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; } 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) System.out.println(“Erro”); else --top_index ; } public int top { return ( ref_pilha[top_index] ); } } \\** fim da classe Pilha Paradigmas de Programação - prof Gláucya Carreiro Boechat 23

24 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 24

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 25

26 Classes genéricas em C++ #include template 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--; } 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 Paradigmas de Programação - prof Gláucya Carreiro Boechat 26


Carregar ppt "Tipos Abstratos de Dados Paradigmas de Programação Prof. Gláucya Carreiro Boechat Universidade Federal Rural de Pernambuco Departamento."

Apresentações semelhantes


Anúncios Google