modularização programação em java prof. maurício braga

26
Modularização Modularização Programação em Java Prof. Maurício Braga

Upload: internet

Post on 16-Apr-2015

110 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Modularização Programação em Java Prof. Maurício Braga

ModularizaçãoModularização

Programação em Java

Prof. Maurício Braga

Page 2: Modularização Programação em Java Prof. Maurício Braga

2/27

Modularização

A medida que abordamos problemas mais complexos, os programas também apresentarão uma maior complexidade.

A complexidade não está relacionada a quantidade de comandos existentes, e sim às diversas combinações possíveis dos comandos à disposição.

Os comandos que possuímos são poucos, mas podemos realizar diversas combinações com os mesmos.

A complexidade de um problema pode dificultar a construção do programa de sua solução

Devemos tentar dividi-lo em partes menores, resolvendo cada um dos subproblemas separadamente.

Page 3: Modularização Programação em Java Prof. Maurício Braga

3/27

Modularização de programas

Consiste em dividir um programa em etapas, fazendo com que cada etapa seja parte da solução de um problema maior.

Se um subproblema ainda parecer muito complexo, podemos tentar dividi-lo em partes menores, para facilitar sua solução, e assim sucessivamente.

“Dividir para conquistar” Nós temos dificuldade de resolver problemas quando os

mesmos possuem uma grande quantidade de elementos inseridos.

A modularização é a forma humilde de reconhecermos esta dificuldade, mas ainda assim resolvermos o problema.

Page 4: Modularização Programação em Java Prof. Maurício Braga

4/27

Modularização em Java

Realizada através do uso de métodos, também chamados de funções ou procedimentos. Todo programa escrito em Java possui pelo menos uma função ( a função main).

Todas as funções precisam ser chamadas para ser executadas. A única exceção é a função main, que é invocada automaticamente pelo sistema quando o programa é executado.

Ao encontrar uma chamada para uma função, o fluxo de execução do programa desvia para o local onde a função existe, e executa a mesma. Ao terminar a execução da função, o fluxo de execução retorna para o local onde a função foi chamada.

A execução do programa é reiniciada na linha seguinte à linha onde a função foi acionada.

Page 5: Modularização Programação em Java Prof. Maurício Braga

5/27

Modularização em Java

Page 6: Modularização Programação em Java Prof. Maurício Braga

6/27

Modularização em Java

Todas as funções devem indicar se retornam um valor para quem chamou a função ou não. Caso não seja necessário retornar um valor, deve-se declarar o retorno como void. Caso a função retorne um valor, devemos usar o comando return seguido de uma variável ou constante para retornar esse valor para quem chamou a função.

Java possui uma grande quantidade de funções disponíveis para uso imediato pelo programador. Para ter acesso a algumas funções pode ser necessário usar o comando import.

O nome da função, em conjunto com os parâmetros que ela recebe identificam a assinatura da função.

Page 7: Modularização Programação em Java Prof. Maurício Braga

7/27

Criando funções em Java

A sintaxe que usaremos para criar uma função é:

Para chamar uma função, basta inserirmos em algum ponto do programa o nome da mesma, junto com a lista de parâmetros (se houver) que a mesma recebe. <nome_função>(parametro1, parametro2);

public static [retorno] <nome_função>([Parâmetro1],..., [ParâmetroN]){<comando1>;<comando2>;

...<comandoN>;}

Page 8: Modularização Programação em Java Prof. Maurício Braga

8/27

Criando funções em Java Exemplo de uma função que imprime uma frase na tela:

Para chamar essa função, basta inserirmos em algum ponto do programa o nome da mesma, junto com a lista de parâmetros que a mesma recebe.

public static void escreva(String frase){ System.out.println(frase);}

Page 9: Modularização Programação em Java Prof. Maurício Braga

9/27

Exemplopublic class programa {

public static void main(String[] args) {

String s1 = “testando o método Escreva”;Escreva(s1);

}

public static void escreva(String frase) { System.out.println(frase);}

}

Page 10: Modularização Programação em Java Prof. Maurício Braga

10/27

Compartilhando variáveis entre funções Caso seja necessário acessar ou alterar o valor de uma variável

dentro de mais de uma função, devemos declarar a variável dentro da classe, mas fora de qualquer função.

Nesse caso, deve-se usar o modificador static antes do tipo da variável.

As variáveis criadas dentro de funções recebem o nome de variáveis locais, e só existem dentro das funções onde foram criadas.

As variáveis criadas dentro de uma classe com o modificador static podem ser utilizadas em qualquer lugar da classe.

Page 11: Modularização Programação em Java Prof. Maurício Braga

11/27

