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
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
Ú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
- 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?
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
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