• No results found

Java, klasser, objekt (Skansholm: Kapitel 2)

N/A
N/A
Protected

Academic year: 2022

Share "Java, klasser, objekt (Skansholm: Kapitel 2)"

Copied!
6
0
0

Loading.... (view fulltext now)

Full text

(1)

Java, klasser, objekt (Skansholm: Kapitel 2)

Sven-Olof Nyström Uppsala Universitet

11 mars 2005

Objectorienterad programmering Sida 1

Klasser och objekt Sven-Olof Nyström

Vad är en klass?

• En klass är ett sätt att beskriva en mängd objekt och deras gemensamma egenskaper.

• En klassdefinition innehåller datafält ...

• ... och metoder (= “funktioner” i C).

• Man kan också säga: En klassdefinition beskriver kod och data.

• Ett Javaprogram består av en eller flera

klassdefinitioner (och ingenting kan finnas utanför en klassdefinition).

Klasser och objekt

• Varje objekt tillhör en viss klass. (Objektets klass är detsamma som objektets typ.)

Vi säger att objektet är en instans av klassen.

• Alla objekt av en viss klass kan användas på samma sätt–de har samma “gränssnitt”.

• En definition av en viss klass kan ses som en mall för objekt av den typen.

Objectorienterad programmering Sida 3

Klasser och objekt Sven-Olof Nyström

Klassdefinition: Exempel class Person {

int ålder;

String namn;

}

• Konvention: Namnet på en klass skrivs med stor bokstav.

’namn’ och ’ålder’ är fält i objekt av typen Person.

• Skansholm: instansvariabler

• Engelska: field

(2)

Klassdefinition: Körexempel Person x;

x = new Person ();

x.ålder = 42;

x.namn = "Kalle Karlsson";

System.out.println(

"Personen " + x.namn + " är " + x.ålder + " år gammal");

ger utskriften Personen Kalle Karlsson är 42 år gammal

Objectorienterad programmering Sida 5

Klasser och objekt Sven-Olof Nyström

Referensvariabler, exempel 1

• Givet tidigare klassdefinition för Person

• och deklarationen Person x;

• Variablen x får värdet null (default-värde)

Referensvariabler, exempel 2 Person x;

Person y;

x = new Person ();

y = x;

x.ålder = 42;

x.namn = "Kalle Karlsson";

Vilken ålder har y?

Objectorienterad programmering Sida 7

Klasser och objekt Sven-Olof Nyström

Referensvariabler och referenssemantik

• Givet en klassdefinition class X { ... }

• och en variabeldeklaration X a;

Variabeln a lagrar en referens.

(3)

Referensvariabler (forts)

• Exempel:

X a, b;

a = new X();

b = a;

• Nu refererar a och b till samma objekt.

Objectorienterad programmering Sida 9

Klasser och objekt Sven-Olof Nyström

Referensvariabel, regel

Variabler av klasstyp har referenssemantik.

• Nya objekt skapas med new.

• Tilldelning kopierar referensen, inte objektet.

Metoder (“Funktioner i klasser”) class A {

returtyp metodnamn () { ...

} }

Objectorienterad programmering Sida 11

Klasser och objekt Sven-Olof Nyström

Enkelt exempel: metod och fält class A {

int x = 7;

int x_plus_ett() { return x + 1;

} }

Om variabeln a är deklarerad och initializerad enligt A a = new A();

Vad returnerar uttrycket a.x_plus_ett()?

(4)

Metoder (forts)

• Om inget värde ska returneras, skriv void i stället för returtyp.

• En variabel kan deklareras lokalt inom en metod (ungefär som inom en C-funktion). Kallas “lokala variabler”.

Lokala variabler måste alltid ges startvärden.

Objectorienterad programmering Sida 13

Klasser och objekt Sven-Olof Nyström

En return-sats gör två saker:

1. anger vilket värde som ska ges som resultat från metoden

2. avslutar metoden

• “return;” avslutar anropet för en metod som inte returnerar nåt värde (void).

