Malmö högskola Rolf Axelsson 2004/2005 DA7350, 10 poäng char Klassen String Klass och attribut Klass och metoder Föreläsning 30/9-2004
Malmö högskola Rolf Axelsson 2004/2005 DA7350, 10 poäng char
Malmö högskola Rolf Axelsson 2004/2005 DA7350, 10 poäng String namn.charAt(7); Ger tecknet i position 7, dvs. ’e’. Det första tecknet har position 0. namn.length(); Ger antalet tecken i strängen, dvs. 13. namn.substring(3,8); Ger en ny sträng som utgörs av tecknen med start i position 3 och slut i position 7, dvs ”f Axe”. namn.compareTo(str); Jämför strängarna namn och str. Resultat: 0 namn>str namn.equals(str); Jämför strängarna namn och str. Resultat: true - lika, false - olika
Malmö högskola Rolf Axelsson 2004/2005 DA7350, 10 poäng String - körresultat NamnAnalys.java
Malmö högskola Rolf Axelsson 2004/2005 DA7350, 10 poäng Klassen String innehåller variabler Om vi ser hur filen String.java är skriven så upptäcker vi att klassen String innehåller variabler. public final class String implements Serializable, Comparable, … { /** The value is used for character storage. */ private char value[]; /** The offset is the first index of the storage that is used. */ private int offset; /** The count is the number of characters in the String. */ private int count; /** Cache the hash code for the string */ private int hash = 0; String.java
Malmö högskola Rolf Axelsson 2004/2005 DA7350, 10 poäng En klass kan innehålla variabler Man kan samla variabler som hör ihop i en klass. I programmen om löpning (Här Lopp1.java) används två variabler för varje löpare, löparens namn och tid. int tid1,tid2; String namn1,namn2; Till en löpare hör variablerna namn1 och tid1 och till en variablerna namn2 och tid2. Klassen Deltagare innehåller variabler som kan lagra dessa data: public class Deltagare { public String namn; public int tid; } Variablerna benäms ofta instansvariabler eller attribut. Filen ska heta som klassen, dvs Deltagare.java. Lopp1.java Deltagare.java
Malmö högskola Rolf Axelsson 2004/2005 DA7350, 10 poäng En klass kan innehålla variabler public class Deltagare { public String namn; public int tid; } Ett objekt av klassen Deltagare kan användas varje gång man behöver lagra information om en löpare. Så här skaffar man sig ett objekt: Deltagare lopare1= new Deltagare(); Början av deklarationen liknar den du hittills mött: Deltagare lopare1 Först typ av objekt, Deltagare, och sedan ett bra variabelnamn, lopare1. Den stora skillnaden är att man måste skapa objektet. Detta sker i högerledet med operatorn new : = new Deltagare();
Malmö högskola Rolf Axelsson 2004/2005 DA7350, 10 poäng En klass kan innehålla variabler Deltagare löpare1= new Deltagare(); Deltagare löpare2= new Deltagare(); Nu kan man använda Deltagare-objekten i programmet. Man kommer åt instansvariablerna i objektet med punkt- operatorn + deras namn. löpare1.namn = Input.readLine("Ange namn på löpare 1: "); löpare2.namn = Input.readLine("Ange namn på löpare 2: "); : löpare1.tid = Input.readInt("Ange … för "+löpare1.namn); löpare2.tid = Input.readInt("Ange … för "+löpare2.namn); Lopp2.java
Malmö högskola Rolf Axelsson 2004/2005 DA7350, 10 poäng En klass kan innehålla metoder I klassen kan man även skriva metoder som använder instansvariablerna. Dessa metoder anropas med punktoperatorn. public class Deltagare { public String namn; public int tid; public String toString() { return "Namn="+namn+" Tid="+tid; } } : // Koden nedan finns i klassen Lopp3 public void resultat(Deltagare delt1, Deltagare delt2) { System.out.println("\nRESULTAT"); System.out.println(delt1.toString()); System.out.println(delt2.toString()); } När metoden toString anropas så används objektets instansvariabler, dvs vid anropet delt1.toString() används instansvariablerna i delt1 Lopp3.java
Malmö högskola Rolf Axelsson 2004/2005 DA7350, 10 poäng private och public Det har visat sig att instansvariabler nästa alltid ska vara private. Detta för att undvika fel i program. (jmf String) public class Deltagare { private String namn; private int tid; public String toString() { return "Namn="+namn+" Tid="+tid; } } private -deklarerade attribut och metoder är endast tillgängliga (synliga) inom klassen. Nu fungerar inte Lopp2.java och Lopp3.java längre eftersom namn och tid endast får användas inom klassen. public -deklarerade attribut och metoder är tillgängliga (synliga) utanför klassen. Vad man behöver för att använda dem är ett objekt (en instans) av klassen.
Malmö högskola Rolf Axelsson 2004/2005 DA7350, 10 poäng private attribut, set- och get-metoder Med hjälp av set- och get-metoder får andra klasser tillgång till attributen. Set-metoder till de attribut som ska kunna ändras och get-metoder för de attribut vars värde ska kunna avläsas. public class Deltagare2 { private String namn; private int tid; : public void setNamn(String inNamn) { namn = inNamn; } public String getNamn() { return namn; } public void setTid(int inTid) { tid = inTid; } public int getTid() { return tid; } public String toString() { String resultat = "Namn: "+namn+" Tid="+tid; return resultat; } } Deltagare2.java Lopp4.java
Malmö högskola Rolf Axelsson 2004/2005 DA7350, 10 poäng Fler metoder i klassen Om två deltagares tid ska jämföras kan metoden compareTo vara användbar. compareTo returnerar: 0om bifogad deltagare har lägst tid public class Deltagare2 { private String namn; private int tid; : public int compareTo(Deltagare2 delt) { if(tid<delt.getTid())// tid<delt.tid går bra return -1; else if(tid==delt.getTid())// tid==delt.tid går bra return 0; else return 1; } } Kortare skrivsätt: public int compareTo(Deltagare2 delt) { return tid-delt.getTid(); } Lopp5.java
Malmö högskola Rolf Axelsson 2004/2005 DA7350, 10 poäng Modell En modell är en förenklad representation av verkligheten. Endast de egenskaper som är viktiga ingår i modellen. En person kan beskrivas med varierande egenskaper, dvs. egenskapernas vikt beror på sammanhanget, t.ex.: Skattemyndigheten finner bl.a. följande egenskaper viktiga: Personnummer, Taxerad inkomst, Skatt Arbetsgivaren finner bl.a. följande egenskaper viktiga: Kompetens, Lönekrav, Lojalitet Adressboken finner bl.a. följande egenskaper viktiga: Namn, Adress, Telefonnummer På samma sätt beskrivs en bil på skilda sätt, t.ex.: Bilhandlaren är intresserad av modell och pris P-vakten är intresserad av modell och registreringsnummer Navigationssystemet är intresserat av bilens geografiska läge
Malmö högskola Rolf Axelsson 2004/2005 DA7350, 10 poäng Klass I datorprogram utgörs en modell av ett objekt. I Java bygger man objekt med hjälp av en klass. Ett komplicerat objekt kan vara uppbyggt av flera andra objekt, dvs. flera andra klasser i programmet. Ett program består normalt sett av många objekt som på olika sätt påverkar varandra. Och en del av objekten som används kan vara av samma typ. Om många personer behandlas i ett program så kommer programmet att använda många objekt av typen Person.
Malmö högskola Rolf Axelsson 2004/2005 DA7350, 10 poäng UppskattaTid.java Vi har tillgång till klassen Tidtagare, vilken kan användas för att mäta tid. Vi ska skriva ett program, UppskattaTid, vilket låter användaren uppskatta ett visst antal sekunder. Hur kan vi utnyttja Tidtagare? public void action() { long tid,tidsrymd; tidsrymd = …; tid = uppskattaTid(tidsrymd); resultat(tidsrymd,tid); System.exit(0); } Tidtagare + start():void + stop():void + getSekunder():double + getMillisSekunder():long Tidtagare – en tidtagare
Malmö högskola Rolf Axelsson 2004/2005 DA7350, 10 poäng Använda klassen Tidtagare UppskattaTid.java public class UppskattaTid { public long uppskattaTid(long tid) { Tidtagare klocka = new Tidtagare(); String txt ="Du ska uppskatta "+(tid/1000)+" sekunder.\n\n"+ "Tryck på OK för att starta tidtagningen."; Output.meddelande(txt); klocka.start(); Output.meddelande("Tryck på OK för att stoppa tidtagningen"); klocka.stopp(); return klocka.getMilliSekunder(); } public void resultat(long tidAttUppskatta, long tid) { String res = "Uppskattning: "+tid+"\n"+ "Fel: "+(tid-tidAttUppskatta)+" ms"; Output.meddelande(res); } public void action() { long tid,tidsrymd; tidsrymd = ((long)(Math.random()*4)+2)*1000; tid = uppskattaTid(tidsrymd); resultat(tidsrymd,tid); System.exit(0); } }
Malmö högskola Rolf Axelsson 2004/2005 DA7350, 10 poäng public class Tidtagare { private long startTid; private long stoppTid; public void start() { startTid = System.currentTimeMillis(); } public void stopp() { stoppTid = System.currentTimeMillis(); } public long getMilliSekunder() { return stoppTid-startTid; } public double getSekunder() { return (stoppTid-startTid)/1000.0; } Klassen Tidtagare Klassen Tidtagare lagras i filen Tidtagare.java Två instans- variabler Fyra instans- metoder Tidtagare.java