Presentation laddar. Vänta.

Presentation laddar. Vänta.

Arv, abstrakta klasser och gränssnitt

Liknande presentationer


En presentation över ämnet: "Arv, abstrakta klasser och gränssnitt"— Presentationens avskrift:

1 Arv, abstrakta klasser och gränssnitt
Java doc

2 Viktiga OO-begrepp Klass Objekt Överskugga Överlagra Ärva Polymorfism
Dynamisk bindning Abstrakta klasser Gränssnitt

3 Klass diagram Person namn Student Anstalld namn skola namn
arbetsgivare lön ProgramStudent namn skola program inskrivningsÅr

4 Rektangel En rektangel: Rektangel double bredd -double längd
+getLängd:double +setLängd(double) +getBredd:double +setBredd(double) +area():double +jämförArea:double +comperTo(Object):int +equals(Object):boolean +toString:String

5 Cirkel med mittpunkt En Cirkel som har ett objekt Punkt har Cirkel
-double radie -Punkt mittPunkt +getRadie:double +setRadie(double) +getMittPunkt:Punkt +setMittPunkt(double ,double ) +area():double +jämförArea:double +comperTo(Cirkel):int +equal(Cirkel):boolean +toString:String Punkt double xKord -double yKord +getX:double +getY:double +equal(Punkt):boolean har

