Você está na página 1de 25

Modularizao

Programao em Java
Prof. Maurcio Braga

Modularizao

A medida que abordamos problemas mais complexos, os


programas tambm apresentaro uma maior
complexidade.

A complexidade no est relacionada a quantidade de


comandos existentes, e sim s diversas combinaes
possveis dos comandos disposio.

Os comandos que possumos so poucos, mas podemos realizar


diversas combinaes com os mesmos.

A complexidade de um problema pode dificultar a


construo do programa de sua soluo

Devemos tentar dividi-lo em partes menores, resolvendo cada um


dos subproblemas separadamente.
2/25

Modularizao de programas

Consiste em dividir um programa em etapas, fazendo


com que cada etapa seja parte da soluo de um
problema maior.

Se um subproblema ainda parecer muito complexo, podemos


tentar dividi-lo em partes menores, para facilitar sua soluo, e
assim sucessivamente.
Dividir para conquistar

Ns temos dificuldade de resolver problemas quando os


mesmos possuem uma grande quantidade de elementos
inseridos.

A modularizao a forma humilde de reconhecermos esta


dificuldade, mas ainda assim resolvermos o problema.
3/25

Modularizao em Java

Realizada atravs do uso de mtodos, tambm chamados de


funes ou procedimentos. Todo programa escrito em Java possui
pelo menos uma funo ( a funo main).

Todas as funes precisam ser chamadas para ser executadas. A


nica exceo a funo main, que invocada automaticamente
pelo sistema quando o programa executado.

Ao encontrar uma chamada para uma funo, o fluxo de execuo


do programa desvia para o local onde a funo existe, e executa a
mesma. Ao terminar a execuo da funo, o fluxo de execuo
retorna para o local onde a funo foi chamada.

A execuo do programa reiniciada na linha seguinte linha onde


a funo foi acionada.
4/25

Modularizao em Java

5/25

Modularizao em Java

Todas as funes devem indicar se retornam um valor para quem


chamou a funo ou no. Caso no seja necessrio retornar um
valor, deve-se declarar o retorno como void. Caso a funo retorne
um valor, devemos usar o comando return seguido de uma varivel
ou constante para retornar esse valor para quem chamou a funo.

Java possui uma grande quantidade de funes disponveis para


uso imediato pelo programador. Para ter acesso a algumas funes
pode ser necessrio usar o comando import.

O nome da funo, em conjunto com os parmetros que ela recebe


identificam a assinatura da funo.

6/25

Criando funes em Java

A sintaxe que usaremos para criar uma funo :


public static [retorno] <nome_funo>([Parmetro1],..., [ParmetroN])
{
<comando1>;
<comando2>;
...
<comandoN>;
}

Para chamar uma funo, basta inserirmos em algum


ponto do programa o nome da mesma, junto com a lista
de parmetros (se houver) que a mesma recebe.

<nome_funo>(parametro1, parametro2);
7/25

Criando funes em Java

Exemplo de uma funo que imprime uma frase na tela:

public static void escreva(String frase)


{
System.out.println(frase);
}

Para chamar essa funo, basta inserirmos em algum


ponto do programa o nome da mesma, junto com a lista
de parmetros que a mesma recebe.
8/25

Exemplo
public class programa {
public static void main(String[] args) {
String s1 = testando o mtodo Escreva;
Escreva(s1);
}
public static void escreva(String frase) {
System.out.println(frase);
}
}

9/25

Compartilhando variveis entre


funes

Caso seja necessrio acessar ou alterar o valor de uma varivel


dentro de mais de uma funo, devemos declarar a varivel dentro
da classe, mas fora de qualquer funo.

Nesse caso, deve-se usar o modificador static antes do tipo da


varivel.

As variveis criadas dentro de funes recebem o nome de


variveis locais, e s existem dentro das funes onde foram
criadas.

As variveis criadas dentro de uma classe com o modificador static


podem ser utilizadas em qualquer lugar da classe.
10/25

