Presentation laddar. Vänta.

Presentation laddar. Vänta.

Arv, abstrakta klasser och gränssnitt Arv Abstrakta klasser Gränssnitt Java doc.

Liknande presentationer


En presentation över ämnet: "Arv, abstrakta klasser och gränssnitt Arv Abstrakta klasser Gränssnitt Java doc."— Presentationens avskrift:

1 Arv, abstrakta klasser och gränssnitt Arv Abstrakta klasser Gränssnitt Java doc

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

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

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 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 +toString:String 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=(0,0) Cirkel r=1 p=(1,1) r=1 p=(0,0) Cirkel

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

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 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 GeometrisktObjekt Punkt Rektangel Cirkel

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 Punkt Rektangel Cirkel Comparable

20 Java doc Klasser och metoder kommenteras med Javadoc vilket gör att html-filer som beskriver klassen kan genereras. /** * Title: Rektangel * Description: En rektangel. * Copyright: Copyright (c) 2004 * Company: Malmö högskola 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 Arv Abstrakta klasser Gränssnitt Java doc."

Liknande presentationer


Google-annonser