Alice in Action with Java 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
Alice in Action with Java 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
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
Lösning 1: metodbibliotek Första beslutet: skriv metoder för att beräkna volymerna (dessa kan 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
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
Alice in Action with Java 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
Alice in Action with Java 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: 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
Konstruktorer (constructors) Skapar objektet, initierar instansvariabler med de värden anroparen anger, skickar tillbaka en referens till objektet Ex: Box box1 = 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
Alice in Action with Java Box-metoder Instansmetod Ett meddelande som sänds till en instans av en klass Innehåller inte nyckelordet static Ex anrop: double box1Vol = box1.volume() Accessor method (getter) Instansmetod som returnerar värdet av en instansvariabel Alice in Action with Java
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