Skip to content

Latest commit

 

History

History
114 lines (89 loc) · 3.47 KB

introducao.org

File metadata and controls

114 lines (89 loc) · 3.47 KB

Introdução

1 Abstração

Abstração é fundamental em linguagens de programação

  • Nomear uma parte do programa potencialmente complexa
  • Grau de separação entre
    • Linguagem de programação
    • Arquitetura do computador

\pause Existem dois tipos de abstração

  • Abstração de Controle \scriptsize (operações e ações)
    • Existe desde os primórdios da computação
  • \normalsize Abstração de Dados \scriptsize (representação de informações)
    • Proposta na década de 80

2 Abstração de Controle

Abstração de Controle → Subprogramas

  • Separam-se as operações repetitivas do programa
  • Podem ser chamadas em diferentes momentos

Vantagens

  • Permite economizar memória
  • Diminui o tempo de codificação
  • Aumentam legibilidade, simplificam o código

3 Subprograma

Único ponto de entrada, vários de saída

Apresenta uma relação de mestre-trabalhador

Controle é suspenso na unidade chamadora

Retorna após o fim da unidade chamada

\pause Tipos de subprogramas

  • Função \scriptsize – Retorna um valor
  • \small Procedimento \scriptsize – Não retorna um valor
  • \pause \small Corotinas → quebram a relação de mestre-trabalhador
    • Múltiplas entradas
    • Linguagens: apenas Lua (e Python) as implementam

4 Subprograma – Algumas Questões de Projeto

  • Como se dá a ativação dos subprogramas?
  • Quais ambientes de referência são permitidos/usados? São locais ou globais? Qual é o alcance e a visibilidade dos componentes?
  • Qual é o funcionamento e a semântica das variáveis locais?
  • Há proteção de componentes locais?
  • Subprogramas aninhados são permitidos?
  • Sobrecarga de subprogramas é permitida?
  • Podem ser usadas/declaradas unidades genéricas?

5 Subprograma – Conceitos

Uma definição de subprograma (cabeçalho e corpo)

  • O cabeçalho contém o tipo, nome e parâmetros
    • Permite verificações de tipo pelo compilador
  • O corpo contém a implementação, ele define
    • Um ponto de entrada da execução
    • Um ambiente de execução
    • Operações
  • Código reentrante

\pause Algumas curiosidades

  • Python: diretiva def é executável
  • Lua: todas as funções são anônimas
    function cube(x) return x*x*x end
    cube = function (x) return x*x*x end
        

\pause Chamada de subprograma o torna ativo

  • Requisição explícita de execução
  • Vinculação entre o ponto de chamada e o código

6 Semântica de Chamadas e Retornos

Vinculação de subprogramas exige o registro de dados

Pergunta: Quais informações são essenciais?

  • \pause Estado da execução no ponto de chamada
  • \pause Passagem de parâmetros, dependendo do método empregado
  • \pause Ambiente global de execução
  • \pause Ambiente local de execução
  • \pause Endereço de retorno

\pause Armazenadas em um Registro de Ativação (RA ou frame)

\pause Na chamada, uma instância do RA é criada na pilha

7 Visão Geral da Memória

../vinculos/code-data-stack-heap-6.png