Você está na página 1de 37

Modularização

www. Crescencio Lima .com


O que é modularização?
Por que utilizar modularização?
Introdução

•  Até agora toda a sequência de comandos foi


escrita dentro do programa “void main”
•  É possível dividir os programas em módulos
•  A modularização é uma das alternativas para
desenvolver grandes programas

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]
}

public static void main(String[] args){


System.out.printf(“____”);
}
}

9
Outro exemplo

static int soma(int x, int y){


int total;
total = x+y;
return total;
}

static float calc_media(float n1, float n2){


return (n1+n2)/2;
}

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.

•  É comum uma classe conter um grupo de


métodos static convenientes para realizar
tarefas comuns.

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;
}

static float soma(float m, float n){


return m+n;
}

static float somasqr(float m, float n){


return soma(sqr(m), sqr(n));
}

public static void main(String[] args){


float a, b;
...
System.out.print(soma_quadrado(num1, num2));
}
27
Exercício
•  Calcule a subtração da divisão de dois números

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

Você também pode gostar