Objekt och klasser - Introduktion Begreppet objekt Hur klasser används för att skapa objekt Fördefinierade klasser Metoder och parameteröverföring Definiera klasser Modifierare Statiska variabler och metoder overloading Programmeringsmetodik -Java 59
Ett objekt har: Objekt tillstånd - egenskaper beteenden - vad det kan göra, eller utsättas för Ett bankkonto har konto nummer har saldo insättningar till uttag från Programmeringsmetodik -Java 60
SparKonto.java public class SparKonto { double saldo; public SparKonto(double startsaldo) { saldo = startsaldo; }// constructor SparKonto public void ins(double belopp) { saldo = saldo + belopp; System.out.println(belopp + " insatt."); }// method ins Programmeringsmetodik -Java 61
SparKonto.java public void uttag(double belopp) { if (saldo >= belopp) { saldo = saldo - belopp; System.out.println(belopp + " uttaget."); } else System.out.println("Så mycket kan man inte ta + ut."); }// method uttag public double getsaldo() { return saldo; }// method getsaldo } // class SparKonto Programmeringsmetodik -Java 62
Konton.java class Konton { public static void main (String[] args) { SparKonto jan = new SparKonto (500.00); SparKonto eva = new SparKonto (1000.00); System.out.println ("Jan s saldo: " + jan.getsaldo()); jan.ins (100.00); System.out.println ("Jan s saldo: " + jan.getsaldo()); jan.uttag (75.00); System.out.println ("Jan s saldo: " + jan.getsaldo()); Programmeringsmetodik -Java 63
Konton.java System.out.println ("Eva s saldo: " + eva.getsaldo()); eva.ins (700.00); System.out.println ("Eva s saldo: " + eva.getsaldo()); eva.uttag (2000.00); System.out.println ("Eva s saldo: " + eva.getsaldo()); eva.uttag (1299.62); System.out.println ("Eva s saldo: " + eva.getsaldo()); } // method main } // class Konton Programmeringsmetodik -Java 64
Klasser En klass är en mall för ett objekt Modell/mönster efter vilket objekt skapas En klass definierar metoder och information knutna till objekt Att skapa ett objekt kallas instantiering. Programmeringsmetodik -Java 65
Skapa Objekt Operatorn new skapar ett objekt från en klass: SparKonto eva = new SparKonto (1000.00); Initialiseras till det objekt som skapas av new Objektet genereras av aktuell konstruktor Programmeringsmetodik -Java 66
Konstruktorer Speciell metod som används för att skapa objekt Samma namn som klassen Kan ta parametrar, som ofta initierar attribut i objektet Konstruktorn SparKonto : SparKonto eva = new SparKonto (1000.00); Programmeringsmetodik -Java 67
Initiering i två steg: SparKonto eva; Objekt referenser eva = new SparKonto (1000.00); eller... SparKonto eva = new SparKonto (1000.00); Metoderna till existerande objekt nås med punktoperatorn: jan.uttag (100.00); Programmeringsmetodik -Java 68
Klassen String Teckensträngar är objekt av klassen String String namn = new String ("Pippi Långstrump"); Alternativ för klassen String : String name = "Pippi Långstrump"; Objekt av klassen String kan aldrig ändras Programmeringsmetodik -Java 69
Hjälpmetoder till String String temp,namn; int lgd,index; namn = new String ("Pippi Långstrump"); lgd = namn.length(); System.out.println("3:e=" + namn.charat(2)); temp = namn.tolowercase(); index = namn.indexof( å"); if (temp.equals(namn)) System.out.println("Lika! "); if (temp == namn)... Programmeringsmetodik -Java 70
Klassen Random Klassen Random tillhandahåller en slumptalsgenerator nextint värdemängden för datatypen int Slumptalsfrö i konstruktorn Random slump = new Random(); eller Random slump = new Random(xx); int kast = Math.abs (slump.nextint()) % 6 + 1 Programmeringsmetodik -Java 71
Rätt talområde Uttryck Värden Math.abs(slump.nextInt())%10+1 1 to 10 Math.abs(slump.nextInt())%101 0 to 100 Math.abs(slump.nextInt())%11+20 20 to 30 Math.abs(slump.nextInt())%11-5 -5 to 5 Programmeringsmetodik -Java 72
Referenser En referens till ett objekt är en referens till objektets minnesadress Chess_Piece bishop1 = new Chess_Piece(); ELVKRS All interaktion sker via referens variabel Tilldelning påverkas Programmeringsmetodik -Java 73
Tilldelning Allmänt tas en kopia av ett värde och lagras i en variabel För primitiva typer: num2 = num1; Före Efter QXP QXP QXP QXP Programmeringsmetodik -Java 74
Referens tilldelning För objekt referenser, kopieras minnesadressen: bishop2 = bishop1; Före Efter ELVKRS ELVKRS ELVKRS ELVKRS Programmeringsmetodik -Java 75
Alias Två eller flera referenser till samma objekt kallas alias Bara en kopia av objektet Allt som görs via en referens påverkar alla alias Bra men används med eftertanke Programmeringsmetodik -Java 76
Garbage Collection Om alla referenser tas bort kan objektet inte längre nås. Objektet blir då oanvändbart I java tas alla sådana objekt bort. Kallas automatisk garbage collection Programmerarens ansvar i en del andra språk Programmeringsmetodik -Java 77
Syntax för metoder: Metoder retur-typ metod-namn ( parameter-lista ) { sats-lista } Programmeringsmetodik -Java 78
Exempel int third_power (int number) { int cube; cube = number * number * number; return cube; } // metod third_power Programmeringsmetodik -Java 79
Metoder Kan innehålla lokala deklarationer & exekverbara satser Lokalt deklarerade variabler Metoden third_power utan lokala variabler : int third_power (int number) { return number * number * number; } // metod third_power Programmeringsmetodik -Java 80
return - satsen I metod-huvudet anges returvärdets typ Om inget värde returneras anges void Satsen return anger vilket värde som returneras Typreglerna måste följas Programmeringsmetodik -Java 81
Programflödet Metoden main anropas av systemet när bytecoden ges till interpretatorn Återhoppet sker till anropsstället PDLQ P\0HWKRG P\0HWKRG Programmeringsmetodik -Java 82
Parametrar En metod kan ta noll eller flera parametrar Varje parameter specificeras med typ och namn formella parametrar aktuell parametrar Programmeringsmetodik -Java 83
Parameteröverföring Kopia av värdet till den formella parametern Både primitiva typer och objektreferenser När en referens överförs blir den formella parametern ett alias för aktuell parameter Se ParameterPassing.java (s. 226) Programmeringsmetodik -Java 84
Syntax : class klass-namn { } deklarationer konstruktorer metoder Definiera klasser Attribut/variabler, konstruktorer och metoder kallas medlemmar Programmeringsmetodik -Java 85
Definiera klasser class Account { int account_number; double balance; Account (int account, double initial) { account_number = account; balance = initial; } // konstruktor Account void deposit (double belopp) { balance = balance + belopp; } // metod deposit } // klass Account Programmeringsmetodik -Java 86
En konstruktor : Konstruktorer För att initialisera nytt objekt Samma namn som klassen Returnerar inget värde, void anges inte Bra att alltid definiera en konstruktor Programmeringsmetodik -Java 87
Klasser och objekt Klassen definierar data typen för ett objekt, men lagrar inga värden Varje objekt har eget minnesutrymme Variabler i en klass kallas instansvariabler Alla metoder i en klass har tillgång till attributen i klassen Metoder delas i klassen Programmeringsmetodik -Java 88
Inkapsling Ett objekt ska klara sig själv - all manipulation via metoderna Gör det svårt för utanförstående att manipulera objekten på ett annat sätt än det var tänkt. Okänt för användaren hur saker görs Abstraktion Objekten kan ses som svarta lådor Programmeringsmetodik -Java 89
Modifierare Inkapsling görs med visibility modifiers synlighets modifierare. Modifierarna är reserverade ord Vi har tidigare sett på final som definierar konstanter Tre modifierare: public, private och protected Programmeringsmetodik -Java 90
Modifierare public : kan nås överallt ifrån protected : kan nås överallt i paketet private : kan nås inom klassen utan modifierare : kan nås överallt i paketet Appendix F Programmeringsmetodik -Java 91
Modifierare Allmän regel : inga attribut public Metoder som manipulerar objektet public Kallas service metoder Hjälp metoder inte public Programmeringsmetodik -Java 92
static static - både attribut och metoder Associerar med klassen snarare än objektet Avsteg ifrån objekts-tanken Programmeringsmetodik -Java 93
Statiska attribut Normalt har varje objekt eget minnesutrymme static gör variabeln gemensam för alla objekt i klassen private static int count; Kallas ibland klassvariabler Programmeringsmetodik -Java 94
Statiska metoder Metoder anropas via ett objekt Om metoden är statisk anropas den med klassnamnet Exempel : klassen Math i java.lang innehåller statiska matematiska operationer Math.abs(num) -- absolutbeloppet Keyboard.readFloat() Appendix M Programmeringsmetodik -Java 95
Statiska metoder main är statisk; anropas av systemet utan att något objekt skapas Kan ej referera instansvariabler Kan referera statiska variabler eller lokala variabler Statiska metoder kallas ibland klassmetoder Programmeringsmetodik -Java 96
Överlagring Överlagring overloading : samma namn för flera metoder Signaturen = parametrarnas antal, typ och ordning Signaturen måste vara unik Returtypen är inte del av signaturen Programmeringsmetodik -Java 97
println println (String s) println (int i) println (double d) etc. System.out.println ("The total is:"); System.out.println (total); Olika versioner av metoden println Programmeringsmetodik -Java 98
this Objektet kan referera till sig själv Skicka sig själv som parameter t.ex. product_buyer.order_stock(this) Programmeringsmetodik -Java 99
Räckvidd (scope) En instansvariabel är tillgänglig i hela klassen. För lokala variabler gäller att de är tillgängliga i det block man har deklarerat dem. Man får ej återanvända variabelnamn för lokala variabler deklarerade i ett omslutande block. this kan användas för att komma åt en instansvariabel om man har en lokal variabel med samma namn. Programmeringsmetodik -Java 100