• “return Uttryck;” beräknar uttrycket och avslutar anropet genom att returnera det beräknade värdet.

• Bara void-metoder får nå slutet av metodkroppen utan att stöta på ett return. Kontrollen återvänder automatiskt till anroparen.

Metoder: exempel class A {

int x = 5;

int get_x() { return x; } }

class B {

int m1() { return 7; } int m2() {

A a = new A();

return m1() + a.get_x();

} }

Objectorienterad programmering Sida 15

Klasser och objekt Sven-Olof Nyström

Parametrar och argument

• En metod kan ges en parameterlista, tex int f(int x, float y) { ... }

En metods parametrar skrivs inom parenteserna i definitionen. Fungerar som lokala variabler, men får sina startvärden av anroparen.

Med argumenten till ett anrop menas de faktiska värden som anroparen beräknar och skickar till metoden.

• När ett objekt passas som argument kopieras referensen (precis som vid tilldelning)

(5)

Parametrar, exempel

class A {

int add(int a, int b) { return a + b;

}

int m() { int x = 4;

return add(x,3) + 10;

}}

Objectorienterad programmering Sida 17

Klasser och objekt Sven-Olof Nyström

Referensvariabler i metodanrop

• Med en metoddefinition void f(X c) { ... }

och ett anrop f(a)

kommer variabeln c inom metodkroppen att referera till samma objekt som a

Regel: Objekt kopieras aldrig (om man inte ber uttryckligen om det).

Konstruktorer: Att skapa nya objekt Exempel:

class Person { int ålder;

String namn;

Person (String n, int å) { ålder = å;

namn = n;

} }

Vi skapar en ny person med (tex) Person x = new Person("Kalle", 42);

Objectorienterad programmering Sida 19

Klasser och objekt Sven-Olof Nyström

Konstruktorer (forts)

• En konstruktor har alltid samma namn som klassen

• En konstruktor deklareras utan resultattyp (inte ens void)

• En konstruktor ska initialisera objektets fält (instansvariabler)

• Om en klass inte har någon konstruktor, kommer Javakompilatorn att definiera en parameterlös konstruktor (defaultkonstruktorn)

(6)

Namns räckvidd

• Alla namn på instansvariabler och metoder kan kommas åt direkt inom hela den egna klassen

• Namn på lokala variabler inom ett block (metodkropp) kan bara kommas åt inom blocket (metodkroppen) De existerar bara då!

Objectorienterad programmering Sida 21

Klasser och objekt Sven-Olof Nyström

Namns räckvidd (forts)

• Om samma namn används för flera olika saker gäller den användning som är närmast".

• Instansvariabler och metoder kan alltid kommas åt genom prefixa dem med this:

this.namn ger instansvariabeln i nuvarande klassen även om namn skulle ha flera betydelser.

Vad vi vet om objekt och klasser

• En klass definierar en typ av objekt.

• Varje klass har

– ett antal fält (instansvariabler) – ett antal metoder

– en konstruktor

• Idé: Fälten beskriver den interna representationen.

Metoderna beskriver gränssnittet till omvärlden.

• Allt data är kopplat till ett visst objekt.

Objectorienterad programmering Sida 23

References

Related documents

– Östergötland har nu möjlighet att undvika fallgroparna och bli ett föregångs- län, när det gäller vårdval, säger Jan-Peter Strömgren, förbundsordförande.. Vårdval

[r]

 Vi utökar klassen Fordon med två metoder public void

Om man inte anger synlighet för en klass som definieras inom ett paket kommer klassen att vara sylig för andra klasser inom samma paket. På samma sätt: Om man inte anger synlighet

Birgitta Franzén AM Forsgårdens Golfklubb Göran Franzén AM Forsgårdens

Inger Falk AM Forsgårdens Golfklubb Tommy Berggren AM Forsgårdens

[r]

Fullmakt för ombud och ersättare för dessa utfärdas av arbetarekommunens styrelse och sänds till partidistriktet inom av distriktsstyrelsen angiven tid... Fullmaktsgranskningen