SlideShare une entreprise Scribd logo
1  sur  32
Télécharger pour lire hors ligne
Funções e
Procedimentos
Prof: Sergio Souza Costa
Adaptado de © 2004, Programming Language Design Concepts
D.A. Watt, University of Glasgow
Sobre mim
Sérgio Souza Costa
Professor - UFMA
Doutor em Computação Aplicada (INPE)
prof.sergio.costa@gmail.com
https://sites.google.com/site/profsergiocosta/home
https://twitter.com/profsergiocosta
http://gplus.to/sergiosouzacosta
http://www.slideshare.net/skosta/presentations?order=popular
Abstração: Função e Procedimento
● Abstração – uma entidade que contém uma computação.
● Abstração de Função - contém uma expressão a ser avaliada.
● Abstração de Procedimento - contém um bloco a ser executado.
● A efetividade de abstrações é enriquecida através da parametrização.
Uma abstração de função é uma expressão que produz um resultado. 
Visões:
● o usuário da função está preocupado somente com o resultado da
função
● o programador da função está preocupado como o procedimento
funciona, seu algoritmo.
   
Função
Função - C
Uma função em C/C++ tem a seguinte forma:
T I (FPD1 , . . . , FPDn ) B
Onde:
● I é o identificador da função,
● FPDi são as declarações dos parâmetros formais,
● T o tipo do resultado
● B um bloco de comandos, chamada de corpo da função
Uma função pode ser chamada por uma expressão na seguinte forma:
I(AP1 , . . . , APn )
Onde APi, são os parâmetros reais e I o identificador da função.
Função - C
Definição:
Função - C
float power (float x, int n) {
float p = 1.0;
for (int i = 1; i <= n; i++)
p *= x;
return p;
}
power (2, 4)
Chamada:
Função Haskell
Uma função em Haskell tem a forma:
I FPs = E 
Onde:
    I é o identificador da função
    FPs, são os parâmetros formais e
    E é uma expressão.
Função Haskell
power :: Float -> Int -> Float
power _ 0 = 1
power x n = x * power x (n-1)
power 2.0 4
Definição:
Chamada:
Funções em linguagens imperativas
●  O corpo de uma função em linguagens imperativas é sintaticamente um
comando e, semanticamente, uma expressão com efeito colateral.
●  Já o corpo de uma função em linguagens imperativas é uma expressão,
tanto sintaticamente quanto semanticamente.
Funções anônimas
● Na maioria das linguagens, uma função está sempre associada
(amarrada) a um identificador. 
● Entretanto, algumas linguagens, como Haskell, JavaScript e Lua
permitem separar o conceito de construções de funções e amarração, ou
seja, permitem definir funções sem identificadores.
(x->2*x) 4 (function (x)
return 2*x end) (4)
Definindo e aplicando uma
função em Lua.
Definindo e aplicando uma
função em Haskell.
dobro =(x->2*x)
dobro 4
Amarrando a um identificador -
Haskell
dobro=(function (x)
return 2*x end)
dobro (4)
Amarrando a um identificador - Lua
Procedimentos
● Contém um comando a ser executado, e que quando chamado
atualizará variáveis.
●  Esta abstração existe apenas em linguagens imperativas.
● O usuário de uma abstração de procedimento observa apenas as
atualizações de variáveis, não os passos executados para sua
efetivação.
Procedimento - C/C++
Um procedimento em C/C tem a seguinte forma
void I (FPDs) B
Onde
● I é o identificador,
● FPS, são os parametros formais
● B o bloco de comando.
Procedimento - C++
Considere o seguinte procedimento:
void sort (int v[], int n) {
for (int i = 1; i < n; i++) {
int tmp = v[i];
for (int j = i; j > 0 && tmp < v[j-1]; j--)
v[j] = v[j-1] ;
v[j] = tmp;
}
}
● Visão do usuário, a função sort produz a ordenação dos valores do
vetor de entrada;
● Visão do programador, é usado o algoritmo de inserção.
Procedimentos - Ada
Em Ada, um procedimento tem a seguinte forma:
procedure I (FPs) is
D
begin
C
end;
Onde:
● I é o identificador,
● FPS, são os parametros formais
● D, são as declarações locais
● C, corpo da função, um bloco de comando 
Função e Procedimento
● Uma abstração de função é uma abstração sobre uma expressão. Uma
chamada de função é uma expressão que retorna um valor pela
avaliação do corpo da abstração de função.
● Uma abstração de procedimento é uma abstração sobre um comando.
Uma chamada de procedimento é um comando que atualiza variáveis
pela execução dos passos da abstração de procedimento.
Função e Procedimento
Procedimentos são coleções de sentenças que definem computações
parametrizáveis
● Podem modificar os parâmetros
● Podem modificar variáveis globais
Funções são similares a procedimentos, mas são semanticamente modeladas
como funções matemáticas.
● Que não deveriam ter efeitos colaterais
Parâmetros e argumentos
Ausência reduz
Redigibilidade
○ Necessário incluir operações para atribuir os valores desejados às variáveis globais
Legibilidade
○ Na chamada de volume não existe qualquer menção à necessidade de uso dos valores
das variáveis altura, largura e comprimento
Confiabilidade
○ Não exige que sejam atribuídos valores a todas as variáveis globais utilizadas em volume
    
