INTRODUKTION TILL PROGRAMMERING Föreläsning 7 (8.1.2008) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder Jonny Karlsson 8.1.2008 1 Klasser Alla java-källkodsfiler innehåller minst en klass. Alla java-program vi hittils gjort i kursen har innehållit en huvudklass (som har samma namn som namnet på källkodsfilen) Klasser kan användas för att definiera en typ av objekt, t.ex egenskaper hos en person (detta kommer vi in på senare i kursen), Klasser kan också användas som en samling av metoder, t.ex. input klassen som vi i denna kurs använt för att kunna läsa in olika värden från tangentbordet. Dessa typer av Klasser brukar kallas för biblioteksklasser. Jonny Karlsson 8.1.2008 2 Att skapa egna klasser I Java finns en mängd fördefinierade klasser. Ett exempel på en fördefinierad klass är klassen System som vi redan gång på gång i denna kurs utnyttjat för att kunna skriva ut text på konsolfönstret. Man kan i Java också vid behov skapa egna klasser. Klassen input är en ”egen” biblioteksklass skapad av Kim Skön som senare en aning modifierats av Jonny Karlsson!!! En ny klass kan definieras i en skild källkodsfil eller i samma källkodsfil som huvudklassen. Klassen input är ett exempel på en klass som har definierats i en egen källkodsfil (input.java). Jonny Karlsson 8.1.2008 3 Att definiera egna klasser Tillsvidare behandlar vi endast hur man definierar egna klasser i samma källkodsfil som huvudklassen. En egen klass i samma källkodsfil som huvudklassen deklareras enligt följande: public class mittJavaProg { public static void main(String args[ ]) { } } class Minklass { } Observera att huvudklassen och endast huvudklassen skall vara ”public”. Huvudklassens namn bör vara samma som källkodsfilens namn. Jonny Karlsson 8.1.2008 4 Att definiera egna klasser Vår tidigare definierade klass ”Minklass” var för enkelhetens skull en tom klass som varken har några egenskaper eller utför några rutiner. En klass kan innehålla bl.a. klassvariabler, klassmetoder, instansvariabler och Instansmetoder. Tillsvidare går vi endast igenom klassvariabler och klassmetoder. Jonny Karlsson 8.1.2008 5 Klassvariabler Exempel: Vi vill definiera en hög matematiska konstanter och samla ihop dessa i en gemensam klass. För enkelhetens skull vill vi nu endast skapa två konstanter: värdet för pi och jordens dragningskraft. Då skulle vi definiera en ny klass, Konstanter, som innehåller två klassvariabler: pi och gravitation: class Konstanter //definierar en ny klass som heter Konstanter { static float pi = 3.14; static float gravitation = 9.8; } Jonny Karlsson 8.1.2008 6 Klassvariabler Observera nyckelordet static framför variablerna i klassen Konstanter. Nyckelordet static berättar att variabeln skall vara statisk vilket betyder att det endast kan förekomma en instans eller en ”kopia” av denna variabel (mera om instanser kommer senare). En statisk variabel brukar man kalla för klassvariabel. En statisk variabel i en klass kommer man åt direkt via klassnamnet och m.h.a punktnotation: klassnamn.variabelnamn. Punktteknet som används här kallas i Java för syftningsoperator Jonny Karlsson 8.1.2008 7 Klassvariabler public class program { public static void main(String args[ ]) { System.out.println(”Värdet för pi är: ” + Konstanter.pi); System.out.println(”Värdet för pi gravitationen är: ” + Konstanter.gravitation); } } class Konstanter //definierar en ny klass som heter Konstanter { static float pi = 3.14; static float gravitation = 9.8; } Jonny Karlsson 8.1.2008 8 Klassmetoder Metoder kan liksom variabler vara markerade som static. Att en metod är statisk betyder att det bara finns ett enda exemplar av just denna metod (mera om detta senare). En statisk metod kallas för klassmetod. Jonny Karlsson 8.1.2008 9 Klassmetoder Exempel: Vi vill programmera en mängd olika metoder som beräknar arean av olika typer av geometriska figurer och samla alla dessa metoder i en biblioteksklass. För enkelhetens skull gör vi nu endast 3 metoder: En metod som beräknar arean av en: kvadrat rektangel Cirkel Vi behöver då kanske en konstant för pi (klassvariabel) och så behöver vi tre k lassmetoder: Se nästa sida Jonny Karlsson 8.1.2008 10 Klassmetoder class FigurArea { static float pi = 3.14; static float kvadrat(float bas) { return bas*bas; } static float rektangel(float bas, float hojd) { return bas*hojd; } static float cirkel(float radie) { return 2*pi*radie; } } Jonny Karlsson 8.1.2008 11 Klassmetoder En klassmetod kommer man från en annan klass åt på samma sätt som en klassvariabel dvs. direkt via klassnamnet och m.h.a punktnotation: Klassnamn.metodNamn ... ... System.out.println(”Arean för en cirkel med radien 4.5 ar ” + FigurArea.cirkel(4.5)); .. .. För ett enhetligt exempel se: exempelX Jonny Karlsson 8.1.2008 12 Klassmetoder Vi har nästan under hela kursens gång använt oss av klassmetoder utan att vi vetat om det!!! T.ex. Metoden readInt() som vi använt för att läsa in heltal från tangentbordet är en klassmetod i klassen input. Därför har vi anropat den så här: input.readInt() Studera källkoden för input klassen här. Jonny Karlsson 8.1.2008 13