Subprogramação LeonardoGrestaPaulinoMurta [email protected]ff.br Auladehoje • Estudaremosaestruturamaisbásicade encapsulamentodaOrientaçãoaObjetos – Métodos Leonardo Murta Subprogramação 2 Exemplo import java.util.Scanner; public class IMC { public static void main(String[] args) { Scanner teclado = new Scanner(System.in); Parecidos! System.out.print("Entre com a sua altura em metros: "); double altura = teclado.nextDouble(); System.out.print("Entre com a sua massa em kg: "); double massa = teclado.nextDouble(); double imc = massa / Math.pow(altura, 2); System.out.println("Seu IMC é " + imc); } } Leonardo Murta Subprogramação 3 Exemplousandométodo import java.util.Scanner; public class IMC { public static double leia(String mensagem) { Scanner teclado = new Scanner(System.in); System.out.print(mensagem); return teclado.nextDouble(); } Declaração do método public static void main(String[] args) { double altura = leia("Entre com a sua altura em metros: "); double massa = leia("Entre com a sua massa em kg: "); } } double imc = massa / Math.pow(altura, 2); System.out.println("Seu IMC é " + imc); Leonardo Murta Subprogramação Chamadas ao método 4 Dividirparaconquistar • Antes:umprogramagigante ProgramaPrincipal • Depois:váriosprogramasmenores Programa Principal Leonardo Murta MétodoA MétodoB MétodoC Subprogramação 5 Fluxodeexecução • Oprogramateminícioemummétodoprincipal(nocasodo Javaéométodomain) • Ométodoprincipalchamaoutrosmétodos • Estesmétodospodemchamaroutrosmétodos, sucessivamente • Aofimdaexecuçãodeummétodo,oprogramaretornapara ainstruçãoseguinteàdachamadaaométodo Programa Método Principal Método A Método B Método C Leonardo Murta Possível sequencia de chamadas 2 Máquina Virtual Java 1 Método Principal 4 Subprogramação 3 Método A Método B Método C 6 Fluxodeexecução Leonardo Murta Subprogramação 7 Fluxodeexecução • Éequivalenteaoqueacontecequandochamamosum métodopredefinidodoJava Leonardo Murta Subprogramação 8 Vantagens • Economiadecódigo – QuantomaisrepeUção,maiseconomia • Facilidadenacorreçãodedefeitos – Corrigirodefeitoemumúnicolocal • Legibilidadedocódigo – PodemosdarnomesmaisintuiUvosablocosdecódigo – Écomosecriássemosnossospróprioscomandos • Melhortratamentodecomplexidade – Estratégiade“dividirparaconquistar”nospermitelidar melhorcomacomplexidadedeprogramasgrandes – Abordagemtop-downajudaapensar! Leonardo Murta Subprogramação 9 Sintaxedeummétodo Vamos usar esses modificadores por enquanto Qualquer tipo da linguagem Mesma regra de nome de variável public static int divide(int a, int b) MODIFICADORES TIPODERETORNO NOME (ARGUMENTOS) public static void main(String[] args) Mesma regra de declaração de variáveis, separando por vírgula cada argumento Significa que não tem retorno Leonardo Murta Subprogramação 10 Acessoavariáveis • Ummétodonãoconsegueacessarasvariáveisdeoutros métodos – Cadamétodopodecriarassuasprópriasvariáveislocais – Osparâmetrosparaaexecuçãodeummétododevemser definidoscomoargumentosdométodo • Passagemporvalor – JavacopiaráovalordecadaargumentoparaarespecUva variável – Osnomesdasvariáveispodemserdiferentes z = calcula(a, b); public static double calcula(int x, int y) Leonardo Murta Subprogramação 11 Exemplo public class Troca { public static void troca(int x, int y) { int aux = x; x = y; y = aux; } public static float media(int x, int y) { return (x + y) / 2f; } public static void main(String[] args) { int a = 5; int b = 7; troca(a, b); System.out.println("a: " + a + ", b: " + b); System.out.println("média: " + media(a,b)); } } Leonardo Murta Subprogramação 12 Sobrecargademétodos • Umaclassepodeterdoisoumaismétodoscomo mesmonome,desdequeosUposdeseus argumentossejamdisUntos • IssoéúUlquandoqueremosimplementarum métodoemfunçãodeoutro • ExemplobaseadonaclasseString: public int indexOf(String substring) { return indexOf(substring, 0); } Leonardo Murta Subprogramação 13 Métodossemargumentos • Nãoénecessárioterargumentosnosmétodos – Nestescasos,éobrigatórioter()depoisdonomedo método – Achamadaaométodotambémprecisaconter() • Exemplodedeclaração: public static void pulaLinha() { System.out.println(); } • Exemplodechamada: pulaLinha(); Leonardo Murta Subprogramação 14 Exercício • Façaumacalculadoraqueforneçaasseguintesopçõesparao usuário,usandométodossemprequepossível • Acalculadoradeveoperarsempresobreovalorcorrentena memória Estado da memória: 0 Opções: (1) (2) (3) (4) (5) (6) Somar Subtrair Multiplicar Dividir Limpar memória Sair do programa Qual opção você deseja? Leonardo Murta Subprogramação 15 Subprogramação LeonardoGrestaPaulinoMurta [email protected]ff.br