Carregar apresentação
A apresentação está carregando. Por favor, espere
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
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.