Malmö högskola Rolf Axelsson 2001/2002 DA7010 Objektorienterad programmering 1, 5 poäng Indentering är viktigt! Efter startparentes, {, ska du indentera. Även om start- parenteser inte används (ej nödvändigt vid 1 programrad då du använder if, for och while) så ska du indentera. import extra.*; public class Kapital1 { public static void main(String[] args) { double kapital, räntesats; int antalÅr; System.out.print("Ange kapital: "); kapital = Input.readDouble(); System.out.print("Ange räntan i decimalform (3% som 0.03): "); räntesats = Input.readDouble(); System.out.print("Ange antalet år som kapitalet växer: "); antalÅr = Input.readInt(); System.out.println(); System.out.println("Startkapital: "+kapital); System.out.println("År Kapital"); for(int år=1; år<=antalÅr; år++) { kapital = kapital + räntesats*kapital; System.out.println(Output.format(år,2)+Output.format(kapital,10,0)); }
Malmö högskola Rolf Axelsson 2001/2002 DA7010 Objektorienterad programmering 1, 5 poäng Metoder Exempel på metoder Input-klassen respektive Output-klassen i extra-paketet. Klassmetoder Överlagrade metoder Föreläsning 6
Malmö högskola Rolf Axelsson 2001/2002 DA7010 Objektorienterad programmering 1, 5 poäng public static int readInt() / readInt(String text) Låter användaren mata in ett heltal. Felaktig inmatning ger värdet 0 som resultat. public static double readDouble() / readDouble(String t) Låter användaren mata in ett tal. Felaktig inmatning ger värdet 0 som resultat. public static String readLine() / readLine(String text) Låter användaren mata in en sträng. public static void delay(long millisekunder) Pausar exekveringen i bifogat antal millisekunder Klassen Input - inmatning mm Kapital1.java
Malmö högskola Rolf Axelsson 2001/2002 DA7010 Objektorienterad programmering 1, 5 poäng public static String format(int tal, int bredd) Returnerar en sträng med angiven längd(bredd). Strängen avslutas med talet och inleds med blanktecken för att ge strängen angiven längd. Output.format(23,8); returnerar strängen ” 23” public static void format(double tal, int bredd, int dec) Returnerar en sträng med angiven längd(bredd). Strängen avslutas med talet, med angivet antal decimaler, och inleds med blanktecken för att ge strängen korrekt längd. Output.format(2.3,8); returnerar strängen ” 2.3” public static void meddelande(String txt) Skriver ut en sträng i ett meddelandefönster. Med \n i strängen börjar följande text på ny rad. Klassen Output - talformatering Output.java
Malmö högskola Rolf Axelsson 2001/2002 DA7010 Objektorienterad programmering 1, 5 poäng Metoder En metod innehåller kod vilken exekveras när metoden anropas. // Klassen Output public static String format(int tal, int bredd) { String talStr = String.valueOf(tal); return blanka.substring(talStr.length(), Math.max(bredd,talStr.length()))+talStr; } När ett program kommer till koden String toPrint; toPrint = Output.format(133,5); så tilldelas parametern tal värdet 133 och parametern bredd värdet 5 och därefter utförs koden: String talStr = String.valueOf(tal); // talStr=”133” return blanka.substring(talStr.length(), // return ” ”+”133” Math.max(bredd,talStr.length()))+talStr;
Malmö högskola Rolf Axelsson 2001/2002 DA7010 Objektorienterad programmering 1, 5 poäng Metoder public static String format(int tal, int bredd) { String talStr = String.valueOf(tal); return blanka.substring(talStr.length(), Math….)+talStr; } En metod består av huvud public static String format(int tal, int bredd) och av kropp { String talStr = String.valueOf(tal); return blanka.substring(talStr.length(), Math….)+talStr; }
Malmö högskola Rolf Axelsson 2001/2002 DA7010 Objektorienterad programmering 1, 5 poäng Metodens huvud public static String format(int tal, int bredd) Modifierare public static synlighet public, private, protected, (ingen - paket) klassmetod static Metoden/variabeln finns alltid. klassvariabelÅtkomst genom klassnamn Returvärde String Anger vilken typ av variabel som returneras. -void Metoden returnerar ej ett värde. -int, char, boolean, double,.. Metoden returnerar ett värde av angiven typ. -Klassnamn, t.ex. String Metoden returnerar en referens till ett objekt.
Malmö högskola Rolf Axelsson 2001/2002 DA7010 Objektorienterad programmering 1, 5 poäng Metodens huvud public static String format(int tal, int bredd) Metodens namn format Namnet hittar du på själv men det ska vara beskrivande och börja med liten bokstav. Parameterlista (int tal, int bredd) Beskriver den information som ska bifogas vid metod- anropet. Parameterlistan kan vara tom och utgörs då av ett tomt parentespar ( ). Man måste ange typen på varje parameter i listan, (String namn, double längd, double vikt) och parametrarna ska bifogas i angiven ordning och i angivet antal.
Malmö högskola Rolf Axelsson 2001/2002 DA7010 Objektorienterad programmering 1, 5 poäng Parametrar Parametrarna i parameterlistan brukar benämnas formella parametrar. De visar vilken typ av värden som ska bifogas vid anrop till metoden. static void format(double tal, int bredd, int dec) Till denna version av metoden format ska det bifogas en double, en int och en int. Detta ska ske i uppräknad ordning! De bifogade värdena brukar benämnas argument eller aktuella parametrar. Output.format(1.3422, 10, 2)-> ” 1.34” Output. format(1.3422, 2, 10)-> ” ” Output. format(10,1.3422, 2)Felaktigt Inuti metoden fungerar en parameter som en vanlig variabel. Parametrar ska ges beskrivande namn. Deras namn ska börja med liten bokstav.
Malmö högskola Rolf Axelsson 2001/2002 DA7010 Objektorienterad programmering 1, 5 poäng Överföring av värde till enkla typer Om en parameter är av enkel typ, dvs byte, int, short, long, float, double, char och boolean, så kopieras värdet på argumentet till den formella parametern.
Malmö högskola Rolf Axelsson 2001/2002 DA7010 Objektorienterad programmering 1, 5 poäng Överföring av värde till objekt En variabel till ett objekt är en referens till objektet. Det innebär att variabeln vet vilket objekt den är knuten till, dvs. typ av objektet och var objektet finns i minnet. Om en parameter är någon typ av objekt så kopieras inte hela objektet utan endast referensen till objektet.
Malmö högskola Rolf Axelsson 2001/2002 DA7010 Objektorienterad programmering 1, 5 poäng Metoder ger struktur import extra.*; public class Kapital1 { public static void main(String[] args) { double kapital, räntesats; int antalÅr; System.out.print("Ange kapital: "); kapital = Input.readDouble(); System.out.print("Ange räntan i decimalform (3% som 0.03): "); räntesats = Input.readDouble(); System.out.print("Ange antalet år som kapitalet växer: "); antalÅr = Input.readInt(); System.out.println(); System.out.println("Startkapital: "+kapital); System.out.println("År Kapital"); for(int år=1; år<=antalÅr; år++) { kapital = kapital + räntesats*kapital; System.out.println(Output.format(år,2)+Output.format(kapital,10,0)); } * En tabell * Kapital1.java
Malmö högskola Rolf Axelsson 2001/2002 DA7010 Objektorienterad programmering 1, 5 poäng Metoder ger struktur import extra.*; public class Kapital2 { public static void sammansattRänta(double summa, double räntesats, double antalÅr) { System.out.println("Startkapital: "+summa); System.out.println("År Kapital"); for(int år=1; år<=antalÅr; år++) { summa = summa + räntesats*summa; System.out.println(Output.format(år,2)+Output.format(summa,10,0)); } public static void main(String[] args) { double kapital, räntesats; int antalÅr; System.out.print("Ange kapital: "); kapital = Input.readDouble(); System.out.print("Ange räntan i decimalform (3% som 0.03): "); räntesats = Input.readDouble(); System.out.print("Ange antalet år som kapitalet växer: "); antalÅr = Input.readInt(); System.out.println(); sammansattRänta(kapital,räntesats,antalÅr); } Kapital2.java
Malmö högskola Rolf Axelsson 2001/2002 DA7010 Objektorienterad programmering 1, 5 poäng Metoder kan vara nyttiga import extra.*; public class Kapital2 { public static void sammansattRänta(double summa, double räntesats, double antalÅr) { System.out.println("Startkapital: "+summa); System.out.println("År Kapital"); for(int år=1; år<=antalÅr; år++) { summa = summa + räntesats*summa; System.out.println(Output.format(år,2)+Output.format(summa,10,0)); } public static void main(String[] args) { double kapital, räntesats; int antalÅr; System.out.print("Ange kapital: "); kapital = Input.readDouble(); System.out.print("Ange räntan i decimalform (3% som 0.03): "); räntesats = Input.readDouble(); System.out.print("Ange antalet år som kapitalet växer: "); antalÅr = Input.readInt(); System.out.println(); sammansattRänta(kapital,räntesats,antalÅr); } Ledtext + Läsa in double Ledtext + Läsa in double Ledtext + Läsa in int
Malmö högskola Rolf Axelsson 2001/2002 DA7010 Objektorienterad programmering 1, 5 poäng Metoder kan vara nyttiga import extra.*; public class Kapital3 { public static void sammansattRänta(….) { // samma kod som förra sidan } public static double getDouble(String text) { double tal; System.out.print(text); tal = Input.readDouble(); return tal; } public static int getInt(String text) { System.out.print(text); return Input.readInt(); } public static void main(String[] args) { double kapital, räntesats; int antalÅr; kapital = getDouble("Ange kapital: "); räntesats = getDouble("Ange räntan i decimalform (3% som 0.03): "); antalÅr = getInt("Ange antalet år som kapitalet växer: "); System.out.println(); sammansattRänta(kapital,räntesats,antalÅr); } Kapital3.java
Malmö högskola Rolf Axelsson 2001/2002 DA7010 Objektorienterad programmering 1, 5 poäng Klassmetoder En metod som deklareras som static kallas för en klassmetod. public static void meddelande(String txt) { } En klassmetod anropas med hjälp av klassnamnet följt av en punkt: Output.meddelande(”Hej”); Klassen heter Output och metoden heter meddelande. Det behövs inget objekt av typen Output för att anropa meddelande. Däremot måste programmet ha tillgång till filen Output.class. import extra.*; // Output.class finns i extra-paketet
Malmö högskola Rolf Axelsson 2001/2002 DA7010 Objektorienterad programmering 1, 5 poäng Att skriva metoder MetodnamnhundraÅr1 Beskrivning:Metoden frågar användaren om åldern år 2001 och berättar när vederbörande fyller 100 år. Parametrar:- Returvärde:- public static void hundraÅr1() { int ålder, årtal; System.out.print(”Ange ålder: ”); ålder = Input.readInt(); årtal = 2001+(100-ålder); System.out.println(”År ”+årtal+” fyller du 100 år”); } Metod1.java
Malmö högskola Rolf Axelsson 2001/2002 DA7010 Objektorienterad programmering 1, 5 poäng Att skriva metoder MetodnamnhundraÅr2 Beskrivning:Metoden berättar när vederbörande fyller 100 år. Parametrar:ålder (int) Returvärde:- public static void hundraÅr1() { int ålder, årtal; System.out.print(”Ange ålder: ”); ålder = Input.readInt(); årtal = 2001+(100-ålder); System.out.println(”År ”+årtal+” fyller du 100 år”); } public static void hundraÅr2(int ålder) { int årtal = 2001+(100-ålder); System.out.println(”År ”+årtal+” fyller du 100 år”); } Vad är det för skillnad mellan metoderna? Metod2.java Skillnad.java
Malmö högskola Rolf Axelsson 2001/2002 DA7010 Objektorienterad programmering 1, 5 poäng Att skriva metoder MetodnamnhundraÅr3 Beskrivning:Metoden returnerar det år då personen fyller 100 år Parametrar:ålder (int) Returvärde:årtal (int) public static int hundraÅr3(int ålder) { return (2001+(100-ålder)); } Metod3.java
Malmö högskola Rolf Axelsson 2001/2002 DA7010 Objektorienterad programmering 1, 5 poäng Att skriva metoder MetodnamnbiljettPris Beskrivning:Metoden returnerar biljettpriset för bifogade personer. Barn: 60 kr, vuxen: 110 kr, pensionär: 80 kr Parametrar:vuxna (int), barn (int), pensionärer (int) Returvärde:biljettpris (long) public static long biljettPris(int vuxna, int barn, int pensionärer) { return vuxna*110+barn*60+pensionärer*80; }
Malmö högskola Rolf Axelsson 2001/2002 DA7010 Objektorienterad programmering 1, 5 poäng Att skriva metoder Metodnamntecken Beskrivning:Metoden returnerar ’+’ om bifogat tal är positivt, ’0’ om bifogat tal är noll ’-’ om bifogat tal är negativt. Parametrar:tal (int) Returvärde:talets tecken (char) if(tal<0) return ’-’; else if(tal==0) return ’0’; else return ’+’; public static char tecken(int tal) { char tkn = ’+’; if(tal<0) tkn = ’-’; else if(tal==0) tkn = ’0’; return tkn; }
Malmö högskola Rolf Axelsson 2001/2002 DA7010 Objektorienterad programmering 1, 5 poäng Att skriva metoder Metodnamnintervall Beskrivning:Metoden returnerar true om ett tal är i ett intervall false om talet är utanför intervallet Parametrar:tal (int), min (int), max (int) Returvärde:boolean return (tal>=min && tal<=max); public static boolean intervall(int tal, int min, int max) { if(tal>=min && tal<=max) return true; else return false; } Diverse.java
Malmö högskola Rolf Axelsson 2001/2002 DA7010 Objektorienterad programmering 1, 5 poäng Samla metoder i en klass Metoder som funktionsmässigt hör ihop kan man samla i samma klass. Exempel: I klassen Input finns det metoder för inmatning av variabler och paus-metoder. Man skriver metoderna i samma klass. Glöm inte att klassens namn ska börja med stor bokstav medan metodernas namn ska börja med liten bokstav. Använd endast bokstäverna a-z, A-Z och siffror i klassnamnet. public class Diverse { public static long biljettPris(int vuxna, int barn, int pensionärer ) { return vuxna*110+barn*60+pensionärer*80; } public static char tecken(int tal) { // kod } public static boolean intervall(int tal, int min, int max) { // kod } } Diverse.java
Malmö högskola Rolf Axelsson 2001/2002 DA7010 Objektorienterad programmering 1, 5 poäng Placera en klass i ett paket När man skrivit in metoderna i en klass är det dags att bestämma var klassen ska lagras. Detta gör man med package-kommandot. Package-kommandot ska inleda java-filen. package extra; // paketnamn ska börja med liten bokstav När du kompilerar java-filen så placeras class-filen i angiven katalog. I JBuilder skapas katalogen om den inte finns. Katalogen finns i Output Path (normal projektkatalogen). Det går bra att skapa underpaket. package diverse.matematik; ger katalogerna diverse/matematik. Class-filen placeras i katalogen matematik. Placera slutligen paketet i M:\java eller där JBuilder 5 hittar katalogen.
Malmö högskola Rolf Axelsson 2001/2002 DA7010 Objektorienterad programmering 1, 5 poäng Överlagrade metoder Ibland är det praktiskt om en metod kan ta emot olika typer av parametrar. Detta har du använt dig av vid utskrifter: System.out.println(); System.out.println(”Hej”); System.out.println(123); println-metoden är definierad för flera variabeltyper. Att deklarera ett antal metoder med samma namn men med olika parameterlistor kallas för att överlagra metoder. Om vi tittar i klassen String så finner vi flera exempel på överlagrade metoder, t.ex.:String int compareTo 2 versioner int indexOf 4 versioner static String valueOf 9 versioner
Malmö högskola Rolf Axelsson 2001/2002 DA7010 Objektorienterad programmering 1, 5 poäng public char tecken(double tal) { char tkn = ’+’; if(tal<0) tkn = ’-’; else if(tal==0) tkn = ’0’; return tkn; } Överlagrade metoder Metoden public char tecken(int tal) borde gå att använda även med flyttal. Vi skriver därför en tecken-metod som tar emot en double som parameter: Diverse2.java