Exemplo
public class programa {
static String s1 = qualquer coisa;
public static void main(String[] args) {
System.out.println("imprimindo o valor de s1 de dentro da funo
main.");
System.out.println("s1 = " + s1);
escreva_Frase();
System.out.println(De volta para a funo main.);
}

public static void escreva_Frase() {


System.out.println("imprimindo o valor de s1 de dentro da funo
escreva_Frase.");
System.out.println("s1 = " + s1);
}
}
11/25

Exemplo

12/25

Exemplo

Exemplos

Numa loja de materiais de construo, um azulejo estampado


custa R$2,50. Faa um programa para ler o comprimento e a
altura de uma parede (em metros), e depois escrever o valor a
ser gasto com a compra de azulejos. Considere que um metro
quadrado formado por 9 azulejos.

Soluo

A sada o valor total gasto com azulejos.


O computador precisa saber o comprimento e a altura da
parede.
Quais so os clculos necessrios?

13/25

Exemplo

Soluo (cont.)

Multiplicando a altura pelo comprimento, teremos a rea da


parede (considerando uma parede retangular);
Multiplicando a rea pelo nmero 9, teremos a quantidade de
azulejos necessrios para preencher esta rea;
Uma vez que um azulejo custa R$2,50 (um valor constante),
podemos multiplicar a quantidade de azulejos por 2,5 para
chegar ao total gasto.

14/25

Exemplo

Soluo sem uso de modularizao:


Variveis
gasto_azulejos, comprimento, altura, area, azulejos: real;
Incio
escrever Digite o comprimento em metros: ;
ler comprimento;
escrever Digite a altura em metros;
ler altura;
area = comprimento * altura;
azulejos = area * 9;
gasto_azulejos = azulejos * 2.5;
escrever Quantidade de azulejos necessria: , azulejos;
escrever Valor gasto com azulejos: R$ , gasto_azulejos;
Fim

15/25

Exemplo

Soluo (cont.)

Pensando em termos de um algoritmo, podemos imaginar trs


etapas:
Variveis
? ? ?;

Incio
Obter as dimenses da parede e calcular a rea;
Calcular o valor gasto com azulejos;
Escrever o resultado calculado;
Fim

16/25

Exemplo

Soluo (cont.)

Detalhando o clculo do valor gasto.


Variveis
gasto_azulejos, comprimento, altura, area, qtd_azulejos: real;
Incio
LER_DIMENSOES_E_OBTER_AREA;
CALCULAR_VALOR_GASTO;
ESCREVER_GASTO;
Fim.
Mdulo CALCULAR_VALOR_GASTO;
[[...]];
Mdulo LER_DIMENSOES_E_OBTER_AREA;
[[...]];
Mdulo ESCREVER_GASTO;
[[...]];

17/25

Soluo em Java
public class MinhaClasse {
static double comprimento = 0, altura = 0, qtd_azulejos = 0, gasto_azulejos = 0;
public static double ler_Dimensoes_E_Obter_Area() {
double area =0;
Scanner s = new Scanner(System.in);
System.out.println("digite o comprimento em metros:");
comprimento = s.nextDouble();
System.out.println("digite a altura em metros:");
altura = s.nextDouble();
area = comprimento * altura;
return area;
}
public static void calcular_Valor_Gasto(double area) {
qtd_azulejos = area * 9;
gasto_azulejos = qtd_azulejos * 2.5;
}
public static void escreva(String frase) {
System.out.println(frase);
18/25
}

Soluo em Java
public static void main(String[] args) {
double area = 0;
String resposta1 = "", resposta2 = "";
area = ler_Dimensoes_E_Obter_area();
calcular_Valor_Gasto(area);
resposta1 = "Quantidade de azulejos necessria: " + qtd_azulejos;
escreva(resposta1);
resposta2 = "Valor gasto com azulejos: R$ " + gasto_azulejos;
escreva(resposta2);
}
} // fim da classe

19/25

Soluo em Java

20/25

Vantagens do uso de funes

Facilita a resoluo de problemas complexos;

Viabiliza a diviso do trabalho entre a equipe de


desenvolvimento (cada programador ou grupo de
programadores pega um pedao do problema para
resolver e trabalha de forma independente);

Desenvolvimento mais rpido de programas (vrias


funes podem ser escritas em paralelo pelos membros
da equipe).

21/25

Vantagens do uso de funes

Incentiva a diviso de responsabilidades;

Reuso de funes desenvolvidas em projetos anteriores


ou obtidas externamente diminui o tempo de
desenvolvimento de novos programas;

Aumento de qualidade pelo uso de funes cujo


funcionamento foi validado em projetos anteriores.

22/25

Exerccio

Escreva uma funo que recebe uma quantidade


qualquer de valores e retorna a mdia desses valores.

23/25

Soluo exerccio
public static double media(double[] v) {
double soma = 0, media = 0;
for (int i = 0; i< v.length; i++) {
soma = soma + v[i];
}
media = soma / v.length;
return media;
}

24/25

Modularizao

Programao em Java
Prof. Maurcio Braga