Sie sind auf Seite 1von 5

BC0505 Processamento da Informao

Assunto: Modularizao de Cdigo e Passagem de Parmetros Aula Prtica: 05 Introduo Mtodos e Modularizao
No Java, como em outras linguagens de Programao Orientadas a Objeto (POO), o cdigo pode ser simplificado empregando-se mtodos de classe, em princpio anlogo s funes das linguagens funcionais. De fato, sem utilizar POO, em algoritmos seqenciais, como os estudados, no h diferenas notveis. Toda a classe executvel em Java deve incluir um mtodo main, que o mtodo chamado automaticamente pela JVM quando a classe executada. Como j visto, a declarao do mtodo main feita na forma: public static void main(String[] args) { cdigo do usurio } De forma similar, outros mtodos podem ser definidos para executar blocos de cdigo do usurio. Como exemplo, uma funo fatorial pode ser implementada em um mtodo como segue (recursiva):
[1] [2] [3] [4] [5] [6]

Verso: 0.1c

public static long fatorial(long n) { if (n <= 1) return 1; else return n*fatorial(n - 1); } [1] Mtodos pblicos podem ser acessados por outras classes. Em POO, mtodos tambm podem ser privados e protegidos, por enquanto utilizaremos apenas mtodos pblicos. [2] Lembre-se tambm que mtodos declarados como estticos apenas podem acessar mtodos e variveis de classe estticas (no instanciadas em objetos, ou nicas, da classe). [3] O tipo da varivel retornada pelo mtodo deve ser declarado, ou identificado como void (vazio) no caso de o mtodo no retornar nada. [4] O nome do mtodo segue as mesmas regras de nomenclatura das variveis, como estudado anteriormente. [5] Definimos os tipos de entrada aceitas pelo mtodo ao declarar os tipos e nomes de variveis locais entre parnteses (vlidas somente no escopo do mtodo), que recebero os valores passados como parmetros pela chamada, separados por vrgula. [6] Caso o valor de retorno no seja declarado void (vazio), o bloco dever incluir o return, que indica o valor a ser retornado ao ponto de chamada, finalizando a execuo do mtodo. Mtodos podem ser copiados para novos programas e reutilizados. Mtodos declarados pblicos podem ser acessados externamente por qualquer classe, assim limpando/simplificando o cdigo principal, o que particularmente til em projetos extensos. Para utilizar uma classe externa, basta import-la no incio da classe, caso no esteja no mesmo projeto. Quando utilizamos o mtodo Math.pow(2,6) para efetuar a operao 26, estamos chamando o mtodo pow (exponenciao) da classe padro Math, que oferece funes (ex. sin(), cos(), random(), etc.) e constantes (Math.PI e Math.E ) matemticas. Classes padres como System (chamadas do sistema) e Math so automaticamente includas. Outras classes cujos mtodos pblicos j utilizamos so String, Integer, Double, java.util.Scanner e javax.swing.JOptionPane.

Atividade 1 Modularizando o cdigo


O cdigo da pgina seguinte pode ser simplificado escrevendo-se mtodos modulares com o objetivo de reduzir a repetio de blocos de cdigo ao longo do programa. Por exemplo, o cdigo: double valorInicial = Double.parseDouble( JOptionPane.showInputDialog("Valor inicial: ", "300")); int meses = Integer.parseInt( JOptionPane.showInputDialog("Quantos meses? ", "1")); substitudo por: double valorInicial = ask("Valor inicial: ", 300); int meses = ask("Quantos meses? ", 1); implementando-se um mtodo ask de forma que: public static double ask(String m, double d) { try { return Double.parseDouble( JOptionPane.showInputDialog(m, d)); } catch (Exception e) { e.printStackTrace(); return d; } } O mtodo ask pode ser sobrecarregado para outros tipos de varivel, como inteiros: public static int ask(String m, int i) { try { return Integer.parseInt(JOptionPane.showInputDialog(m, i)); } catch (Exception e) { e.printStackTrace(); return i; } } Note que o cdigo substitudo incorpora tratamento de erros, assumindo o valor padro no caso de entrada invlida, como String vazia, caracteres no numricos ou com erro de formatao. Por motivos didticos a mensagem de erro ainda exibida no console (e.printStackTrace), embora possa ser omitida. Modifique o programa abaixo criando 2 mtodos (ask e planejar) para reduzir ao mximo a repetio do cdigo do mtodo main, passando por meio de parmetros os valores que os novos mtodos venham a utilizar. Tente deixar o cdigo o mais breve possvel.

