Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

DAIMIIntroducerende Objektorienteret Programmering8B.1 Interfaces En ren kontrakt.

Lignende præsentationer


Præsentationer af emnet: "DAIMIIntroducerende Objektorienteret Programmering8B.1 Interfaces En ren kontrakt."— Præsentationens transcript:

1 DAIMIIntroducerende Objektorienteret Programmering8B.1 Interfaces En ren kontrakt

2 DAIMIIntroducerende Objektorienteret Programmering8B.2 Motivation  Vi har tidligere talt om binær søgning; en effektiv måde at finde et element i en list givet at mængden er sorteret.  Men... Det var jo kun for heltal og Sequence...  Hvad med lister af strenge, navne, reelle tal.?

3 DAIMIIntroducerende Objektorienteret Programmering8B.3 Naturlig ordning  Binær søgning (og sortering) kræver at der er en naturlig, total, ordning af elementerne af en given type 7 < 42 ”Hansen” < ”Jensen” 31. dec. 1999 < 1. jan. 2000 < < ?

4 DAIMIIntroducerende Objektorienteret Programmering8B.4 Hvad har vi?  Alle klassers moder, Object, stiller en metode til rådighed boolean equals(Object o); –Indicates whether some other object is "equal to" this one.  Er det nok?

5 DAIMIIntroducerende Objektorienteret Programmering8B.5 Abstraktion  En naturlig ordning kræver at vi kan afgøre om et element er ’mindre’ end et andet: 7 < 42eller på OO’sk:7.lessThan(42);  Altså skal alle klasser hvis instanser skal kunne ordnes implementere en metode ala ”lessThan”.  Nogle gode forslag?

6 DAIMIIntroducerende Objektorienteret Programmering8B.6 En abstrakt klasse?  Hvad med en abstrakt klasse!  public abstract class Comparable {  public abstract boolean lessThan(Object o);  }  public class Name extends Comparable {  public boolean lessThan(Object o) { ...  }

7 DAIMIIntroducerende Objektorienteret Programmering8B.7 Mulighederne  Med den i hånden kan vi f.eks. skrive en metode som denne:  public static void order( Comparable a, Comparable b ) {  if ( b.lessThan( a ) ) {  Object swap = b;  b = a;  a = swap;  }  Og hvad gør den så?

8 DAIMIIntroducerende Objektorienteret Programmering8B.8 Men hvad med ioop.Date  Kan nogle huske Date? En klasse i iooplib som repræsenterer datoer. Men desværre implementerer Date ikke ”lessThan” .  Men vores kunder vil altså have at ordrerne står kronologisk i vores system...  Så, kan vi ikke lave en specialisering af Date?

9 DAIMIIntroducerende Objektorienteret Programmering8B.9 ComparableDate  public class ComparableDate extends Date & Comparable  Den går ikke i Java, Java har single inheritance, en klasse kan kun have en enkelt superklasse.  Kunne vi ikke bare droppe Comparable, og alligevel implementere ”lessThan”?

10 DAIMIIntroducerende Objektorienteret Programmering8B.10 ComparableDate  public class ComparableDate extends Date { ...  public boolean lessThan(Object o) {... }  }  Tjooo, men så mister vi muligheden for at kunne betragte ’klasser med en naturlig ordning’ som en abstrakt ting. Vi kan ikke bruge vores ’order’ metode fra før. Vi bliver nødt til at skrive en ny binær søgning/sortering netop til vores nye Date.  Og alle andre klasser for den sags skyld. Øv...

11 DAIMIIntroducerende Objektorienteret Programmering8B.11 Analyse  Men – der er en afgørende forskel på vores abstrakte figurklasse og vores abstrakte Comparable.  Nogle bud?

12 DAIMIIntroducerende Objektorienteret Programmering8B.12 Analyse  Figur klassen implementerede faktisk nogle af metoderne, ikke alle var abstrakte...  Comparable derimod er en ren kontrakt, den siger kun at ’instanser’ af typen Comparable skal definere en ordning ved at implementere ’lessThan’.  ”Conforming to a specified set of behaviours”

13 DAIMIIntroducerende Objektorienteret Programmering8B.13 Rene kontrakter  I java kan man specificere en sådan ren kontrakt vha. af et interface; og en klasse kan implementerer et vilkårligt antal interfaces  interface Comparable {  boolean lessThan(Object o);  }  public class ComparableDate extends Date implements Comparable {  public boolean lessThan(Object o) { return....; }  }

14 DAIMIIntroducerende Objektorienteret Programmering8B.14 Nedarvningstyper  Man taler ofte om implementationsnedarvning og interfacenedarvning.  Så Java tilbyder enkel implementations- nedarvning (extends) og multipel interfacenedarvning (implements)  class a extends b implements c,d,e,f,g {... }

15 DAIMIIntroducerende Objektorienteret Programmering8B.15 Java2’s Comparable  C:\ioop\jdk\docs\api\java\lang\Comparable.html  Java2’s biblioteker kommer med en indbygget Comparable som definerer metoden public int compareTo(Object o)Object Returns: a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object


Download ppt "DAIMIIntroducerende Objektorienteret Programmering8B.1 Interfaces En ren kontrakt."

Lignende præsentationer


Annoncer fra Google