Exemplopublic class programa {

static String s1 = “qualquer coisa”;

public static void main(String[] args) {System.out.println("imprimindo o valor de s1 de dentro da função

main.");System.out.println("s1 = " + s1);escreva_Frase();System.out.println(“De volta para a função main.”);

}

public static void escreva_Frase() {System.out.println("imprimindo o valor de s1 de dentro da função

escreva_Frase.");System.out.println("s1 = " + s1);

}}

Page 12: Modularização Programação em Java Prof. Maurício Braga

12/27

Exemplo

Page 13: Modularização Programação em Java Prof. Maurício Braga

13/27

Exemplo

Exemplos Numa loja de materiais de construção, um azulejo estampado

custa R$2,50. Faça 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.

Solução A saída é o valor total gasto com azulejos. O computador precisa saber o comprimento e a altura da

parede. Quais são os cálculos necessários?

Page 14: Modularização Programação em Java Prof. Maurício Braga

14/27

Exemplo

Solução (cont.) Multiplicando a altura pelo comprimento, teremos a área da

parede (considerando uma parede retangular); Multiplicando a área pelo número 9, teremos a quantidade de

azulejos necessários 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.

Page 15: Modularização Programação em Java Prof. Maurício Braga

15/27

Exemplo

Solução sem uso de modularização:

Variáveisgasto_azulejos, comprimento, altura, area, azulejos: real;

Inícioescrever “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 necessária: “, azulejos;escrever “Valor gasto com azulejos: R$ “, gasto_azulejos;

Fim

Page 16: Modularização Programação em Java Prof. Maurício Braga

16/27

Exemplo

Solução (cont.) Pensando em termos de um algoritmo, podemos imaginar três

etapas:

Variáveis? ? ?;

Início“Obter as dimensões da parede e calcular a área”;“Calcular o valor gasto com azulejos”;“Escrever o resultado calculado”;

Fim

Page 17: Modularização Programação em Java Prof. Maurício Braga

17/27

Exemplo

Solução (cont.) Detalhando o cálculo do valor gasto.

Variáveisgasto_azulejos, comprimento, altura, area, qtd_azulejos: real;

InícioLER_DIMENSOES_E_OBTER_AREA;CALCULAR_VALOR_GASTO;ESCREVER_GASTO;

Fim.Módulo CALCULAR_VALOR_GASTO;

[[...]];Módulo LER_DIMENSOES_E_OBTER_AREA;

[[...]];Módulo ESCREVER_GASTO;

[[...]];

Page 18: Modularização Programação em Java Prof. Maurício Braga

18/27

Solução em Javapublic 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; System.out.println("digite o comprimento em metros:");

comprimento = Leia(comprimento);System.out.println("digite a altura em metros:");altura = Leia(altura);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);}

Page 19: Modularização Programação em Java Prof. Maurício Braga

19/27

Solução em Javapublic 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 necessária: " + qtd_azulejos;escreva(resposta1);resposta2 = "Valor gasto com azulejos: R$ " + gasto_azulejos;escreva(resposta2);

}

} // fim da classe

Page 20: Modularização Programação em Java Prof. Maurício Braga

20/27

Solução em Java

Page 21: Modularização Programação em Java Prof. Maurício Braga

21/27

Vantagens do uso de funções

Facilita a resolução de problemas complexos;

Viabiliza a divisão do trabalho entre a equipe de desenvolvimento (cada programador ou grupo de programadores pega um pedaço do problema para resolver e trabalha de forma independente);

Desenvolvimento mais rápido de programas (várias funções podem ser escritas em paralelo pelos membros da equipe).

Page 22: Modularização Programação em Java Prof. Maurício Braga

22/27

Vantagens do uso de funções

Incentiva a divisão de responsabilidades;

Reuso de funções desenvolvidas em projetos anteriores ou obtidas externamente diminui o tempo de desenvolvimento de novos programas;

Aumento de qualidade pelo uso de funções cujo funcionamento foi validado em projetos anteriores.

Page 23: Modularização Programação em Java Prof. Maurício Braga

23/27

Exercícios

Escreva uma função que recebe uma quantidade qualquer de valores e retorna a média desses valores.

Escreva uma função que receba um número inteiro positivo e retorne o fatorial desse número.

Uma das maneiras de se obter a raiz quadrada de um número inteiro é subtrair do número os ímpares consecutivos a partir de 1, até que o resultado da subtração seja menor ou igual a zero. O número de vezes que se conseguir fazer a subtração é a raiz exata (se o resultado final da subtração for zero) ou aproximada (se o resultado final da subtração for negativo). Escreva uma função que receba um número inteiro positivo e calcule a raiz quadrada desse número.

Page 24: Modularização Programação em Java Prof. Maurício Braga

24/27

Solução exercício 1

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;

}

Page 25: Modularização Programação em Java Prof. Maurício Braga

25/27

Solução exercício 2

public static int fatorial(int numero) {

int fatorial = 1;

if (numero == 0 || numero ==1)

return 1;

for (int i = numero; i> 0; i--) {

fatorial = fatorial*i;

}

return fatorial;

}

Page 26: Modularização Programação em Java Prof. Maurício Braga

26/27

Solução exercício 3public static void raizQuadrada(int numero) {

int i = 1, contador = 0, n = numero;

while (n >0) {

n = n - i;

i = i+2;

contador = contador +1;

}

if (n ==0)

System.out.println("Raiz exata de " + numero + ": " + contador);

else {

contador = contador - 1;

System.out.println("Raiz aprox. de " +numero+ ": " + contador);

}

}