Parâmetros e argumentos
int altura, largura, comprimento;
int volume () { return altura * largura * comprimento; }
main() {
int a1 = 1, l1 = 2, c1 = 3, a2 = 4, l2 = 5, c2 = 6;
int v1, v2;
altura = a1;
largura = l1;
comprimento = c1;
v1 = volume();
altura = a2;
largura = l2;
comprimento = c2;
v2 = volume();
printf (“v1: %dnv2: %dn”, v1, v2);
}
Parâmetros e argumentos
● São usados para permitir que uma abstração receba valores
específicos para realizar sua computação.
● Um argumento é um valor passado para uma abstração. (parâmetro
real)
Parâmetros e argumentos
parâmetro formal:
identificador dentro de uma
abstração, usado para denotar um
argumento.
expressão na chamada de uma
abstração que determina um
argumento
parâmetro real:
argumento:
o valor que é passado para um
procedimento ou função.
Parâmetros e argumentos
function eof (f : text) : Boolean;
{f – parâmetro formal}
. . .
resultado := eof(book);
{book – parâmetro real}
● Valores que podem ser passados como argumentos:
○ valores de primeira classe (todas linguagens)
○ ponteiro para  variáveis (em muitas linguagens)
○ procedimentos ou ponteiros para procedimentos (em algumas linguagens)
Parâmetros e argumentos
Mecanismos de passagens
● Mecanismos de passagem de parâmetros  são as formas de associar
parâmetros reais a formais. 
● Tipos de Mecanismos:
○ por valor, por resultado, por valor/resultado, por nome, por referência, por função....
● Existem dois modelos conceituais de como os dados são transferidos
dos parâmetros reais para os formais e vice-versa.
○ Ou um valor real é copiado (para o chamador, para o chamado, ou para ambos)
○ Ou um caminho de acesso é fornecido (um ponteiro ou referência)
Mecanismo - Cópia
O parâmetro formal x é uma variável local da abstração.
●  O valor (argumento) é copiado para a variável local x.
 
function dobro (x)
return 2*x
end
a = 10
b = dobro (a)
Mecanismo - Cópia
Três modelos semânticos:
● valor
● resultado
● valor/resultado
 
C/C++ suporta apena cópia, Ada suporta todos os três.
Mecanismo - Cópia
Chamador
sub(a, b, c)
Chamado
void sub(int x, int y, int z)
valor
resultado
valor/resultado
a
b
c
x
y
z
chamada
retorno
Mecanismo referência
Permite que um parametro formal PF seja associado (amarrado)
diretamente ao argumento.
○ Constante - o argumento é um valor de primeira classe que é associado ao PF, mas que
nao pode ser modificado.
○ Referência (ou variável) - o argumento é uma referência a uma variável e PF pode ser
modificado.
○ Procedural e Funcional - o argumento é uma abstração de procedimento ou função e PF
é associado a sua definição.
● Ada suporta os mecanimos contante e variavel. C não suporta
diretamente referência, porém é possivel simular atraves de ponteiros.
C++ suporta referência diretamente (&).
Mecanismo referência - C++
Procedimento:
void inc (int& n) {
n = n +1;}
Chamada :
int x = 10;
inc (x);
Mecanismo referência
Constante, caso queira passar apenas em modo de leitura:
Exemplo, C++:
void top (const Pilha& p);
Ordem de avaliação
Em que instante os parâmetros reais devem ser avaliados ?
● Na chamada da abstração ?
● Ou só quando o parâmetro formal for necessário ?
Função estrita - a execução da função depende do total avaliação de seus
argumentos. 
Função não-estrita - a função pode ser executada avaliando apenas uma
parte de seus argumentos. Ex:
and False _ = False
and True b =    b
 
