10 - Subprogramas
10 - Subprogramas
10 - Subprogramas
[INF1125 PLP]
Nota
O s s l i d e s u t i l i z a d o s n e s s a
disciplina so uma adaptao
dos slides oficiais fornecidos pela
Editora Bookman para cursos
baseados no livro de Robert
Sebesta.
Esse curso segue a estrutura do
livro de Sebesta mudando em
alguns momentos apenas a
ordem de execuo do
contedo.
O p r o f e s s o r d a d i s c i p l i n a
entende que o livro de Sebesta
ainda uma das melhores obras
introdutrias sobre o assunto.
Prof. Antonio Luiz Cavalcanti Tj
Tpicos do Captulo 9
Introduo
Fundamentos de subprogramas
Questes de projeto para subprogramas
Ambientes de referenciamento local
Mtodos de passagem de parmetros
Parmetros que so subprogramas
Subprogramas sobrecarregados
Subprogramas genricos
Questes de projeto para funes
Operadores sobrecarregados definidos pelo usurio
Corrotinas
Prof. Antonio Luiz Cavalcanti Tj
Introduo
Dois recursos fundamentais de abstrao
Abstrao de processos
Desde o incio da histria das linguagens de programao
Abstrao de dados
Desde o incio dos anos 1980
Fundamentos de subprogramas
Cada subprograma tem um nico ponto de entrada
A unidade de programa chamadora suspensa durante a execuo
do subprograma chamado
O controle sempre retorna para o chamador quando a execuo do
subprograma termina
Definies bsicas
Uma definio de subprograma descreve a interface e as aes da
abstrao de um subprograma
Em Python, definies de programa so executveis; em todas as outras
linguagens, elas so no executveis
Uma chamada a subprograma a requisio explcita que diz que o
subprograma deve ser executado
Um cabealho de subprograma a primeira parte da definio,
incluindo o nome, o tipo de subprograma e os parmetros formais
O perfil de parmetros (ou assinatura) de um subprograma contm o
nmero, a ordem e os tipos de seus parmetros formais
O protocolo o perfil de parmetros mais, se for uma funo, seu tipo
de retorno
Blocos em Ruby
Iteradores so implementados com blocos, que podem ser definidos por aplicaes
Os blocos podem ter parmetros formais, que so especificados entre barras verticais;
sentena yield
def fibonacci(last)
first, second = 1, 1
yield first
end
end
Procedimentos e funes
Existem duas categorias de subprogramas
Procedimento so colees de sentenas que definem computaes
parametrizadas
Funes se parecem estruturalmente com os procedimentos, mas so
semanticamente modeladas como funes matemticas
Se uma funo um modelo fiel, ela no produz efeitos colaterais
Na prtica, muitas funes em programas tm efeitos colaterais
Desvantagens
Custo para alocao, liberao, tempo de inicializao
Endereamento indireto
Subprogramas no podem ser sensveis ao histrico
C++
Inclui o tipo referncia para passagem por referncia
Java
Todos os parmetros tm passagem por valor
Parmetros objetos tm passagem por referncia
Ada
Trs modelos para transmisso de parmetros: de entrada, de sada e de entrada e sada
Parmetros declarados como de sada podem receber atribuies, mas no podem ser
referenciados; os em modo de entrada podem ser referenciados, mas no receber
atribuies; os do modo entrada e sada podem ser referenciados e receber atribuies
PHP: similar a C#
Perl: parmetros reais so implicitamente colocados em uma matriz
pr-definida chamada de @_
Python e Ruby usam passagem por atribuio (todos os valores de
dados so objetos)
Subprogramas sobrecarregados
Um subprograma sobrecarregado um subprograma que possui o
mesmo nome de outro subprograma no mesmo ambiente de
referenciamento
C++, Java, C# e Ada incluem subprogramas sobrecarregados
pr-definidos
Em Ada, o tipo de retorno e uma funo sobrecarregada podem ser
usados para desambiguar chamadas (logo, duas funes
sobrecarregadas podem ter o mesmo perfil de parmetros e diferirem
apenas em seus tipos de retorno)
Ada, Java, C++ e C# permitem aos usurios escrever mltiplas verses
de subprogramas com o mesmo nome
Subprogramas genricos
Um subprograma genrico ou polimrfico recebe parmetros de
diferentes tipos em diferentes ativaes
Subprogramas sobrecarregados fornecem um tipo particular de
polimorfismo chamado de poliformismo ad hoc
O polimorfismo paramtrico fornecido por um subprograma que
recebe parmetros genricos que so usados em expresses de tipo
que descrevem os tipos dos parmetros do subprograma
Corrotinas
Uma corrotina um subprograma especial que possui mltiplas
entradas; as corrotinas chamadora e chamada esto em um
relacionamento mais igualitrio
A invocao de uma corrotina chamada de uma continuao em
vez de uma chamada
Na verdade, o mecanismo de controle das corrotinas
frequentemente chamado de modelo de controle de unidades
simtrico
Corrotinas fornecem execuo de quasi-concorrncia de unidades
de programas
Resumo
Uma definio de subprograma descreve as aes representadas pelo
subprograma
Subprogramas podem ser funes ou procedimentos
Variveis locais em subprogramas podem ser dinmicas da pilha
ou estticas
Trs modelos fundamentais de passagem de parmetros: modo de
entrada, modo de sada e modo de entrada e sada
Algumas linguagens permitem sobrecarga de operatores
Subprogramas podem ser genricos
Uma corrotina um subprograma especial que tem mltiplas entradas