tipos abstratos de dados - tiago de...

Post on 08-Aug-2020

4 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Algoritmos e Estruturas de Dados I

Tipos Abstratos de Dados

Prof. Tiago Eugenio de Melotmelo@uea.edu.br

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