Referências
Programming Language Design Concepts [Paperback]. David A. Wat

Contenu connexe

Tendances

Algoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigoAlgoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigo
Mauro Pereira
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)
Adriano Teixeira de Souza
 
Access diapositivos aula nº 1 e 2
Access diapositivos aula nº 1 e 2Access diapositivos aula nº 1 e 2
Access diapositivos aula nº 1 e 2
Filipa Cordeiro
 
Apresentando ferramentas CASE
Apresentando ferramentas CASEApresentando ferramentas CASE
Apresentando ferramentas CASE
Aline Ferreira
 

Tendances (20)

Descritiva Narrativa (Lógica de Programação)
Descritiva Narrativa (Lógica de Programação)Descritiva Narrativa (Lógica de Programação)
Descritiva Narrativa (Lógica de Programação)
 
Python - Introdução
Python - IntroduçãoPython - Introdução
Python - Introdução
 
03 mer2
03 mer203 mer2
03 mer2
 
Exercicios de Algoritimos
 Exercicios de Algoritimos Exercicios de Algoritimos
Exercicios de Algoritimos
 
Variáveis e portugol
Variáveis e portugolVariáveis e portugol
Variáveis e portugol
 
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana ChahoudDesenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
 
AnáLise CombinatóRia
AnáLise CombinatóRiaAnáLise CombinatóRia
AnáLise CombinatóRia
 
Uml
UmlUml
Uml
 
Aula 02 - Tipos de dados, Variáveis, Constantes e Operadores Aritméticos
Aula 02 - Tipos de dados, Variáveis, Constantes e Operadores AritméticosAula 02 - Tipos de dados, Variáveis, Constantes e Operadores Aritméticos
Aula 02 - Tipos de dados, Variáveis, Constantes e Operadores Aritméticos
 
Algoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigoAlgoritmos e lp parte3-pseudocódigo
Algoritmos e lp parte3-pseudocódigo
 
Data Warehouse - Modelagem
Data Warehouse - ModelagemData Warehouse - Modelagem
Data Warehouse - Modelagem
 
Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)Estrutura de Dados em Java (Funções e Procedimentos)
Estrutura de Dados em Java (Funções e Procedimentos)
 
Aula 07 - Visualg e Pseudocódigo
Aula 07 - Visualg e PseudocódigoAula 07 - Visualg e Pseudocódigo
Aula 07 - Visualg e Pseudocódigo
 
Visualg
VisualgVisualg
Visualg
 
Bancos de dados e usuários de banco de dados
Bancos de dados e usuários de banco de dadosBancos de dados e usuários de banco de dados
Bancos de dados e usuários de banco de dados
 
Estrutura de Dados - Aula 12 - Listas Duplamente Encadeadas
Estrutura de Dados  - Aula 12 - Listas Duplamente EncadeadasEstrutura de Dados  - Aula 12 - Listas Duplamente Encadeadas
Estrutura de Dados - Aula 12 - Listas Duplamente Encadeadas
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Access diapositivos aula nº 1 e 2
Access diapositivos aula nº 1 e 2Access diapositivos aula nº 1 e 2
Access diapositivos aula nº 1 e 2
 
Algoritmos - Vetores
Algoritmos - VetoresAlgoritmos - Vetores
Algoritmos - Vetores
 
Apresentando ferramentas CASE
Apresentando ferramentas CASEApresentando ferramentas CASE
Apresentando ferramentas CASE
 

En vedette

Árvores: Conceitos e binárias
Árvores:  Conceitos e bináriasÁrvores:  Conceitos e binárias
Árvores: Conceitos e binárias
Sérgio Souza Costa
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Sérgio Souza Costa
 
