Você está na página 1de 24

Universidade Federal do Rio Grande do Norte

Instituto Metrópole Digital


IMD0030 - Linguagens de Programação I

TIPOS ABSTRATOS DE DADOS


MODULARIZAÇÃO
APLICAÇÕES EM LISTAS

Antonino Feitosa
antonino_feitosa@yahoo.com.br
TIPOS ABSTRATOS DE DADOS

 Modelagem dos elementos envolvidos no problema


especificando o modo como eles se relacionam e como podem
ser manipulados
 Não determina como eles devem ser implementados

 É formado por um conjunto de valores e um conjunto de


operações que podem ser aplicados a esses valores
TIPOS ABSTRATOS DE DADOS

 Algoritmos são projetados considerando o tipos abstratos de


dados e implementados de acordo com os tipos e operações
disponíveis numa linguagem de programação

 Para representação de um tipo abstrato de dado numa


linguagem de programação, emprega-se uma estrutura de dados
TIPOS ABSTRATOS DE DADOS

 Permite uma melhor compreensão dos algoritmos


 Torna a programação mais fácil permitindo a representação de
programas mais complexos
 Permite resuabilidade dos tipos abstratos de dados
implementados
 Não há garantias que a implementações irá respeitar as regras
de operações definidas para o tipo abstrato de dado
TIPOS ABSTRATOS DE DADOS: TIPOS COMPOSTOS

 Tipos abstratos de dados Exemplo 1 – Estruturas

formados pela composição de struct {


int dia;
outros tipos int mes;
 Na linguagem C/C++ podem int ano;

ser modelados através de } x;

estruturas e classes x.dia = 10;


x.mes = 1;
x.ano = 2000;
TIPOS ABSTRATOS DE DADOS: TIPOS COMPOSTOS
Exemplo 2 – Estruturas com Nomes Exemplo 3 - Typeof
struct Data {
int dia; typedef struct Data data;
int mes;
int ano; data x;
};
int duração(data ini, data fim);
struct Data x;
TIPOS ABSTRATOS DE DADOS: FUNÇÕES E ESTRUTURAS EM C/C++

 Suporta passagem e retorno Exemplo 4 – Passagem por Valor

por valor
typedef struct Data data;
 Subtipos devem ser declarados
de modo estático data proxima(data ini)
 Suporta passagem e retorno
por referência data * r_proxima(data * ini)
TIPOS ABSTRATOS DE DADOS: FUNÇÕES E ESTRUTURAS EM C/C++

 No exemplo 5, "elementos" é Exemplo 5 – Passagem por Valor

um ponteiro que deve


typedef struct {
armazenar um vetor de
int * elementos;
inteiros
int capacidade;
 Passagem por valor não irá int numElementos;
alocar ou copiar o ponteiro } Lista;
DÚVIDAS
ALOCAÇÃO DINÂMICA DE MEMÓRIA

 Memória é um recurso limitado e compartilhado


 Todo dado de programa (variável) é armazenado em memória
 Memória alocada deve ser liberada
 Alocação de memória durante a execução do programa de
acordo com suas necessidades
 Quantidade só é conhecida durante a execução
 Estruturas de dados de capacidade ilimitada
ALOCAÇÃO DINÂMICA DE MEMÓRIA
Exemplo 6 – Alocação Dinâmica Exemplo 6 – Alocação Dinâmica
#include <cstdlib>
#include <iostream> cin >> vet[0];
using namespace std; vet[1] = 3;
int main(){ cout << vet[1];
int*x =(int*)malloc(sizeof(int));
free(vet);
int * vet = vet = NULL;
(int*) malloc(5 * sizeof(int)); return 0;

if(vet == NULL){ return 1; } }


ALOCAÇÃO DINÂMICA DE MEMÓRIA

Exemplo 7 – Alocação Dinâmica de Matrizes


int ** matriz = (int**) malloc(linhas * sizeof(int*));
for(int i=0;i<linhas;i++)
matriz[i] = (int*) malloc(colunas * sizeof(int));

for(int i=0;i<linhas;i++)
free(matriz[i]);
free(matriz);
matriz = NULL;
DÚVIDAS
MODULARIZAÇÃO

 Consiste em separar as funcionalidades de um programa em


módulos independentes
 Cada módulo deve conter todos os elementos necessários para
execução da funcionalidade especificada
 Um módulo deve expressar uma interface que pode ser
detectada por outros módulos
 Permite alterações na implementação ou mesmo substituição por
outro módulo desde que tenha a mesma interface
MODULARIZAÇÃO: COMPILAÇÃO DE MÓDULOS EM C++

 Módulos são distribuídos em um ou mais arquivos


 Interfaces são representadas por arquivos de extensão
.hpp (header files)
 Uso de diretivas de compilação para evitar redefinição
 Especificação de tipos de dados e assinaturas de funções
 Implementações são representadas por arquivos de
extensão . cpp
MODULARIZAÇÃO: COMPILAÇÃO DE MÓDULOS EM C++

 Arquivos de cabeçalho (.hpp) Exemplo 8: Diretivas

devem conter:
// módulo x
 Diretivas de compilação #ifndef X_H
 Definições de tipos #define X_H

 Definições de variáveis globais


// definições
 Assinaturas de funções
 Definições de escopo #endif // X_H
MODULARIZAÇÃO: COMPILAÇÃO DE MÓDULOS EM C++
Exemplo 9 – op.hpp Exemplo 10 – op.cpp

#ifndef OP_H #include "op.hpp"


#define OP_H
int soma(int x, int y){
int soma(int x, int y); return x + y;
}

#endif
Exemplo 11 – main.cpp Exemplo 12 - Compilação
>>g++ -c main.cpp
#include "op.hpp" >>g++ -c op.cpp
int main(){ >>g++ -o main main.o op.o
int x = soma(3 , 10);
}

>>g++ -o main main.cpp op.cpp


MODULARIZAÇÃO: DEFINIÇÕES DE ESCOPO EM C++
Exemplo 13 – op.hpp Exemplo 14 – op.cpp
#include "op.hpp"
#ifndef OP_H namespace op_module {
#define OP_H int soma(int x, int y){
namespace op_module { return x + y;
}
int soma(int x, int y);
}
}
#endif
//op_module::soma(4,2);
//using namespace op_module;
DÚVIDAS
LISTAS

 Conjunto de dados organizados de modo linear


 Tipo abstrato de dados:
 Inserção numa determinada posição
 Valor armazenado numa posição
 Remover elemento de uma posição
 Tamanho da lista (quantidade de elementos armazenados)
LISTAS

FIGURA 1: DISPONÍVEL EM <HTTPS://WWW.GEEKSFORGEEKS.ORG/C-PROGRAM-TO-INSERT-AN-ELEMENT-IN-AN-ARRAY/>


ACESSADO EM SET 2020.
DÚVIDAS
Exercícios

Você também pode gostar