6108 Programmering i Java Leksjon 4 Metoder Roy M. Istad 2015
Program, klasse og metode public class Kode { main-metode Kode.java import static java.... // ulike klasser Våre program så langt: Én fil Én klasse (import?) Én main metode Større program: Flere filer, flere klasser og flere metoder. Hvorfor? Kode med bedre oversikt, gir gjenbruk og arbeidsdeling 6108 Programmering i Java Leksjon 4 side 2
Oppdeling av program i metoder Store program "krever" oppdeling i mindre biter. Metode navnsatt enhet som inneholder én eller flere setninger. Metode et«delprogram» som utfører en avgrenset oppgave. Java biblioteket (API) har (veldig) mange ferdiglagede metoder Eksempler fra API: parseint() round() min(), max() showmessagedialog() 6108 Programmering i Java Leksjon 4 side 3
import static java.lang.system.*; public class MetodeTest { Eksempel: MetodeTest.java public static void main(string[] args) { out.println("********************"); skrivstjerner(); out.println("her er en setning."); out.println("********************"); skrivstjerner(); out.println("ferdig!"); private static void skrivstjerner() { out.println("********************"); Skopet (mellom krøllparenteser) void? "Tom", metoden sender ikke ut noen verdi (i en gitt datatype) Programmet gir denne utskriften: ******************** Her er en setning. ******************** Ferdig! NB! Metoden skrivstjerner finnes ikke i noe bibliotek, vi må lage den selv... private? Hjelpemetode, deklarert inne i klassen som skal bruke den. 6108 Programmering i Java Leksjon 4 side 4
Metodekall og parameterliste Setningene i en metode blir utført ved kall på metoden Et metodekall består i det enkleste tilfellet av navnet på metoden, etterfulgt av ( ) altså en tom parameterliste. Kall på en void metode står som en selvstendig setning i programkoden. Metode med returverdi sender fra seg en verdi, og må som andre verdier stå i en tilordning, som del av et utrykk eller parameter i et nytt metodekall. Eksempel: int tall = min(3, 8); double meterlengde = round(yard*cm_i_yard)/100; int allerstørst = max( max(2,tall), max(3,8) ); 6108 Programmering i Java Leksjon 4 side 5
Formelle og aktuelle parametre public static void main(string[] args) { skrivstjerner(2); skrivstjerner(4); skrivstjerner(8); Metodekall: private static void skrivstjerner(int antall) { for (int i=1; i<=antall; i++) out.print("*"); out.println(); Konsoll ******************** ** Lengde: 2 **** Lengde: 4 ******** Lengde: 8 Altså: skrivstjerner lengde:2 skrivstjerner lengde:4 skrivstjerner lengde:8 6108 Programmering i Java Leksjon 4 side 6
Utførelse av metodekall skrivstjerner blir kalt fra main metoden, og println fra skrivstjerner: Ved metodekall «hopper» programutførelsen ut av en metode og inn i en annen metode. Den hopper tilbake igjen når alle setningene i den aktuelle metoden er utført. 6108 Programmering i Java Leksjon 4 side 7
Parameterliste Metodekall: skrivtegn('+', 7); + 7 +++++++ ******* Konsoll Samme metode, men andre aktuelle parametre i kallet: skrivtegn('p', 12); PPPPPPPPPPPP Konsoll 6108 Programmering i Java Leksjon 4 side 8
Metode med returverdi public static void main(string[] args) { int svar = areal(3, 3 4); // Som om det sto: int svar = 12; out.println("rektangelareal: " + svar); 12 Metoder med returverdi kan brukes som uttrykk. Her kan metodekallet like gjerne stå i utskriften: out.println("rektangelareal: " + areal(3, 4) ); 6108 Programmering i Java Leksjon 4 side 9
«Prosedyre» kontra «funksjon» void metode returverdi metode Metoden står som egen setning Metoden står som del av et utrykk Slå plena! Metoden utfører et oppdrag, men gir ingen kvittering tilbake Hva er klokka? Metoden "beregner" ett resultat (en verdi) som kvitteres til oppdragsgiver 6108 Programmering i Java Leksjon 4 side 10
Sammensatte metodekall int allerminst = minst(2, minst(3, 4)); 2 3 4 3 Oppgave: Skriv en metode som kan finne det minste av tre heltall. 123 2 Innlesing av heltall via dialogvindu: 123 int høyde = parseint( showinputdialog(ledetekst) ); 6108 Programmering i Java Leksjon 4 side 11
Uttrykk som parametre Konsoll + +++ +++++ +++++++ +++++++++ + t 1 antall Mulige metodekall nå: : for (int i=1; i<=5; i++) { skrivtegn(' ', 5-i ); skrivtegn('+', 2*i-1 ); out.println(); : uttrykk Konsoll XXXXX XXXXX XXXXX XXXXX int str = // innlest for (int i=1; i<=str; i++) { skrivtegn(' ', i-1 ); skrivtegn('x', str+1 ); out.println(); 6108 Programmering i Java Leksjon 4 side 12
Verdioverføring av parameter private static void parametertest(int x) { x = x + 1; int w = x; : // Før metodekall int tall = 9; parametertest(tall); : // Etter metodekall, : // hva er tall nå? : 6108 Programmering i Java Leksjon 4 side 13
Oppdeling av problem «Topp ned»: Oppdeling av større og mer sammensatte problem i mindre deler. Metoder bidrar naturlig til mer oppdeling. «Dummy metoder» (uferdig kode): Metoder som ikke gjør noe, men kompilerer, og kan altså brukes i løsningsforslaget. Eksempel: Sum øyne for tre terningkast (metoden returnerer bare en verdi) private static int sumøyne(int antallterninger) { return 11; // Dummy-metode, kompilerbar... «Bunn opp»: Bibliotek, pakke, klasse med metoder utviklet for standard bruk. Byggeklosser som kan settes sammen til store og gjerne kompliserte løsninger Java API Verktøyklasser (Samling statiske metoder som vi muligens har laget selv) 6108 Programmering i Java Leksjon 4 side 14
Programbibliotek «Bunn opp» programmering: Standard byggeklosser ligger i programbibliotek slik at ulike program kan bruke dem etter behov. Java API: Oversikt over biblioteket 6108 Programmering i Java Leksjon 4 side 15
Klassemetoder og verktøyklasser Egen fil! Temperatur.java public class Temperatur { public static double celcius2fahrenheit(double c) { return (c * 9/5) + 32; public static double fahrenheit2celcius(double f) { return (f - 32) * 5/9; OBS! Trykkfeil i læreboka s.155 NB! Må sette modifikatorene til public for at andre klasser skal få tilgang til metodene (ikke private altså). Og, klassen har ikke main metode. Fysisk tilgang til metodene? Import, plassert i samme mappe, eller sette opp en filsti? : double grc = 20.0; Kall på klassemetode fra double grf = Temperatur.celsius2Fahrenheit(grC); et brukerprogram : grf = Math.round(grF); : 6108 Programmering i Java Leksjon 4 side 16