import javax.swing.JOptionPane; public class Aplicacao { public static void main(String[] args) { double investimento = ask("Qual o valor investido?", 15000f); double complemento = ask("Qual o complemento mensal?", 800f); double objetivo = ask("Qual o objetivo?", 300000f); double juros_Poupanca = 1.0057; double juros_CDB = 1.0082; double juros_LTN = 1.012; double juros_Multimercado = 1.016; // ~0,57% ao ms na mdia // ~0,82% ao ms // ~1,2% ao ms // ~1,6% ao ms

double taxaAnual_Multimercado = 0.01; // 1% ao ano String frase = String.format("Para um investimento de R$ %,.2f " + "com aplicaes mensais de R$ %,.2f\n" + "O tempo para atingir R$ %,.2f seria:\n\n", investimento, complemento, objetivo); int meses = 0; double saldo = investimento; while (saldo < objetivo) { meses++; saldo = saldo * juros_Poupanca + complemento; } frase += String.format("%d meses (%d anos) na Poupana\n", meses, meses/12); meses = 0; saldo = investimento; while (saldo < objetivo) { meses++; saldo = saldo * juros_CDB + complemento; } frase += String.format("%d meses (%d anos) no CDB\n", meses, meses/12); meses = 0; saldo = investimento; while (saldo < objetivo) { meses++; saldo = saldo * juros_LTN + complemento; } frase += String.format("%d meses (%d anos) em Letras do Tesouro Nacional\n", meses, meses/12); meses = 0; saldo = investimento; while (saldo < objetivo) { meses++; saldo = saldo * juros_Multimercado + complemento; if (meses % 12 == 0 && meses > 1) { saldo -= saldo * taxaAnual_Multimercado; } } frase += String.format("%d meses (%d anos) em Fundos Multimercado\n", meses, meses/12); JOptionPane.showMessageDialog(null, frase); } } }

Atividade 2 Operaes aritmticas

package calculo; import javax.swing.JOptionPane; public class Calculo { static void modAdicao() { double v1; double v2; double res; v1 = Double.parseDouble( JOptionPane.showInputDialog("Digite o primeiro valor: ")); v2 = Double.parseDouble( JOptionPane.showInputDialog("Digite o segundo valor: ")); res = v1 + v2; JOptionPane.showMessageDialog(null, "Soma = " + res); } public static void main(String[] args) { int opcao; opcao = Integer.parseInt( JOptionPane.showInputDialog("Escolha a sua opo: \n" + "1 adio\n")); if (opcao == 1) { modAdicao(); } JOptionPane.showMessageDialog(null, " Fim do Programa"); } }

a) Complete o programa construindo mtodos para multiplicao, diviso e subtrao. Vale ressaltar que o tipo suportado dever ser double. b) Os mtodos podem ser sobrecarregados para lidar com tipos diferentes de entrada e sada. Construa um novo mdulo modAdio que tenha passagem dos parmetros double v1 e double v2. Faa o teste trabalhando com os mdulos modAdio (com e sem passagem de parmetros). Depure o cdigo e verifique o que ocorre no Java.

3. Exerccios para Casa


3.1. Concatene o cdigo da atividade 1 de forma que o mtodo main execute apenas o comando frase(), "Planejamento financeiro",

JOptionPane.showMessageDialog(null, JOptionPane.INFORMATION_MESSAGE);

3.2. Faa um programa que leia mil nmeros atravs de uma estrutura de repetio e utilize um processo randmico para sorteio do valor. Os nmero devem estar entre 0 e 100. Verifique: a) Qual foi o nmero sorteado mais vezes b) Qual foi o nmero sorteado menos vezes c) Qual foi o maior nmero d) Qual foi o menor nmero.

Escreva uma funo para cada opo. No final, imprima esses valores na tela para o usurio. 3.3. Crie mtodos para exibio de temperaturas em graus Celsius, Fahrenheit e Kelvin. Os mtodos celsius(t), kelvin(t) e fahrenheit(t) (sobrecarregados) devem receber um nmero de qualquer tipo (byte, int, long, float ou double) e retornar uma String no formato %d C = %d F = %d K. Dados: (Fahrenheit) = 1.8*(Celsius) + (Kelvin) = (Celsius) + 273.15; 32;

Das könnte Ihnen auch gefallen