170 likes | 295 Views
Föreläsning 13. Polymorfism, Paket och JAR-filer. Polymorfism. Ordet härstammar från grekiskan Poly – många Morf – form Polymorf – många former Någonting som antar många former Överlagring av metoder är en form av polymorfism
E N D
Föreläsning 13 Polymorfism, Paket och JAR-filer
Polymorfism • Ordet härstammar från grekiskan • Poly – många • Morf – form • Polymorf – många former • Någonting som antar många former • Överlagring av metoder är en form av polymorfism • Vilken metod som anropas avgörs av antalet parametrar (kompilering)
Polymorfism • Alla metoder i Java har automatisk stöd för polymorfism • En metod kan finnas i flera varianter och vilken som exekveras väljs under körning (dynamisk bindning) • Utnyttjas framför allt när man ärvt och omdefinierat metoder • Används för generella metoder i en arvshierarki (ex, print, beraknaArea)
Exempel GeometriObjekt Kub Rektangel Cirkel Triangel + beraknaArea() : double + beraknaArea() : double + beraknaArea() : double + beraknaArea() : double + beraknaArea() : double OBS!Ej abstrakt längre
Exempel (forts) • Implicit typkonvertering gör följande möjligt: GeometriObjekt r = new Rektangel(10, 10, 20, 20);GeometriObjekt c = new Cirkel(50, 50, 10);r.beraknaArea();c.beraknaArea(); • En variabel av GeometriObjekt kan referera till alla dess subklasser • Vilken metod som ska utföras bestäms under exekveringen
Exempel (forts) • Vi vill skapa en samling av geometri objekt och skapar därför en array GeometriObjekt[] figurer = new GeometriObjekt[4];figurer[0] = new Rektangel(100, 100, 10, 20);figurer[1] = new Cirkel(50,50, 20);figurer[2] = new Kub(20, 70, 10);figurer[3] = new Triangel(150, 10, 50, 10);
Exempel (forts) Variabel Array av GeometriObjekt figurer 0 1 2 3 Cirkel beraknaArea() Kub beraknaArea() Triangel beraknaArea() Rektangel beraknaArea() Objekt • Via arrayen figurer vill vi nu beräkna arean för alla objekt
Exempel (forts) • Finns det inte stöd för polymorfism måste vi själva kolla vilken metod som ska anropas for (int i = 0; i < figurer.length; i++){if (figurer[i] instanceof Rektangel) { Rektangel r = (Rektangel)figurer[i]; //Konvertera till rätt typ r.beraknaArea(); }else if (figurer[i] instanceof Kub) { Kub k = (Kub)figurer[i]; //Konvertera till rätt typ k.beraknaArea(); } // osv… för varje subklass}
Exempel (forts) • Finns stöd för polymorfism hittar exekveringsmiljön själv rätt metod under körning (dynamisk bindning) for (int i = 0; i < figurer.length; i++){ figurer[i].beraknaArea();}
Paket (package) • Används för att gruppera ihop klasser som hör ihop • Javas egna standardbibliotek kommer tillgängliga som paket • java.lang, java.io, javax.swing etc • Vi kan även göra egna paket • Speciella åtkomstregler gäller • protected – ger åtkomst i samma paket
Deklaration Av Paket • Bestäms genom att först i källkods-filen ange paketets namn: package paket_namn; • En klass kan endast tillhöra ett paket • Paketdeklarationen måste stå först • Paketnamn kan bestå av flera delar package javaI.grafik;package javaII.grafik; • Anges inget paket default-paket
Katalogstruktur • Bytekodfilerna sparas i kataloger baserade på paketnamnet. package grafik;// klasser måste sparas i katalogen grafik package javaI.grafik;// klasser måste sparas i katalogen javaI/grafik package javaII.grafik;// klasser måste sparas i katalogen javaII/grafik • Filer i default-paketet sparas iaktuell katalog
Import Av Paket • För att använda klassen anges paketnamnet före namnet på klassen // Använda Cirkel från paketet javaI.grafikjavaI.grafik.Cirkel c = new javaI.grafik.Cirkel(10, 10, 20); • Enklare att importera klassen import javaI.grafik.Cirkel; // Bara Cirkelimport javaI.grafik.*; // Alla klasser Cirkel c = new Cirkel(10, 10, 20); • Import placeras efter eventuella paketdeklarationer
Classpath • Javamaskinen letar efter klasser som anges i miljövariabeln CLASSPATH • classpath = . • Söker efter ”.class”-filer i aktuell katalog • classpath = .;h:\kurser • Söker efter ”.class”-filer i aktuell katalog och dessutom i h:\kurser • Söker också i underkataloger • Sätts på samma sätt som path
JAR-filer • Filformat baserat på ZIP • Packar ihop många filer till en • Utvecklades för Applets på Internet • Stödjer komprission • Reducerar storleken på filen och ger snabbare nedladdning • Kan öppnas och manipuleras i WinZip JAR = Java ARchive
Skapa JAR-filer • Vi använder verktyget jar • Kräver ett antal indata, t.ex • Namnet på JAR-filen som ska skapas • De class-filer som ska ingå • En manifest-fil (information om jar-filen) Syntax: jar {ctxu}[vfm0M] [jar-fil] [manifest-fil] files ... jar cf minjarfil.jar *.classAlla .class filer i aktuell katalog placeras i filen minjarfil.jar jar cfm minjarfil.jar minmanifest.txt *.classSamma som ovan, men vi använder en egen manisfest-fil
Använda JAR-filer Måste sluta med en blankrad • Manifestfilen innehåller information om bl.a vilken klass som ska startas • För att köra en JAR-fil skriver vi: java –jar minjarfil.jar • För att använda klasser i en JAR-fil måste vi sätta sökvägen till filen: classpath = h:\java\labbar\minjarfil.jar;.