Software Livre (Conceitos, contextualização histórica, licenças, sistemas ope...
Software Livre (Conceitos, contextualização histórica, licenças, sistemas ope...Software Livre (Conceitos, contextualização histórica, licenças, sistemas ope...
Software Livre (Conceitos, contextualização histórica, licenças, sistemas ope...
Sérgio Souza Costa
 

En vedette (20)

Manual do Telefone Sem Fio TS 40 ID Intelbras - LojaTotalseg.com.br
Manual do Telefone Sem Fio TS 40 ID Intelbras - LojaTotalseg.com.brManual do Telefone Sem Fio TS 40 ID Intelbras - LojaTotalseg.com.br
Manual do Telefone Sem Fio TS 40 ID Intelbras - LojaTotalseg.com.br
 
Manual do Telefone Sem Fio TS 8120 Intelbras - LojaTotalseg.com.br
Manual do Telefone Sem Fio TS 8120 Intelbras - LojaTotalseg.com.brManual do Telefone Sem Fio TS 8120 Intelbras - LojaTotalseg.com.br
Manual do Telefone Sem Fio TS 8120 Intelbras - LojaTotalseg.com.br
 
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetros
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetrosAlgoritmos e Programação: Subalgoritmos, funções e passagem de parâmetros
Algoritmos e Programação: Subalgoritmos, funções e passagem de parâmetros
 
Manual do Telefone Headset HSB 40 Intelbras - LojaTotalseg.com.br
Manual do Telefone Headset HSB 40 Intelbras - LojaTotalseg.com.brManual do Telefone Headset HSB 40 Intelbras - LojaTotalseg.com.br
Manual do Telefone Headset HSB 40 Intelbras - LojaTotalseg.com.br
 
Comandos e expressões
Comandos e expressõesComandos e expressões
Comandos e expressões
 
Árvores: Conceitos e binárias
Árvores:  Conceitos e bináriasÁrvores:  Conceitos e binárias
Árvores: Conceitos e binárias
 
C++ Funções
 C++ Funções C++ Funções
C++ Funções
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
 
Google apps script - Parte - 1
Google apps script - Parte - 1Google apps script - Parte - 1
Google apps script - Parte - 1
 
Relações (composição e agregação)
Relações (composição e agregação)Relações (composição e agregação)
Relações (composição e agregação)
 
Herança e Encapsulamento
Herança e EncapsulamentoHerança e Encapsulamento
Herança e Encapsulamento
 
Google apps script - Parte 2
Google apps script - Parte 2Google apps script - Parte 2
Google apps script - Parte 2
 
Árvores balanceadas - AVL
Árvores balanceadas - AVLÁrvores balanceadas - AVL
Árvores balanceadas - AVL
 
Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)
 
Conceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetosConceitos básicos de orientação a objetos
Conceitos básicos de orientação a objetos
 
Software Livre (Conceitos, contextualização histórica, licenças, sistemas ope...
Software Livre (Conceitos, contextualização histórica, licenças, sistemas ope...Software Livre (Conceitos, contextualização histórica, licenças, sistemas ope...
Software Livre (Conceitos, contextualização histórica, licenças, sistemas ope...
 
Paradigmas de programação
Paradigmas de programaçãoParadigmas de programação
Paradigmas de programação
 
DBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsDBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cells
 
Tipos e valores
Tipos e valoresTipos e valores
Tipos e valores
 
Linguagem C - Funções
Linguagem C - FunçõesLinguagem C - Funções
Linguagem C - Funções
 

Similaire à Funções e procedimentos

Recursividade em linguagem C
Recursividade em linguagem CRecursividade em linguagem C
Recursividade em linguagem C
Leonardo Lima
 

Similaire à Funções e procedimentos (20)

Subalgoritmos Profª Letíca Lopes
Subalgoritmos Profª Letíca LopesSubalgoritmos Profª Letíca Lopes
Subalgoritmos Profª Letíca Lopes
 
Aula 1 | Introdução a C++
Aula 1 | Introdução a C++Aula 1 | Introdução a C++
Aula 1 | Introdução a C++
 
Intro funcoes(2)
Intro funcoes(2)Intro funcoes(2)
Intro funcoes(2)
 
Introdução ao paradigma funcional com scala
Introdução ao paradigma funcional com scalaIntrodução ao paradigma funcional com scala
Introdução ao paradigma funcional com scala
 
Ed1
Ed1Ed1
Ed1
 
Funções em C
Funções em CFunções em C
Funções em C
 
mod3-programação-estruturada
mod3-programação-estruturadamod3-programação-estruturada
mod3-programação-estruturada
 
Comandos de Controle de Programa em C
Comandos de Controle de Programa em CComandos de Controle de Programa em C
Comandos de Controle de Programa em C
 
SubProgramas
SubProgramasSubProgramas
SubProgramas
 
Aula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmosAula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmos
 
Aula 7 aed - sub algoritmos
Aula 7   aed - sub algoritmosAula 7   aed - sub algoritmos
Aula 7 aed - sub algoritmos
 
Aula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmosAula 7 -_aed_-_sub_algoritmos
Aula 7 -_aed_-_sub_algoritmos
 
aula intro de Python sobre Funcoes.pdf
aula intro de  Python sobre  Funcoes.pdfaula intro de  Python sobre  Funcoes.pdf
aula intro de Python sobre Funcoes.pdf
 
Recursividade em linguagem C
Recursividade em linguagem CRecursividade em linguagem C
Recursividade em linguagem C
 
M2ti - Python Brasil
M2ti - Python BrasilM2ti - Python Brasil
M2ti - Python Brasil
 
Paradigmas de Linguagens de Programacao - Aula #3
Paradigmas de Linguagens de Programacao - Aula #3Paradigmas de Linguagens de Programacao - Aula #3
Paradigmas de Linguagens de Programacao - Aula #3
 
01-Paradigmas.pdf
01-Paradigmas.pdf01-Paradigmas.pdf
01-Paradigmas.pdf
 
Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros Linguagem C - Funções e ponteiros
Linguagem C - Funções e ponteiros
 
RevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxRevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptx
 
Ud2
Ud2Ud2
Ud2
 

Plus de Sérgio Souza Costa

Aula 1 - introdução a fundamentos de computação
Aula 1 - introdução a fundamentos de computaçãoAula 1 - introdução a fundamentos de computação
Aula 1 - introdução a fundamentos de computação
Sérgio Souza Costa
 

Plus de Sérgio Souza Costa (20)

Expressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasExpressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicas
 
De algoritmos à programas de computador
De algoritmos à programas de computadorDe algoritmos à programas de computador
De algoritmos à programas de computador
 
Introdução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosIntrodução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmos
 
Minicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosMinicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficos
 
Modelagem de dados geográficos
Modelagem de dados geográficosModelagem de dados geográficos
Modelagem de dados geográficos
 
Banco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoBanco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de Encerramento
 
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemBanco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
 
Banco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaBanco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de abertura
 
Linguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoLinguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - Introdução
 
Gödel’s incompleteness theorems
Gödel’s incompleteness theoremsGödel’s incompleteness theorems
Gödel’s incompleteness theorems
 
Turing e o problema da decisão
Turing e o problema da decisãoTuring e o problema da decisão
Turing e o problema da decisão
 
Abstract classes and interfaces
Abstract classes and interfacesAbstract classes and interfaces
Abstract classes and interfaces
 
Introdução ao Prolog
Introdução ao PrologIntrodução ao Prolog
Introdução ao Prolog
 
Heap - Python
Heap - PythonHeap - Python
Heap - Python
 
Paradigma lógico
Paradigma lógicoParadigma lógico
Paradigma lógico
 
Contextualizando o moodle
Contextualizando o moodleContextualizando o moodle
Contextualizando o moodle
 
Explorando Games para o Ensino do Pensamento Computacional
Explorando Games para o Ensino do Pensamento ComputacionalExplorando Games para o Ensino do Pensamento Computacional
Explorando Games para o Ensino do Pensamento Computacional
 
Software
SoftwareSoftware
Software
 
Aula 1 - introdução a fundamentos de computação
Aula 1 - introdução a fundamentos de computaçãoAula 1 - introdução a fundamentos de computação
Aula 1 - introdução a fundamentos de computação
 
From remote sensing to agent-based models
From remote sensing to agent-based modelsFrom remote sensing to agent-based models
From remote sensing to agent-based models
 

Dernier

Dernier (6)

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 

Funções e procedimentos

  • 1. Funções e Procedimentos Prof: Sergio Souza Costa Adaptado de © 2004, Programming Language Design Concepts D.A. Watt, University of Glasgow
  • 2. Sobre mim Sérgio Souza Costa Professor - UFMA Doutor em Computação Aplicada (INPE) prof.sergio.costa@gmail.com https://sites.google.com/site/profsergiocosta/home https://twitter.com/profsergiocosta http://gplus.to/sergiosouzacosta http://www.slideshare.net/skosta/presentations?order=popular
  • 3. Abstração: Função e Procedimento ● Abstração – uma entidade que contém uma computação. ● Abstração de Função - contém uma expressão a ser avaliada. ● Abstração de Procedimento - contém um bloco a ser executado. ● A efetividade de abstrações é enriquecida através da parametrização.
  • 4. Uma abstração de função é uma expressão que produz um resultado.  Visões: ● o usuário da função está preocupado somente com o resultado da função ● o programador da função está preocupado como o procedimento funciona, seu algoritmo.     Função
  • 5. Função - C Uma função em C/C++ tem a seguinte forma: T I (FPD1 , . . . , FPDn ) B Onde: ● I é o identificador da função, ● FPDi são as declarações dos parâmetros formais, ● T o tipo do resultado ● B um bloco de comandos, chamada de corpo da função
  • 6. Uma função pode ser chamada por uma expressão na seguinte forma: I(AP1 , . . . , APn ) Onde APi, são os parâmetros reais e I o identificador da função. Função - C
  • 7. Definição: Função - C float power (float x, int n) { float p = 1.0; for (int i = 1; i <= n; i++) p *= x; return p; } power (2, 4) Chamada:
  • 8. Função Haskell Uma função em Haskell tem a forma: I FPs = E  Onde:     I é o identificador da função     FPs, são os parâmetros formais e     E é uma expressão.
  • 9. Função Haskell power :: Float -> Int -> Float power _ 0 = 1 power x n = x * power x (n-1) power 2.0 4 Definição: Chamada:
  • 10. Funções em linguagens imperativas ●  O corpo de uma função em linguagens imperativas é sintaticamente um comando e, semanticamente, uma expressão com efeito colateral. ●  Já o corpo de uma função em linguagens imperativas é uma expressão, tanto sintaticamente quanto semanticamente.
  • 11. Funções anônimas ● Na maioria das linguagens, uma função está sempre associada (amarrada) a um identificador.  ● Entretanto, algumas linguagens, como Haskell, JavaScript e Lua permitem separar o conceito de construções de funções e amarração, ou seja, permitem definir funções sem identificadores. (x->2*x) 4 (function (x) return 2*x end) (4) Definindo e aplicando uma função em Lua. Definindo e aplicando uma função em Haskell. dobro =(x->2*x) dobro 4 Amarrando a um identificador - Haskell dobro=(function (x) return 2*x end) dobro (4) Amarrando a um identificador - Lua
  • 12. Procedimentos ● Contém um comando a ser executado, e que quando chamado atualizará variáveis. ●  Esta abstração existe apenas em linguagens imperativas. ● O usuário de uma abstração de procedimento observa apenas as atualizações de variáveis, não os passos executados para sua efetivação.
  • 13. Procedimento - C/C++ Um procedimento em C/C tem a seguinte forma void I (FPDs) B Onde ● I é o identificador, ● FPS, são os parametros formais ● B o bloco de comando.
  • 14. Procedimento - C++ Considere o seguinte procedimento: void sort (int v[], int n) { for (int i = 1; i < n; i++) { int tmp = v[i]; for (int j = i; j > 0 && tmp < v[j-1]; j--) v[j] = v[j-1] ; v[j] = tmp; } } ● Visão do usuário, a função sort produz a ordenação dos valores do vetor de entrada; ● Visão do programador, é usado o algoritmo de inserção.
  • 15. Procedimentos - Ada Em Ada, um procedimento tem a seguinte forma: procedure I (FPs) is D begin C end; Onde: ● I é o identificador, ● FPS, são os parametros formais ● D, são as declarações locais ● C, corpo da função, um bloco de comando 
  • 16. Função e Procedimento ● Uma abstração de função é uma abstração sobre uma expressão. Uma chamada de função é uma expressão que retorna um valor pela avaliação do corpo da abstração de função. ● Uma abstração de procedimento é uma abstração sobre um comando. Uma chamada de procedimento é um comando que atualiza variáveis pela execução dos passos da abstração de procedimento.
  • 17. Função e Procedimento Procedimentos são coleções de sentenças que definem computações parametrizáveis ● Podem modificar os parâmetros ● Podem modificar variáveis globais Funções são similares a procedimentos, mas são semanticamente modeladas como funções matemáticas. ● Que não deveriam ter efeitos colaterais
  • 18. Parâmetros e argumentos Ausência reduz Redigibilidade ○ Necessário incluir operações para atribuir os valores desejados às variáveis globais Legibilidade ○ Na chamada de volume não existe qualquer menção à necessidade de uso dos valores das variáveis altura, largura e comprimento Confiabilidade ○ Não exige que sejam atribuídos valores a todas as variáveis globais utilizadas em volume     
  • 19. Parâmetros e argumentos int altura, largura, comprimento; int volume () { return altura * largura * comprimento; } main() { int a1 = 1, l1 = 2, c1 = 3, a2 = 4, l2 = 5, c2 = 6; int v1, v2; altura = a1; largura = l1; comprimento = c1; v1 = volume(); altura = a2; largura = l2; comprimento = c2; v2 = volume(); printf (“v1: %dnv2: %dn”, v1, v2); }
  • 20. Parâmetros e argumentos ● São usados para permitir que uma abstração receba valores específicos para realizar sua computação. ● Um argumento é um valor passado para uma abstração. (parâmetro real)
  • 21. Parâmetros e argumentos parâmetro formal: identificador dentro de uma abstração, usado para denotar um argumento. expressão na chamada de uma abstração que determina um argumento parâmetro real: argumento: o valor que é passado para um procedimento ou função.
  • 22. Parâmetros e argumentos function eof (f : text) : Boolean; {f – parâmetro formal} . . . resultado := eof(book); {book – parâmetro real}
  • 23. ● Valores que podem ser passados como argumentos: ○ valores de primeira classe (todas linguagens) ○ ponteiro para  variáveis (em muitas linguagens) ○ procedimentos ou ponteiros para procedimentos (em algumas linguagens) Parâmetros e argumentos
  • 24. Mecanismos de passagens ● Mecanismos de passagem de parâmetros  são as formas de associar parâmetros reais a formais.  ● Tipos de Mecanismos: ○ por valor, por resultado, por valor/resultado, por nome, por referência, por função.... ● Existem dois modelos conceituais de como os dados são transferidos dos parâmetros reais para os formais e vice-versa. ○ Ou um valor real é copiado (para o chamador, para o chamado, ou para ambos) ○ Ou um caminho de acesso é fornecido (um ponteiro ou referência)
  • 25. Mecanismo - Cópia O parâmetro formal x é uma variável local da abstração. ●  O valor (argumento) é copiado para a variável local x.   function dobro (x) return 2*x end a = 10 b = dobro (a)
  • 26. Mecanismo - Cópia Três modelos semânticos: ● valor ● resultado ● valor/resultado   C/C++ suporta apena cópia, Ada suporta todos os três.
  • 27. Mecanismo - Cópia Chamador sub(a, b, c) Chamado void sub(int x, int y, int z) valor resultado valor/resultado a b c x y z chamada retorno
  • 28. Mecanismo referência Permite que um parametro formal PF seja associado (amarrado) diretamente ao argumento. ○ Constante - o argumento é um valor de primeira classe que é associado ao PF, mas que nao pode ser modificado. ○ Referência (ou variável) - o argumento é uma referência a uma variável e PF pode ser modificado. ○ Procedural e Funcional - o argumento é uma abstração de procedimento ou função e PF é associado a sua definição. ● Ada suporta os mecanimos contante e variavel. C não suporta diretamente referência, porém é possivel simular atraves de ponteiros. C++ suporta referência diretamente (&).
  • 29. Mecanismo referência - C++ Procedimento: void inc (int& n) { n = n +1;} Chamada : int x = 10; inc (x);
  • 30. Mecanismo referência Constante, caso queira passar apenas em modo de leitura: Exemplo, C++: void top (const Pilha& p);
  • 31. Ordem de avaliação Em que instante os parâmetros reais devem ser avaliados ? ● Na chamada da abstração ? ● Ou só quando o parâmetro formal for necessário ? Função estrita - a execução da função depende do total avaliação de seus argumentos.  Função não-estrita - a função pode ser executada avaliando apenas uma parte de seus argumentos. Ex: and False _ = False and True b =    b  
  • 32. Referências Programming Language Design Concepts [Paperback]. David A. Wat