JAVA Grunder i Klasser och Objektorientering

Download Report

Transcript JAVA Grunder i Klasser och Objektorientering

Värmdö Gymnasium Datainstitutionen

Programmering B

110118

JAVA Grunder i Klasser och Objektorientering

JAVA Grunder i Klasser och Objektorientering

Ett objekt har kod (metoder) och data (variabler). Först skapar vi en mall (klassdefinition) för hur objekten ska se ut. För att skapa en klass med namnet Elev skriver vi följande:

Klasser

Ett objekt har kod (metoder) och data (variabler). Först skapar vi en mall (klassdefinition) för hur objekten ska se ut. För att skapa en klass med namnet Elev skriver vi följande:

class

Elev {

int

provPoäng; //variabel //variabel

void

skrivut() { System.out.println("Namn: " + elevNamn + " Poäng: " + provPoäng); } //metod }

Konstruktorer

Det finns en speciell typ av metoder som kallas konstruktormetoder, som anropas varje gång ett nytt objekt av den aktuella klassen skapas. Konstruktormetoder har ALLTID samma namn som klassen de tillhör. Konstruktormetoder är mycket praktiska eftersom de kan tvinga användaren att bifoga t.ex. några värden för att överhuvudtaget tillåtas skapa ett objekt. Lägg till följande konstruktormetod någonstans mellan klamrarna som ramar in klassen Elev. Lämplig plats är efter variablerna och före befintliga metoder. Elev(int pP, String eNamn) { provPoäng = pP; //konstruktor elevNamn = eNamn; } Notera att om man inte lägger till någon egen konstruktormetod lägger Java automatiskt till en egen tom metod för att ändå möjliggöra konstruktion av objektet. Spara filen som

Elev.java

och sedan kompilera så ska du ha en fil som heter

Elev.class

i det aktuella biblioteket. Du kan även försöka köra ”programmet”. Det fungerar inte eftersom klassen Elev inte innehåller någon mainmetod.

Test av klassen Elev

Börja med att skapa filen TestaElev.java i samma bibliotek som Elev.class befinner sig i. För att undersöka klassen Elev lite närmare skapar vi ytterligare en liten klass som vi döper till TestaElev. Skriv in följande rader i filen TestaElev.java. class TestaElev //En klass vid namn TestaElev skapas. { public static void main(String args[]) { //Skapa objektet student som är av typen Elev. Elev student = new Elev(14, "Kalle Anka"); student.skrivut(); //student’s namn och resultat skrivs ut student.provPoäng = 16; //student’s provPoäng ändras till 16. } (Notera att texten efter snedstrecken (//) inte behöver skrivas in eftersom de bara är kommentarer.) Kompilera och kör programmet. Försök att lista ut hur utskrifterna kommer att bli.

Sida 1

Värmdö Gymnasium Datainstitutionen

Programmering B

110118

JAVA Grunder i Klasser och Objektorientering

Programmet i korta drag Elev student = new Elev (14, "Kalle Anka");

Först anges vilken typ av objekt vi ska skapa (i vårt fall Elev) följt av objektets namn (i vårt fall student). Detta följs i sin tur av ett lika med tecken och nyckelordet new och slutligen den konstruktormetod som ska anropas. Man kan även sära på själva deklarationen och konstruktionen av objektet. Syntaxen blir då som följer:

Elev student; student = new Elev (14, "Kalle Anka");

Efter att vi har konstruerat objektet skriver vi ut informationen om det genom att anropa metoden skrivut( ):

student.skrivut( );

På nästa rad ändrar vi students poäng till 16:

student.provPoäng = 16; Garbage Collection (Skräp insamling)

Vi har lärt oss att skapa objekt med operatorn new, något som ni däremot kanske inte har reflekterat över är hur man tar bort objekt. För objekten måste väl tas bort någon gång? De kan ju inte ligga och skräpa i datorns minne i evigheters evigheter! I Java finns det en inbyggd funktion som tar hand om denna skräp insamling. Denna funktion kallas garbage collection och fungerar lite förenklat ungefär så här: Alla objekt som skapas hålls under uppsikt av JVM och när de inte längre används (saknar referenser) ställs de i kö för att bli garbage collected. Då ett objekt blir garbage collected anropas dess finalisemetod som i sin tur frigör det minne som objektet tagit i anspråk. Garbage collectorn kommer att börja avlägsna oanvända objekt förrän det börjar bli ont om minne, programmet avslutas eller ett anrop på System.gc() sker. Garbage collecting är en mycket bekväm funktion som befriar programmeraren från den betungande uppgiften att hålla reda på när objekt inte längre används och bör tas bort.

Sida 2

Värmdö Gymnasium Datainstitutionen

Programmering B

110118

JAVA Grunder i Klasser och Objektorientering

Här kommer koden till programmet (inklusive en liten utökning):

import java.io.*; class Elev { //OBS!! För att komma åt in och utmatnings-metoder Elev(int pP, String eNamn) { provPoäng = pP; elevNamn = eNamn; } { System.out.println("Namn: " + elevNamn + " Poäng: " + provPoäng); } } class TestaElev { //En klass vid namn TestaElev skapas. public static void main(String argument[]) { //Skapa objektet student som är av typen Elev. Elev student = new Elev(14, "Kalle Anka"); student.skrivut(); //student's namn och resultat skrivs ut student.provPoäng = 16; //student's provPoäng ändras till 16. student.skrivut(); Elev student2 = new Elev(26,"Musse Pigg"); student2.skrivut(); Elev grupp[] = new Elev[3]; //variabeln grupp refererar till // en array där varje element i sin tur refererar till // ett Elev-objekt. För att skapa dessa måste // new-operatorn anropas för varje objekt. Se nedan. grupp[0] = new Elev(31,"Knatte"); grupp[1] = new Elev(31,"Fnatte"); grupp[2] = new Elev(31,"Tjatte"); for (int i=0; i<3; i++) grupp[i].skrivut(); } }

Sida 3

Värmdö Gymnasium Datainstitutionen

Programmering B

110118

JAVA Grunder i Klasser och Objektorientering

Övningar

Övning 1

Skriv ett program som skriver ut alla jämna tal mellan 1 och 20.

Övning 2

Skriv ett program som skriver ut talserien som startar med följande sekvens 1,2,4. Nästa tal blir summan av de tre tidigare, 7. Nästa (7+4+2), 13. Nästa (13+7+4), 24. Osv. Skriv ut de 20 första talen.

Övning 3

Skriv av ovanstående program ,om klasser och objektorientering, och få det att fungera, samt förstå vad som händer i programmet rad för rad.

Övning 4

Skapa en klass Boll enligt nedan, skapa sen en klass TestaBollar som utnyttjar klassen Boll, där den skapar en boll, sätter färg och radie på den samt skriver ut info om aktuell boll. class { int radie=0; String färg=” ”; void skrivutBollInfo( ) { System.out.println(”Bollfärg : ”+färg+” Radie = ”+radie); } } Skriv nu klassen TestaBollar som innehåller main-funktionen och kör sen applikationen. Eftersom vi inte skrivit någon egen konstruktor använder vi default-konstruktorn, dvs vi skapar ett nytt bollobjekt genom att skriva Boll minBoll = new Boll(); Skalet till TestaBollar: public class TestaBollar { public static void main(String args[]) { //skapa en boll //sätt färg och radie på bollen //skriv ut info om bollen } }

Övning 5

Utöka ovanstående boll-applikation så att du skapar tre bollar, ger dom radie och färg, samt skriver ut info.

Övning 6

Om du inte använde en array i förra uppgiften gör om den men använd array (t ex Boll minaBollar = new Boll[3]; )

Övning 7

Utöka din klass Boll med en konstruktor som sätter radie och färg på bollen när den anropas. Samt skriv om din TestaBollar klass så att den utnyttjar konstruktorn vid skapandet av Boll-objekt.

Läxa:

Läs noggrant igenom detta häfte. Läs s 47-81 (ej 71-77) i boken. Gör klart övningarna. Hitta på ett eget exempel där du utnyttjar det du lärt dig.

Sida 4