Escolar Documentos
Profissional Documentos
Cultura Documentos
TADs
Maio de 2021
Abstração
q Abstração é um modo de pensar no qual concentra-se
na ideia e não nas manifestações específicas desta
ideia.
Pessoa
Pessoa
Tipos de Abstração
1. FUNÇÃO:
q Conjunto encapsulado de declarações e comandos que calcula um valor e
possivelmente causa um efeito colateral no ambiente.
2. PROCEDIMENTO
q Conjunto encapsulado de declarações e comandos que deve causar um
efeito colateral no ambiente.
3. ABSTRAÇÃO DE DADOS
q Estrutura de dados definida pelas suas operações
q Representação encapsulada.
4. TIPO ABSTRATO DE DADOS
q Tipo definido pelas suas operações.
q Representação encapsulada.
5. TIPO ABSTRATO DE DADOS PARAMETRIZADO
q Tipo definido pelas suas operações.
q Representação parametrizada e encapsulada.
...Lacuna Semântica
q Problema:
Implementar um programa para ler, somar dois valores
inteiros no intervalo [-32.768, 32.767] e imprimir resultado.
q Análise:
q Os valores a serem operados podem ser representados
por 16 bits em forma de complemento de 2.
q Objetos que devem ser modelados pelo software são
três valores inteiros.
q Na solução I supõe-se que sua linguagem de
programação possua somente o tipo de dados Boolean,
com as operações and, or e not.
q Na solução II supõe-se disponível o tipo integer
@Roberto S. Bigonha e Mariza A. S. Bigonha 2021 Tipos Abstratos de Dados 8
Gap Semântico: Exemplo
SOLUÇÃO I: Linguagem com apenas booleanos e sem arranjos
program LacunaGrande;
var
x0,x1,x2,x3,x4,x5,x6,x7,x8,x9 ,x10,x11,x12,x13,x14,x15:Boolean;
c : Boolean;
begin
read(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15);
read(y0,y1,y2,y3,y4,y5,y6,y7,y8,y9,y10, y11,y12,y13,y14,y15);
c := false;
@Roberto S. Bigonha e Mariza A. S. Bigonha 2021 Tipos Abstratos de Dados 9
t14 := (not x14) and (not y14) and (c) or (not x14) and (y14) and (not c)
or (x14) and (not y14) and (not c) or (x14) and (y14) and (c);
t13 := (not x13) and (not y13) and (c) or (not x13) and (y13) and (not c)
or (x13) and (not y13) and (not c) or (x13) and (y13) and (c);
t1 := (not x1) and (not y1) and (c) or not x1) and (y1) and (not c)
or
(x1) and (not y1) and (not c) or (x1) and (y1) and (c);
t0 :=(not x0) and (not y0) and (c) or (not x0) and (y0) and (not c)
or (x0) and (not y0) and (not c) or (x0) and (y0) and (c);
println(t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15);
end.
@Roberto S. Bigonha e Mariza A. S. Bigonha 2021 Tipos Abstratos de Dados 11
program LacunaPequena;
var x : integer;
y : integer;
t : integer;
begin
read(x);
read(y);
t := x + y;
println(t)
end.
EXEMPLOS DE
IMPLEMENTAÇÃO DE
CLASSES TAD
… Implementação
q O mecanismo presente em quase todas as LPs para criar
estruturas de dados mais elaboradas é o de composição
de estruturas menores, formando, recursivamente,
coleções de dados homogêneos ou tuplas de elementos
heterogêneos, conhecidos como fichas de dados.
q Exemplo:
Operações de PilhadeInteiros
Topo de p1 = 9, top de p2 = -1
Topo de p1 = 0
Topo de p1 = 8, top de p2 = 0
Topo de p1 = 1
Topo de p1 = 7, top de p2 = 1
Topo de p1 = 2
Topo de p1 = 6, top de p2 = 2
Topo de p1 = 3
Topo de p1 = 5, top de p2 = 3
Topo de p1 = 4
Topo de p1 = 4, top de p2 = 4
Topo de p1 = 5
Topo de p1 = 3, top de p2 = 5
Topo de p1 = 6
Topo de p1 = 2, top de p2 = 6
Topo de p1 = 7
Topo de p1 = 1, top de p2 = 7
Topo de p1 = 8
Topo de p1 = 0, top de p2 = 8
Topo de p1 = 9
Topo de p1 = -1, top de p2 = 9
@Roberto S. Bigonha e Mariza A.S.Bigonha 2021 Tipos Abstratos de Dados 30
ADT PilhaDeInteiros
Transfere de p2 para out: 0 1 2 3 4 5 6 7 8 9
Empilha 10 em p3:
Desempilha 10 de p3:
Acabou bem
ADT PilhaDeObjetos
class PilhaDeObjetos1 {
private static final int FUNDO = -1;
private int Ultimo, top = Fundo; private Object[ ] item;
public PilhaDeObjetos1(int MaxTam) {
this.Ultimo = MaxTam -1 ; item = new Object[MaxTam];
}
public void push(Object v) throws Ex_Max {
if (top == Ultimo) throw new Ex_Max(CS.ESTOURO);
item[++top]= v;
}
public Object pop( ) throws Ex_Min {
if(vazio( )) throw new Ex_Min(CS.EMFALTA);
return item[top--];
}
public boolean vazio( ) { return (top == FUNDO) }
}
@Roberto S. Bigonha e Mariza A.S.Bigonha 2021 Tipos Abstratos de Dados 32
ADT PilhaDeObjetos
class PilhaDeObjetos2 {
private static class Elemento {
Elemento link; Object info;
Elemento( Object info ) { this.info = info; }
}
private Elemento item; private Elemento topo;
public void push( Object v ) throws ExMax {
try{ Elemento novo = new Elemento( v ); }
catch( Exception e ) { throw new ExMax( Estouro ); }
novo.link = topo; topo = novo;
}
public Object pop( ) throws ExMin {
Object info;
if( vazio( ) ) throw new ExMin(EmFalta);
info = top.info; top = top.link; return info;
}
public boolean vazio( ) { return ( topo == null ); }
}
Tipos Parametrizados
Tipos Parametrizados
q A classe genérica PilhaSequencial<T> implementa o tipo abstrato
Pilha<T> via arranjo, cujo tamanho é definido pelo usuário por meio
de sua função construtora.
public class PilhaSequencial<T> implements Pilha<T> {
private int ultimo, topo = -1;
private T[ ] itens;
public PilhaSequencial( int max ) {
if ( max < 1 ) max = 1;
itens = ( T[ ] ) new Object[ max ];
ultimo = max – 1; }
public void empilhe( T v ) throws FaltaEspaço {
if ( topo == ultimo ) throw FaltaEspaço( );
itens[ ++topo ] = v; }
public T desempilhe() throws FaltaElemento {
if ( vazia( ) ) throw new FaltaElemento();
return itens[topo--]; }
public boolean vazia( ) {
return ( topo == -1 ) ; } }
…Tipos Parametrizados
A separação da interface da implementação facilita a criação
de outra implementação de abstrato Pilha<T> por meio da
classe genérica PilhaEncadeada<T>
…Tipos Parametrizados
TesteDePilhas produz o mesmo resultado que
TesteDePilhaSequencial usa o tipo PilhaEncadeada para
implementar a pilha de elementos do tipo Double
1 public class TesteDePilhas {
2 public static void main( String[ ] args ) {
3 Pilha <Integer > p = new PilhaSequencial < Integer > ( 20 );
4 Pilha < Double > q = new PilhaEncadeada < Double > ( 10 );
5 int a, x[ ] = { 1, 2, 3, 4, 5, 6 };
6 double b, y[ ] = { 1.0, 2.0, 3.0, 4.0, 5.0 };
7 for( int i : x ) p.empilhe( i );
8 for( double i : y ) q.empilhe( i );
9 System.out.println( "Topo de q = " + q.desempilhe( ) );
10 System.out.print( "Pilha p:” );
11 while( !p.vazia( ) ) { a = p.desempilhe( ); System.out.print(" " + a); }
12 }
13 }
…Conclusão
q Abstração
§ foco no relevante enquanto ignoram-se detalhes de
implementação
q Modularidade
§ divisão de um problema em subproblemas
independentes
q Separação de interesses
§ conceitos relacionados devem ser agrupados em
módulos, evitando seu espalhamento ao longo do
código
@Roberto Bigonha,Mariza Bigonha 2021 Tipos Abstratos de Dados 42
FIM