Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

 Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.1 Interfaces En ren kontrakt.

Lignende præsentationer


Præsentationer af emnet: " Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.1 Interfaces En ren kontrakt."— Præsentationens transcript:

1  Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.1 Interfaces En ren kontrakt

2  Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.2 Naturlig ordning Binær søgning (og sortering) kræver at der er en naturlig, total, ordning af elementerne af en given type S : initialiser K : K  Ø : udvælg e fra K : split K : s[0..s.size()) l = 0 ; h = s.size(); l < h mi = (l+h)/2; e = s.get(mi) if ( e < m ) l = mi+1; else // e > m h = mi;

3  Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.3 Naturlig ordning –7 < 42 –”Hansen” < ”Jensen” –31. dec. 1999 < 1. jan. 2000 – < – < ?

4  Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.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  Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.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); –”Hansen”.lessThan(”Jensen”) Altså skal alle klasser hvis instanser skal kunne ordnes implementere en metode ala ”lessThan”. Nogle gode forslag?

6  Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.6 En abstrakt klasse? Hvad med en abstrakt klasse! public abstract class Comparable { /** pre:o er en ikke-null reference til et objekt af typen Comparable. * post: returnerer sandt dersom dette objekt er naturligt ordnet * før objektet o (= er mindre end mht. værdi-sammenligning.) */ public abstract boolean lessThan(Object o); } public class Name extends Comparable { public boolean lessThan(Object o) {... }

7  Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.7 Mulighederne Med den i hånden kan vi f.eks. skrive en metode som denne: public static void printOrder( Comparable a, Comparable b) { if ( b.lessThan( a ) ) { System.out.println( ”b er mindre end a” ); } else { System.out.println( ”a er mindre end b” ); } Og hvad gør den så?

8  Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.8 Klasser fra Java bibliotekerne Tag for eksempel String! Den arver jo ikke fra vores Comparable . Derfor kan vi heller ikke lave binær søgning i en ArrayList af String… Så, kan vi ikke lave en specialisering af String?

9  Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.9 ComparableString public class ComparableString extends String and Comparable Den går ikke i Java, Java har single class- inheritance, en klasse kan kun have en enkelt superklasse. Kunne vi ikke bare droppe Comparable, og alligevel implementere ”lessThan”?

10  Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.10 ComparableString public class ComparableString extends String {... 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 ’printOrder’ metode fra før. Vi bliver nødt til at skrive en ny binær søgning/sortering netop til vores nye ComparableString. Og alle andre klasser for den sags skyld. Øv...

11  Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.11 Analyse 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”

12  Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.12 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 ComparableString extends String implements Comparable { public boolean lessThan(Object o) { return....; } }

13  Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.13 Nedarvningstyper Man taler om implementationsnedarvning og interfacenedarvning. Så Java tilbyder enkel implementations- nedarvning (extends) og multipel interface- nedarvning (implements) class a extends b implements c,d,e,f,g {... }

14  Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.14 Java2’s Comparable Java2’s biblioteker kommer med et indbygget Comparable interface 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 Øvelse: Hvordan ser if’en ud for objekter? split K : if ( e < m ) l = mi+1; else // e > m h = mi;


Download ppt " Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.1 Interfaces En ren kontrakt."

Lignende præsentationer


Annoncer fra Google