AULA 3
Introdução
Conceito de abstração Tipo Abstrato de Dados
DEFINIÇÃO DE ABSTRAÇÃO
Ato ou processo de separar qualidades ou
propriedades inatas do objeto físico as quais elas pertencem
Processo de representar um grupo de entidades
através de seus atributos comuns
Abstração é o processo de simplificar algo que
é difícil.
Ao começar a analisar um problema, não devemos
EXEMPLO DE ABSTRAÇÃO
Toda pessoa possui Nome
Data de nascimento Número de identidade
Uma pessoa em específico
José da Silva 12/10/1950 …
EXEMPLO DE ABSTRAÇÃO
Toda variável de uma linguagem de programação
é uma abstração
Representa virtualmente um determinado objeto
que existe
Características:
Nome Valor Tipo
ABSTRAÇÕES EM PROGRAMAÇÃO
Abstração proceduralABSTRAÇÃO PROCEDURAL
Subprogramas: abstrações de processoUm dos conceitos mais antigos e cruciais para a
programação
Historicamente anterior à abstração de dados Permite o reaproveitamento de código já
construído (por você ou por outros programadores)
Evita repetição de código
Separa o programa em partes (blocos) que
possam ser logicamente compreendidos de forma isolada
PROCEDIMENTO EM PASCAL
Trocar dois valores inteirosPROCEDIMENTO EM PASCAL
Trocar dois valores inteirosProcedure Troca (Var Valor_1, Valor_2 : Integer); Var Aux : Integer;
Begin
Aux := Valor_1;
Valor_1 := Valor_2; Valor_2 := Aux;
INTERFACE DE UMA ROTINA
Nome da rotina Parâmetros Quantidade Ordem Tipos Tipo do retorno FuncionalidadeABSTRAÇÃO DE DADOS
Especificar dados sem se preocupar com sua
representação em memória
visão lógica em vez de visão física
Números inteiros, reais, etc.
Como representar um elemento pessoa?
Nome
Data de nascimento Número de identidade
REGISTROS FIXOS
Objeto composto heterogêneo
Pode conter vários outros tipos associados a ele Agrupa dados pertinentes na memória
Type <NomeTipoReg> = Record
<list_identificadores_tipo_1>: tipo_1; ...
<list_identificadores_tipo_N>: tipo_N;
End;
EXEMPLO
Type TBookRec = Record
Title, Author, ISBN : String[25]; Price : Real;
End;
Var myBookRec, yourBookRec : TBookRec; Begin
myBookRec.Title := 'Some Book';
myBookRec.Author := 'Victor John Saliba'; myBookRec.ISBN := '0-12-345678-9';
myBookRec.Price := 25.5; yourBookRec = myBookRec;
REGISTROS PODEM CONTER
REGISTROS COMO CAMPO
Type TDateRec = Record
dd,mm,yy : Integer;
End;
Type TBookRec = Record
Title, Author, ISBN : String[25]; Price : Real;
DatePublication : TDateRec;
End;
Var myBookRec : TBookRec;
...
ESPAÇO EM MEMÓRIA
Registro fixo Soma dos tamanhos dos outros campos
E se nem todos os objetos possuem os mesmos
campos?
Title Author ISBN Price memory size
REGISTROS VARIANTES
Tamanho Soma das partes fixas + maior elemento da parte
variante
Type <NomeTipoReg> = Record
<list_identificadores_tipo_1>: tipo_1; ...
case <identificador_N>: tipo_N of
escalar_1: (declaração de campos 1) ...
End;
EXEMPLO
typeTipoDimensao = record
comprimento, altura, largura: real;
end;
TipoMovel = record
Dimensao : TipoDimensao;
case Tipo : (mesa,armario) of
mesa : (NoCadeiras:Integer);
armario : (NoGavetas,NoPortas: Integer);
EXEMPLO
program ProgMobilia; type
TipoDimensao = record
comprimento, altura, largura: real;
end;
TipoMovel = record
dimensao : TipoDimensao;
case Tipo : (mesa,armario) of
mesa : (NoCadeiras:Integer);
armario : (NoGavetas,NoPortas: Integer);
end; var M1,M2 : TipoMovel; begin M1.Tipo := armario; M1.NoGavetas := 5; M1.dimensao.comprimento := 2.5; end.
ESPAÇO EM MEMÓRIA
Registro variante parte fixa memory size parte variante caso escalar 1 caso escalar 2 caso escalar NTIPOS ABSTRATOS DE DADOS (TAD)
Estruturas especificamente construídas paraarmazenarem certos tipos de dados
Especificam operadores para manipular esses
dados
Combinação de objetos e as operações realizadas
sobre eles
Consiste em 2 partes
Definir API (Application Program Interface)
Definir dados e operações Implementação
Codificação
EXEMPLO: AGENDA TELEFÔNICA
API Quais atributos? Quais operações?
ATRIBUTOS
type TContato = record nome: TNome; telefone: TTel; email: TEmail; data: TData; end; TData = record dd,mm,aaaa: integer; end; TAgenda = recordcontatos: array [1..MAX_CONTATOS] of TContato; numContatos: integer;
end;
TNome = string[50]; TEmail = string[30]; TTel = string[15];
OPERAÇÕES
//Insere a variavel "contato" no final do vetor "agenda" se a agenda nao estiver cheia nem houver outro contato com o mesmo nome.
//Retorna:
// OK se insercao nao falhar
// ERR_CONTATO_EXISTENTE se ja houver outro contato com o mesmo nome na agenda
// ERR_AGENDA_CHEIA se a agenda ja tiver MAX_CONTATOS contatos
//
//OBS: NAO INCLUA NENHUMA OPERACAO DE LEITURA OU ESCRITA NESTA ROTINA
function inserirContato(var agenda: TAgenda; contato:
OPERAÇÕES
//Remove da agenda o contato com nome igual a variavel "nome"
// OK se remoção nao falhar
// ERR_CONTATO_INEXISTENTE se nao houver contato com este nome na agenda
//
//OBS: NAO INCLUA NENHUMA OPERACAO DE LEITURA OU ESCRITA NESTA ROTINA
function removerContato(var agenda: TAgenda; nome:
OPERAÇÕES
//Retorna o indice no vetor do contato com mesmo nome
informado na variavel "nome" ou ERR_CONTATO_INEXISTENTE se o contato nao existir na agenda.
//
//OBS: NAO INCLUA NENHUMA OPERACAO DE LEITURA OU ESCRITA NESTA ROTINA
function buscarContato(var agenda: TAgenda; nome:
Exercício
Implementar um catálogo de computadores
Capacidade para no máximo 100 computadores Dados a armazenar (o aluno deve especificá-los)
Ex: Marca, processador, notebook, memória, HD, Valor etc Operações
Inserir, remover, atualizar, buscar, imprimir dados de um
computador, imprimir dados de todos computadores, ordenar por ano de fabricação
Criar programa principal interativo com menu e opções para cada operação
API deverá ser bem documentada
Implementar as estruturas, funções e
procedimentos de acordo com a API
Nome de variável, rotina, parâmetros etc.
Não utilizar comando de entrada/saída (ex. read,
write) nas seguintes rotinas
Inserir, remover, atualizar, buscar, ordenar por ano
de fabricação/modelo
Não utilizar variável global!!
Exercício
Créditos
Parte do material foi cedido pelo Prof. Raphael