Escolar Documentos
Profissional Documentos
Cultura Documentos
3
Introdução
• A melhor maneira de desenvolver um programa
grande é quebrá-lo em pequenas partes
• “DIVIDIR PARA CONQUISTAR!”
– Napoleão Bonaparte
• A idéia é focar a atenção em um problema
pequeno de cada vez
• E no final juntar todas as soluções
4
Como é construída uma cada?
• Alvenaria
• Sistema elétrico
• Sistema hidráulico
• Acabamento Pintura
5
O que são módulos?
• Módulos também chamados de funções, rotinas
ou subprogramas
• São a essência da programação estruturada
• São segmentos de programa que executam uma
tarefa específica
• Sempre que possível evitem código extensos
crie módulos
6
Vantagens da modularização
• A modularização permite que cada módulo seja
escrito, testado e revisado individualmente
• Vários programadores podem trabalhar em
paralelo num mesmo programa
• Outra utilização da modularização é o reuso de
funções
– Aonde um trecho é utilizado muitas vezes
7
Mais vantagens
• A maior parte das linguagens de programação
fornece um conjunto de funções
• A utilização de funções que já existem, diminui
o tempo de desenvolvimento
• Exemplo: math – funções como pow() e
sqrt()
• NÃO VAMOS REINVENTAR A RODA!
8
Estrutura de um módulo
public class Test{
static tipo_de_retorno nome_da_funcao([parametros])
{
[declaracao de variaveis locais]
instrucoes
[return]
}
9
Outro exemplo
10
Métodos static, campos static
• Às vezes um método realiza uma tarefa que não
depende do conteúdo de nenhum objeto.
– Aplica-se à classe na qual é declarado como um todo.
– Conhecido como método static ou método de classe.
11
Outros detalhes
• As funções só podem ser declaradas antes da
função “void main”
• Quando precisamos funções que estão em
outros programas utilizamos import
• Variáveis globais devem ser declaradas foram
das funções e fora do “void main”
12
Escopo das variáveis
13
Ativando funções
• A ativação ocorre quando um determinado
ponto do programa contém o identificador do
módulo (nome_da_função)
• A ativação é conhecida como chamada
• Uma chamada de função é feita escrevendo-se o
nome da função seguido dos argumentos entre
parênteses
14
Ativando funções
• Mesmo se não tiver argumentos é preciso ter os
parênteses
• O compilador vai diferenciar função de variável
• As funções só podem ser chamadas depois de
terem sido declaradas
• Durante a chamada de um módulo, o fluxo de
execução é desvio para o módulo
15
16
Exercícios
1. Desenvolva uma função que recebe as três
notas do aluno como parâmetro e retorne a sua
média.
18
Exercícios
2. Desenvolva uma função que recebe dois
números inteiros como parâmetro, e retorna o
resto da divisão do primeiro parâmetro pelo
segundo.
19
Mais Exercícios
3. Desenvolva uma função que recebe o ano de
nascimento do usuário e retorna a sua idade. Faça
o cálculo usando o ano atual.
20
Sobrecarga de funções
• Duas funções podem ter o mesmo nome se os tipos
ou números forem diferentes
• É possível dar o mesmo nome para mais de uma
função
• A função não pode ser sobrecarregada somente pelo
seu tipo de retorno
• Pelo menos um dos seus parâmetros deve ter um tipo
diferente
21
Declarando Funções
• Até agora nós declaramos as funções antes da
função void main()
• No java também é possível declararmos as
funções após o void main()
23
Exercício
4. Desenvolva uma função que recebe como
parâmetro o mês atual e retorna quantos meses
faltam para o final do ano.
24
Mais Exercícios
5. Desenvolva uma função que recebe como
parâmetros o dia do mês, o mês e o ano e retorna
quantos dias faltam para o final do mês. Lembrem
que os meses que têm 28, 29, 30 ou 31 dias.
25
Funções como argumento
• A chamada a uma função pode ser utilizada
numa expressão da mesma forma como em
valores numéricos
• É possível também utilizar a chamada a uma
função como argumento para outra função
26
Exemplo
static float sqr(float z){
return z*z;
}
28
Recursividade
• Recursividade é a propriedade que a função tem
de chamar ela mesma
• Podem ser chamadas de definição circular
• Uma função é recursiva se um comando no
corpo da função chama ela mesma
29
Recursividade
• Quando uma função chama a si própria, as
novas variáveis locais e os argumentos são
alocados em uma pilha
• Uma chamada recursiva não faz uma nova cópia
da função
• Somente os argumentos e as variáveis são
novos
30
Quando usar recursão
• As funções recursivas podem ser difíceis de
compreender
• São mais lentas que as não-recursivas por
causa da sobrecarga de chamada
• Fatorial de 50, chama a função 51 vezes
• Uma execução custa 10 milisegundos
31
conceitos
• Quando um método recursivo é chamado para resolver um
problema, na verdade, ele é capaz de resolver somente o(s)
caso(s) mais simples(s), ou caso(s) básico(s).
• Se o método for chamado com um caso básico, ele retornará um
resultado.
• Se o método for chamado com um problema mais complexo, o
método costuma dividir o problema em duas partes conceituais:
– uma parte que o método sabe como fazer e
– uma parte que ele não sabe como fazer.
32
conceitos
• O passo de recursão normalmente inclui a instrução
return, pois o seu resultado será combinado com a
parte do problema que o método sabia como resolver.
• Para a recursão finalmente terminar, toda vez que o
método chamar a si próprio, a sequência de problemas
deve convergir para um caso básico.
– Quando o método reconhece o caso básico, ele
retorna um resultado para a cópia anterior do
método.
33
Exemplo do fatorial
! Fatorial de um inteiro positivo n,
n · (n – 1) · (n – 2) · … · 1
! Caso Base:
1! igual a 1
0! definido como 1.
! Caso Recursivo (complexo):
n! = n · (n – 1)!
34
Por exemplo
35
Problemas da recursividade
• A recursão repetidamente invoca o mecanismo, e
consequentemente o overhead, das chamadas de método.
• Pode ser cara tanto em termos de tempo de processador
como de espaço na memória.
• Cada chamada recursiva faz com que outra cópia do das
variáveis do método seja criada.
• Esse conjunto de cópias pode consumir espaço
considerável na memória.
37
Exercício
Implemente uma função recursiva que, dados dois
números inteiros x e n, calcula o valor de xn.
38
Mais Exercícios
Implemente uma função recursiva soma(n) que
calcula o somatório dos n primeiros números
inteiros.
40
Mais Exercícios
Implemente uma função recursiva que calcule a
série de Fibonacci
• 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...
• Fibonacci(3) = 1, 1, 2
42