6 equals Det finns en metod i klassen Object som kan överskuggas precis som toString: public boolean equals(Object o){ if (o instanceof Cirkel) { Cirkel c=(Cirkel) o; if (radie ==c.getRadie()&& mittPunkt.equals(c.getMittPunkt()) return true; } return false;}

7 Leta efter objekt i ett fält med hjälp av equals
Cirkel[] cirklar=new Cirkel[3]; Cirkel nyCirkel=new Cirkel(1,0,0); Cirklar[i].equals(nyCirkel); cirklar Cirkel r=1 p=(0,0) r=2 p=(1,1)

8 public static void main(String[] args) {
TestaCirkelMedPunkt2 m=new TestaCirkelMedPunkt2(); Cirkel[] cirklar; //fältet som håller cirklarna System.out.print("Ange hur många cirklar du vill lägga in i ditt fält: "); int antal=Input.readInt(); // antalet cirklar i fältet cirklar=new Cirkel[antal]; // fältet skapas for (int i=0;i<antal;i++){ cirklar[i]=m.inMatning(); //fältet fylls på med cirklar } m.skrivUt(cirklar); //fältet skrivs ut System.out.println("Ange en cirkel du vill ändra i: "); Cirkel nyCirkel=m.inMatning(); //ny cirkel skapas för att kunna söka i fältet boolean hittad=false; int i=0; do { hittad=nyCirkel.equals(cirklar[i]); i++; } while (hittad==false && (i<cirklar.length)); if (!hittad) //om inte cirklen hittades System.out.println(" Din cirkel finns inte i listan"); else m.ändra(cirklar[i-1]); // ändrar i den cirkeln som är hittad m.skrivUt(cirklar); //skriver ut fältet igen.

9 Abstrakta klasser Man kan tänka sig att cirklar och rektanglar är geometriska objekt. De har ju visa egenskaper gemensamt. Geometriska objekt kan ha en area. Klassen Geometriska objekt måste dock bli lite mer specialiserad för att kunna skapas som en instans. En abstrakt klass deklareras abstrakt. Den kan inte skapas med new. Abstrakta klasser har abstrakta metoder som subklasserna kan implementera, de är dock deklarerade i den abstrakta klassen. Abstrakta klasser kan ha vanliga metoder och instansvariabler.

10 GeometrisktObjekt GeometrisktObjekt Cirkel Punkt Rektangel
public abstract class GeometrisktObjekt { deklaration protected GeometrisktObjekt() { konstruktor } public abstract double area(); abstrakt metod public double areaSkillnad(GeometrisktObjekt geoObjekt){ return area()-geoObjekt.area(); vanlig metod

11 TestaGeometrisktObjekt
public class TestaGeometrisktObjekt { public static void main(String[] args) { GeometrisktObjekt geo1=new Cirkel(1,1,1); GeometrisktObjekt geo2=new Rektangel(1,1); System.out.println(geo1+" och har arean "+geo1.area()+" a.e."); System.out.println(geo2+" och har arean "+geo2.area()+" a.e"); System.out.println("Area skillnaden är "+geo1.areaSkillnad(geo2)+ " a.e."); }

12 Utskrift Cirklen har radien 1.0 l.e. och mittPunkten: (1.0, 1.0) och har arean a.e. Rektanglens bredd är 1.0 l.e. och längden är 1.0 och har arean 1.0 a.e Area skillnaden är a.e.

13 Typ omvandling Implicit typomvandling
GeometrisktObjekt geoObjekt1=new Cirkel(1,1,1); Explicit typomvanling Cirkel cirk1= (Cirkel) geoObjekt1; fungerar om man vet att det är rätt typ av objekt Annars får man testa med instansof if ( geoObjekt1 instanceof Cirkel ) { Cirkel cirk1= (Cirkel) geoObjekt1;}

14 Interfaces-gränssnitt
I Java finns inte multipelt arv, d.v.s att en klass kan inte ärva från två klasser. Istället har Java interfaces eller gränssnitt. interfaces har bara abstrakta metoder och kan ha konstanter. Inget objekt kan skapas av ett interface med new. En klass kan implementera ett gränssnitt eller flera, måste då göra egna versioner av metoderna i gränssnittet om inte klassen är abstrakt. Man refererar och arbetar med interfaces på samma sätt som med klasser.

15 Modifierare Synlighet public + (alla kommer åt)
private - (klassen kommer åt) protected # (klassen och subklasserna kommer åt) Andra final (kan inte ändras) static (finns bara en i varje klass)

16 Interfaces forts. Skapa en fil med samma namn som interfacet och
deklarera: public interface Inter { resultattyp m1(parametrar); resultattyp m2(parametrar); static final int k =KONSTANT_VÄRDE; } Ex. public interface HarVolym{ //abstrakt metod som ska implementeras public double volym(); //konstanter public final static double MIN_VOLYM=0;

17 Interfaces eller abstrakta klasser
Interfaces är en svagare är-relation eller Egenskaper som kan finnas hos olika typer av objekt som inte bör ärva varandra Ett interface kan bara ha konstant data medan abstrakta klasser kan har instansvariabler Ett interface har bara abstrakta metoder som inte är implementerade. En abstrakt klass kan ha konkreta metoder. Eftersom alla metoderna i ett interface är abstrakta måste man inte ange det explicit.

18 Comparable package java.lang; public interface Comparable {
public int comparTo (Object o); } Ex. public int compareTo(Object o){ Rektangel annanRektangel= (Rektangel) o; double areaSkillnad; areaSkillnad=area()-annanRektangel.area(); if (areaSkillnad>0) return 1; else if (areaSkillnad<0) return -1; else return 0;

19 Ett exempel GeometrisktObjekt Cirkel Punkt Rektangel Comparable

20 Java doc Klasser och metoder kommenteras med Javadoc vilket gör att html-filer som beskriver klassen kan genereras. /** * <p>Title: Rektangel</p> * <p>Description: En rektangel. </p> * <p>Copyright: Copyright (c) 2004</p> * <p>Company: Malmö högskola</p> Kristina von Hausswolff 1.1 */

21 Java doc /** * Konstruktor som sätter bredd och längd
bredd rektanglens bredd längd rektanglens längd */ // konstruktorn * Retunerar rektanglens längd höjd // metoden getLängd


Ladda ner ppt "Arv, abstrakta klasser och gränssnitt"

Liknande presentationer


Google-annonser