Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Typeparametrisering Generel kode (generisk kode).

Liknende presentasjoner


Presentasjon om: "Typeparametrisering Generel kode (generisk kode)."— Utskrift av presentasjonen:

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 Javas API

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 (e < 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 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 (e < res) ]) { res= e; } return res; }...parametrisere med elementtype...parametrisere med sammenligningsmetode dIntProg, E10

14 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 ( e.compareTo(res) < 0) { res= e; } return res; }...parametrisere med elementtype...parametrisere med sammenligningsmetode dIntProg, E10

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


Laste ned ppt "Typeparametrisering Generel kode (generisk kode)."

Liknende presentasjoner


Annonser fra Google