Algoritmos e Estruturas de Dados I
Tipos Abstratos de Dados
Prof. Tiago Eugenio de [email protected]
www.tiagodemelo.info
2/87
Observações
3/87
Observações
● O conteúdo dessa aula é parcialmente proveniente do Capítulo 1 do livro “Data Structures and Algorithms using Python”.
4/87
Observações
● O conteúdo dessa aula é parcialmente proveniente do Capítulo 1 do livro “Data Structures and Algorithms using Python”.
● As palavras com a fonte Courier indicam uma palavra-reservada da linguagem de programação.
5/87
Introdução
6/87
Introdução
● As linguagens de programação oferecem tipos de dados como uma parte integrante da linguagem.
7/87
Introdução
● As linguagens de programação oferecem tipos de dados como uma parte integrante da linguagem.– Estes tipos de dados são conhecidos como tipo
primitivos de dados.
8/87
Introdução
● As linguagens de programação oferecem tipos de dados como uma parte integrante da linguagem.– Estes tipos de dados são conhecidos como tipo
primitivos de dados.
– Esses tipos podem ser: simples ou complexos.
9/87
Introdução
● As linguagens de programação oferecem tipos de dados como uma parte integrante da linguagem.– Estes tipos de dados são conhecidos como tipo
primitivos de dados.
– Esses tipos podem ser: simples ou complexos.
– Inteiros e reais são tipos simples.
10/87
Introdução
● As linguagens de programação oferecem tipos de dados como uma parte integrante da linguagem.– Estes tipos de dados são conhecidos como tipo
primitivos de dados.
– Esses tipos podem ser: simples ou complexos.
– Inteiros e reais são tipos simples.
– Os tipos complexos são construídos a partir de múltiplos tipos primitivos ou mesmo com outros tipos de dados complexos.
11/87
Introdução
● As linguagens de programação oferecem tipos de dados como uma parte integrante da linguagem.– Estes tipos de dados são conhecidos como tipo
primitivos de dados.
– Esses tipos podem ser: simples ou complexos.
– Inteiros e reais são tipos simples.
– Os tipos complexos são construídos a partir de múltiplos tipos primitivos ou mesmo com outros tipos de dados complexos.
– Em Python, objetos, strings, listas e dicionários são exemplos de tipos complexos.
12/87
Introdução (cont.)
13/87
Introdução (cont.)
● Muitas vezes, os tipos primitivos oferecidos pelas linguanges de programação não são suficientes para resolver problemas maiores ou mais complexos.
14/87
Introdução (cont.)
● Muitas vezes, os tipos primitivos oferecidos pelas linguanges de programação não são suficientes para resolver problemas maiores ou mais complexos.
● Portanto, a maioria das linguagens de programação oferece recursos para que os programadores criem os seus próprios tipos de dados.
15/87
Abstração
● É um mecanismo para separar as propriedades de um objeto e restringir o foco para o que seja realmente relevante.
16/87
Abstração
● Exemplo de diversos níveis de abstração com aritmética de inteiros:
17/87
Tipo Abstrato de Dados (TAD)
18/87
Tipo Abstrato de Dados (TAD)
● Ou Abstract Data Type (ADT).
19/87
Tipo Abstrato de Dados (TAD)
● Ou Abstract Data Type (ADT).● É um tipo de dados definido pelo programador
que especifica um conjunto de valores de dados e uma coleção bem definida de operações que podem ser executadas nesses valores.
20/87
Tipo Abstrato de Dados (TAD)
● Ou Abstract Data Type (ADT).● É um tipo de dados definido pelo programador
que especifica um conjunto de valores de dados e uma coleção bem definida de operações que podem ser executadas nesses valores.
● TAD são definidos de maneira independente da sua implementação.
21/87
Tipo Abstrato de Dados (TAD)
● Ou Abstract Data Type (ADT).● É um tipo de dados definido pelo programador que
especifica um conjunto de valores de dados e uma coleção bem definida de operações que podem ser executadas nesses valores.
● TAD são definidos de maneira independente da sua implementação.
● A interação com um TAD é realizado através da sua interface ou pelo seu conjunto de funções.
22/87
Tipo Abstrato de Dados (TAD)
● Ou Abstract Data Type (ADT).● É um tipo de dados definido pelo programador que especifica
um conjunto de valores de dados e uma coleção bem definida de operações que podem ser executadas nesses valores.
● TAD são definidos de maneira independente da sua implementação.
● A interação com um TAD é realizado através da sua interface ou pelo seu conjunto de funções.
● A consequência disso é o ocultamento de informação (information hiding).
23/87
Tipo Abstrato de Dados (cont.)
● Um TAD é como uma caixa-preta.
24/87
Tipo Abstrato de Dados (cont.)
25/87
Tipo Abstrato de Dados (cont.)
● O conjunto de operações pode ser agrupado em quatro categorias:
26/87
Tipo Abstrato de Dados (cont.)
● O conjunto de operações pode ser agrupado em quatro categorias:– Construtores (Constructor): criam e inicializam
novas instâncias do TAD.
27/87
Tipo Abstrato de Dados (cont.)
● O conjunto de operações pode ser agrupado em quatro categorias:– Construtores (Constructor): criam e inicializam
novas instâncias do TAD.
– Acessores (Accessor): Retorna os dados contidos em uma instância sem modificá-la.
28/87
Tipo Abstrato de Dados (cont.)
● O conjunto de operações pode ser agrupado em quatro categorias:– Construtores (Constructor): criam e inicializam
novas instâncias do TAD.
– Acessores (Accessor): Retorna os dados contidos em uma instância sem modificá-la.
– Modificadores (Mutator): Modifica o conteúdo de uma instância de um TAD.
29/87
Tipo Abstrato de Dados (cont.)
● O conjunto de operações pode ser agrupado em quatro categorias:– Construtores (Constructor): criam e inicializam
novas instâncias do TAD.
– Acessores (Accessor): Retorna os dados contidos em uma instância sem modificá-la.
– Modificadores (Mutator): Modifica o conteúdo de uma instância de um TAD.
– Iteradores: Processa os dados individuais dos componentes.
30/87
Python Constructor
31/87
Python Constructor
● Em Python, um construtor é um método especial usado para inicializar as instâncias de uma classe.
32/87
Python Constructor
● Em Python, um construtor é um método especial usado para inicializar as instâncias de uma classe.
● Os construtores podem ser de dois tipos:
33/87
Python Constructor
● Em Python, um construtor é um método especial usado para inicializar as instâncias de uma classe.
● Os construtores podem ser de dois tipos:– Construtor parametrizado.
34/87
Python Constructor
● Em Python, um construtor é um método especial usado para inicializar as instâncias de uma classe.
● Os construtores podem ser de dois tipos:– Construtor parametrizado.
– Construtor não-parametrizado.
35/87
Python Constructor
● Em Python, um construtor é um método especial usado para inicializar as instâncias de uma classe.
● Os construtores podem ser de dois tipos:– Construtor parametrizado.
– Construtor não-parametrizado.
● O construtor é executado quando nós criamos o objeto de uma classe.
36/87
Python Constructor
● Em Python, um construtor é um método especial usado para inicializar as instâncias de uma classe.
● Os construtores podem ser de dois tipos:– Construtor parametrizado.
– Construtor não-parametrizado.
● O construtor é executado quando nós criamos o objeto de uma classe.
● Os construtores também verificam se existem os recursos necessários para que o objeto execute qualquer das suas tarefas.
37/87
Python Construtor
38/87
Python Construtor
● O método __init__ simula o construtor de uma classe.
39/87
Python Construtor
● O método __init__ simula o construtor de uma classe.
● Esse método é chamado quando a classe é instanciada.
40/87
Python Construtor
● O método __init__ simula o construtor de uma classe.
● Esse método é chamado quando a classe é instanciada.
● Esse método é comumente usado para inicializar os atributos da classe.
41/87
Python Construtor
● O método __init__ simula o construtor de uma classe.
● Esse método é chamado quando a classe é instanciada.
● Esse método é comumente usado para inicializar os atributos da classe.
● Toda classe deve ter um construtor, mesmo se ele simplesmente confiar no construtor padrão (default).
42/87
Python Construtor
● Exemplo:
43/87
Python Construtor
● Exemplo (saída):
44/87
Python Construtor
45/87
Python Construtor
● Exemplo: contando o número de objetos de uma classe.
46/87
Python Construtor
● Exemplo: contando o número de objetos de uma classe.
47/87
Python Construtor
● Exemplo: contando o número de objetos de uma classe.
48/87
Python Construtor
49/87
Python Construtor
● Exemplo (não-parametrizado)
50/87
Python Construtor
● Exemplo (não-parametrizado)
51/87
Python Construtor
● Exemplo (não-parametrizado)
52/87
Python Construtor
53/87
Python Construtor
● Exemplo (parametrizado)
54/87
Python Construtor
● Exemplo (parametrizado)
55/87
Python Construtor
● Exemplo (parametrizado)
56/87
Python In-built class functions
57/87
Python In-built class functions
58/87
Python In-built class functions
59/87
Python In-built class functions
● Saída (código anterior):
60/87
Python built-in class attributes
61/87
Python built-in class attributes
62/87
Python built-in class attributes
63/87
Python built-in class attributes
64/87
Python Accessor
65/87
Python Accessor
● Um método accessor retorna a informação sobre o objeto, mas não muda o estado ou o objeto.
66/87
Python Accessor
● Um método accessor retorna a informação sobre o objeto, mas não muda o estado ou o objeto.
● Esse método normalmente é usado com a palavra get.
67/87
Python Mutator
68/87
Python Mutator
● Um método mutator é uma função que modifica a variável interna de alguma maneira.
69/87
Python Mutator
● Um método mutator é uma função que modifica a variável interna de alguma maneira.
● A mais simples forma de um mutator é atribuir um novo valor para uma variável.
70/87
Python Mutator
● Um método mutator é uma função que modifica a variável interna de alguma maneira.
● A mais simples forma de um mutator é atribuir um novo valor para uma variável.
● Esse método normalmente é usado com a palavra set.
71/87
Python Accessor/Mutator
72/87
Python Accessor/Mutator
73/87
Python Accessor/Mutator
42
74/87
Python Accessor/Mutator
42
4758
75/87
Python Accessor/Mutator
42
4758
encapsulamento
76/87
Python Accessor/Mutator
77/87
Python Accessor/Mutator
78/87
Python Accessor/Mutator
encapsulamento?
79/87
Iterators
80/87
Iterators
● Um iterator pode ser visualizado como um ponteiro para um container, isto é, uma estrutura do tipo lista que pode percorrer sobre todos os elementos deste container.
81/87
Iterators
● Um iterator pode ser visualizado como um ponteiro para um container, isto é, uma estrutura do tipo lista que pode percorrer sobre todos os elementos deste container.
● Exemplo:
cities = ["Paris","Berlin","Frankfurt"]
for location in cities:
print("location: " + location)
82/87
Tipo Abstrato de Dados (cont.)
83/87
Tipo Abstrato de Dados (cont.)
● Existem algumas vantagens no uso de TADs:
84/87
Tipo Abstrato de Dados (cont.)
● Existem algumas vantagens no uso de TADs:– Foco na resolução do problema ao invés de se
preocupar com detalhes de implementação.
85/87
Tipo Abstrato de Dados (cont.)
● Existem algumas vantagens no uso de TADs:– Foco na resolução do problema ao invés de se
preocupar com detalhes de implementação.
– A implementação do TAD pode ser modificada sem ter a necessidade de modificar o programa que utiliza o TAD.
86/87
Tipo Abstrato de Dados (cont.)
● Existem algumas vantagens no uso de TADs:– Foco na resolução do problema ao invés de se
preocupar com detalhes de implementação.
– A implementação do TAD pode ser modificada sem ter a necessidade de modificar o programa que utiliza o TAD.
– É mais fácil gerenciar e dividir programas grandes (reais) em módulos menores.
87/87
Referências
● https://www.javatpoint.com/python-constructors
Top Related