Skip to content

Latest commit

 

History

History
138 lines (123 loc) · 4.35 KB

abstracao.org

File metadata and controls

138 lines (123 loc) · 4.35 KB

Conceito de Abstração

1 Contextualização

Principais questões no projeto de uma linguagem

Tipos de dados

  • Sistemas de tipo
  • Checagem de tipo
  • Equivalência, Compatibilidade, Inferência de tipos

Controle de Fluxo

  • Avaliação de expressões (aritméticas, atribuição)
  • Fluxo estruturado e não-estruturado

Abstração de controle – subprogramas

  • Registros de ativação
  • Modos de passagem de parâmetros

Abstração de dados – orientação a objeto

  • Encapsulamento e herança
  • Composição e polimorfismo

Concorrência

2 Conceito de Abstração

Uma visão ou representação de uma entidade que

inclui somente os atributos mais significativos

É uma Ferramenta contra a complexidade

  • Simplifica a programação
  • Permite focar-se nos atributos essenciais

\pause Abstração de Processo

  • Manifesta-se através de subprogramas
  • Presente em praticamente todas as linguagens
  • Exemplo do sortInt(list, listlen)

\pause Abstração de Dados

  • Presente em todos os projetos de linguagens desde 1980
  • Tipos Abstratos de Dados (TAD)

3 Abstração de dados: alternativas

Variáveis

  • Globais, Locais, Escopo aninhado, Estáticas

Módulo

  • Conjunto de funções que compartilham variáveis estáticas
  • Exportam um tipo abstrato

\hrule

\pause Módulo-tipo é o tipo abstrato

  • Permite instanciar múltiplas instâncias de uma abstração

\pause Classe é o tipo abstrato

  • Definem famílias de abstrações relacionadas
  • \pause Encapsulamento → esconder detalhes
  • \pause Herança → novas abstrações são refinamentos
  • \pause Vínculo dinâmico → nova abstração com comport. refinado

\pause Mas historicamente, como surgiu o paradigma OO?

4 Abstração de dados: histórico

Simula, 1960s → Centro de Computação Noruêgues

  • Encapsulamento, herança, vínculo dinâmico de métodos
    • Encapsulamento era fácil de ser quebrado
  • \pause Autores: Ole-Johan Dahl, Kristen Nygaard
    • ACM Turing Award, IEEE von Neumann Medal

\pause Smalltalk, 1970s

  • Adota herança, dinamismo métodos e encapsulamento
  • \pause Modelo de programação baseado em mensagens
    • Ao invés de chamada de métodos a objetos
    • Lento, embora flexível

\pause Soluções recentes

  • C++, Ada95, Fortran2003, Python, Ruby, Java, C#
    • Herança e vínculo dinâmico de métodos com
    • Sintaxe e semântica imperativa “clássica” (C)

\pause Objective-C

  • Como Smalltalk, mas com sintaxe alternativa

\pause OO em linguagens funcionais: CLOS (baseada em LISP), R

5 Tipos abstratos de dados: introdução

Tipo de dados de uma linguagem

  • Definição de um tipo de dado pelo usuário
  • Conjunto de operações sobre o tipo

Requisitos de linguagem

  • Unidade sintática para encapsular a definição de tipo e operações
    • Representação do tipo é escondida
    • Separação entre declaração e definição?
    • Como tornar visível a declaração do tipo abstrato
    • Definição de mecanismos de controle de acesso?
      (Nível de encapsulamento)
  • Operações embutidas de atribuição e comparação

Questões de projeto

  • Tipos abstratos de dados podem ser parametrizados?
  • Qual a forma do container do tipo?
    • Classe (OO), Módulo-tipo, Módulo

6 Exemplo de tipo abstrato de dado

Uma Pilha

Operações

  • criar(pilha)
  • destruir(pilha)
  • vazio(pilha)
  • empilhar(pilha, elemento)
  • desempilhar(pilha)
  • topo(pilha)

7 Algumas vantagens

Representação dos objetos do tipo é escondida

  • Confiabilidade, legibilidade e redigibilidade
  • Escopo reduzido → menos conflitos de nome
  • Trocar a implementação sem trocar o código usuário

Mesma e única unidade sintática

  • Método de organização do programa
  • Facilita a modificação
  • Compilação pode ser separada