Download presentation
Presentation is loading. Please wait.
Published byBrandy Hyland Modified over 10 years ago
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
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.