Modularisering I Java Skapa egna metoder i Java

  • Slides: 10
Download presentation
Modularisering I Java • Skapa egna metoder i Java • Definiera parametrar och skicka

Modularisering I Java • Skapa egna metoder i Java • Definiera parametrar och skicka argument • Anropa metoder och ta emot returvärden • Skapa egna klasser i Java • Skilja på klassmetoder och instansmetoder Alice in Action with Java 1

Metoder i java • Mönster för en java-metod: [Accessmode] [static] Returntype Methodname (Params) {

Metoder i java • Mönster för en java-metod: [Accessmode] [static] Returntype Methodname (Params) { Statements [return expression] } • Accessmode: public, private, protected • Static: ordet inkluderas om det är en klassmetod • Returntype: typen på det värdet som returneras. Om inget värde returneras skrivs void. • Params: En kommaseparerad lista av parameterdeklarationer för denna metod. Alice in Action with Java 2

Skapa program med egna klasser på olika sätt • Du vill fylla ett rum

Skapa program med egna klasser på olika sätt • Du vill fylla ett rum med ballonger. Frågan är: Hur många ballonger ska du köpa? • Lösning: – – Fråga användaren om radien på ballongen Läs in radien från tangentbordet Beräkna volymen av en ballong Beräkna volymen av rummet (dimensionerna är deklarerade som konstanter) – Beräkna antalet ballonger som behövs för att fylla rummet – Skriv ut antalet på skärmen Alice in Action with Java 3

Lösning 1: metodbibliotek • Första beslutet: skriv metoder för att beräkna volymerna (dessa kanske

Lösning 1: metodbibliotek • Första beslutet: skriv metoder för att beräkna volymerna (dessa kanske återanvändas) • Andra beslutet: lagra metoderna i separata klasser för att göra programmet mer modulärt • Tre klasser behövs för att implementera programmet: – Balloonprank: innehåller main() (drivrutinen) – Sphere: bibliotek som innehåller sfär-metoder – Box: bibliotek som innehåller box-metoder Alice in Action with Java 4

Lösning 2: Objekt-orienterat • Denna lösning fungerar, men använder inte den fulla kapaciteten hos

Lösning 2: Objekt-orienterat • Denna lösning fungerar, men använder inte den fulla kapaciteten hos en klass… – Metoderna används oberoende av objekt – Ex. Box. volume(): Dimensionerna måste skickas med för varje metod-anrop • Alternativ: skapa klasser som kan bli mallar för objekt – Dessa ska innehålla instansmetoder och instansvariabler – Vi kan då sända meddelanden till objekt Alice in Action with Java 5

Box-klassen • Vi gör om Box-klassen så att vi kan skapa Box-objekt • Vi

Box-klassen • Vi gör om Box-klassen så att vi kan skapa Box-objekt • Vi skickar bara dimensionerna en gång, när vi skapar objektet • För detta måste vi: – Skapa instansvariabler för längd, bredd, höjd – Skapa en konstruktor för ett Box-objekt – Skapa en instansmetod för att beräkna volymen – Skapa sk. ’getters’ för instansvariablerna Alice in Action with Java 6

Box-klassen (forts) • Egenskaper hos en instansvariabel: – Definieras inom en klass, men utanför

Box-klassen (forts) • Egenskaper hos en instansvariabel: – Definieras inom en klass, men utanför en metod – Innehåller inte nyckelordet static – Varje objekt har sin egen kopia av instansvariablerna • Egenskaper hos en klassvariabel: – Definieras inom en klass, men utanför en metod – Innehåller nyckelordet static – Det finns bara en kopia av klassvariablerna som alla objekt delar • Åtkomstspecificering: private, protected, public – Tumregel: använd private för instansvariabler Alice in Action with Java 7

Konstruktorer (constructors) • Skapar objektet, initierar instansvariabler med de värden anroparen anger, skickar tillbaka

Konstruktorer (constructors) • Skapar objektet, initierar instansvariabler med de värden anroparen anger, skickar tillbaka en referens till objektet • Ex: Box box 1 = new Box(3, 4, 2. 5); • Namnet på en konstruktor är alltid samma som namnet på klassen • En konstruktor har ingen returtyp (inte ens void) Alice in Action with Java 8

Box-metoder • Instansmetod – Ett meddelande som sänds till en instans av en klass

Box-metoder • Instansmetod – Ett meddelande som sänds till en instans av en klass – Innehåller inte nyckelordet static • Ex anrop: – double box 1 Vol = box 1. volume() • Accessor method (getter) – Instansmetod som returnerar värdet av en instansvariabel Alice in Action with Java 9

Jämförelse mellan ballongprogrammen • Programmen producerar samma resultat • I det nya programmet: –

Jämförelse mellan ballongprogrammen • Programmen producerar samma resultat • I det nya programmet: – Sphere- och Box-objekt modellerar ballonger och rum – Sphere- och Box-klasserna kan användas i andra sammanhang Alice in Action with Java 10