Presentation is loading. Please wait.

Presentation is loading. Please wait.

Typeparametrisering Generel kode (generisk kode).

Similar presentations


Presentation on theme: "Typeparametrisering Generel kode (generisk kode)."— Presentation transcript:

1 Typeparametrisering Generel kode (generisk kode)

2 Et lille eksempel med strenge dIntProg, E10

3 Forprogrammerede metoder Klassen Collections indeholder en lang række anvendelige metoder: int binarySearch(List l, T key) void copy(List dest, List src) boolean disjoint(Collection c1, Collection c2) int frequency(Collection c, Object o) T max(Collection c) T min(Collection c) void reverse(List l) void shuffle(List l) void sort(List l)...

4 Collections funktioner dIntProg, E10 Som hovedregel forudsætter metoderne at typen T definerer en total ordning f.eks. ved at elementerne implementerer interfacet Comparable

5 Korteste Track // Vi antager at listen tracks ikke er tom public Track shortestTrack(){ Track res; res= tracks.get(0); //res == min element so far for ( Track t : tracks ){ if ( t.getTime() < res.getTime() ) { res= t; } return res; } dIntProg, E10

6 Yngste Person // Vi antager at listen persons ikke er tom public Person youngestPerson(){ Person res; res= persons.get(0); //res == min element so far for ( Person p : persons ){ if ( p.getAge() < res.getAge() ) { res= p; } return res; } dIntProg, E10

7 Hvad er forskellen på de to metoder? public Person youngestPerson(){ Person res= persons.get(0); //res == min element so far for ( Person p : persons ){ if ( p.getAge() < res.getAge() ) { res= p; } } return res; } public Track shortestTrack(){ Track res= tracks.get(0); //res == min element so far for ( Track t : tracks ){ if ( t.getTime() < res.getTime() ) { res= t; } } return res; } dIntProg, E10

8 Hvordan generaliserer vi kode? public void square100() { for ( int i= 0; i<4; i++ ) { move(100); turn(90); } public void square200() { for ( int i= 0; i<4; i++ ) { move(200); turn(90); } public void triangle100() { for ( int i= 0; i<3; i++ ) { move(100); turn(120); } public void triangle400() { for ( int i= 0; i<3; i++ ) { move(400); turn(120); } dIntProg, E10

9 Kan vi generalisere disse metoder? public Person youngestPerson(){ Person res= persons.get(0); //res == min element so far for ( Person p : persons ){ if ( p.getAge() < res.getAge() ) { res= p; } } return res; } public Track shortestTrack(){ Track res= tracks.get(0); //res == min element so far for ( Track t : tracks ){ if ( t.getTime() < res.getTime() ) { res= t; } } return res; } dIntProg, E10

10 Vi ønsker at kunne... // Vi antager at listen l ikke er tom public T min(List l) { T res; res= l.get(0); // res == min element so far for ( T e : l ) { if ( [sammenligning af e og res]) { res= e; } return res; }...parametrisere med elementtype...parametrisere med sammenligningsmetode dIntProg, E10

11 Hvordan sammenligner man objekter? public interface Comparable { /** * @returns whether this object is * smaller (negative integer) * equal (0) * or greater (positive integer) * than object o */ public int compareTo(T o); } dIntProg, E10

12 Brug af interfaces (implementør) Tænk på et interface som en rolle Objekter fra en klasse kan spille rollen beskrevet i et interface –Track-objekter kan spille rollen Comparable public class Track implements Comparable {... public int compareTo(Track o) {... } dIntProg, E10

13 Afkobling af programkomponenter Collections T min(Collection c) void sort (List l)... > Comparable Person Terning Track dIntProg, E10


Download ppt "Typeparametrisering Generel kode (generisk kode)."

Similar presentations


Ads by Google