13
Fra algoritmemønster til generisk metode findEn og findAlle

Fra algoritmemønster til generisk metode

Embed Size (px)

DESCRIPTION

Fra algoritmemønster til generisk metode. findEn og findAlle. Hvad har disse metoder tilfælles?. findEn. Hvad har disse metoder tilfælles?. findAlle. Parametrisering (Turtle). // tegn et kvadrat med sidelængde 100 public void square100() { ... } - PowerPoint PPT Presentation

Citation preview

Page 1: Fra algoritmemønster til generisk metode

Fra algoritmemønstertil generisk metode

findEn og findAlle

Page 2: Fra algoritmemønster til generisk metode

Hvad har disse metoder tilfælles?

dIntProg, E12

Page 3: Fra algoritmemønster til generisk metode

findEn

dIntProg, E12

Page 4: Fra algoritmemønster til generisk metode

Hvad har disse metoder tilfælles?

dIntProg, E12

Page 5: Fra algoritmemønster til generisk metode

findAlle

dIntProg, E12

Page 6: Fra algoritmemønster til generisk metode

Parametrisering (Turtle)

//tegn et kvadrat med sidelængde 100public void square100() { ... }

//tegn et kvadrat med sidelængde lengthpublic void square(int length) { ... }

//tegn en polygon af grad degree med sidelængde lengthpublic void polygon(int degree, int length) { ... }

dIntProg, E12

public void polygon-4-100() { ... }

public void polygon-4(int length) { ... }

public void polygon(int degree, int length) { ... }

Page 7: Fra algoritmemønster til generisk metode

Pointer

• Det kan betale sig at lave gode generelle operationer som kan genbruges i mange situationer.

• Parametrisering er nøglen til at lave generelle operationer.

• Det er svært at ‘opfinde’ de gode generelle operationer (konkret generelt), men opsøg dem!

dIntProg, E12

Page 8: Fra algoritmemønster til generisk metode

Parametrisering?

public List<Track> findAllByArtist(List<Track> tracks, String artist) { List<Track> res= new ArrayList<Track>(); for ( Track t: tracks ) if ( t.getArtist().contains(artist) ) res.add(t); return res;}

public List<Photo> findAllAfterDate(Date d) { List<Photo> res= new ArrayList<Photo>(); for ( Photo p: photos ) if ( p.getDate().isLaterThan(d) ) res.add(p); return res;}

Page 9: Fra algoritmemønster til generisk metode

Parametrisering af elementtype

public List<Track> findAllByArtist(List<Track> tracks, String artist) { List<Track> res= new ArrayList<Track>(); for ( Track t: tracks ) if ( t.getArtist().contains(artist) ) res.add(t); return res;}

public List<Photo> findAllAfterDate(Date d) { List<Photo> res= new ArrayList<Photo>(); for ( Photo p: photos ) if ( p.getDate().isLaterThan(d) ) res.add(p); return res;}

Page 10: Fra algoritmemønster til generisk metode

Parametrisering af udvælgelseskriterie

public List<Track> findAllByArtist(List<Track> tracks, String artist) { List<Track> res= new ArrayList<Track>(); for ( Track t: tracks ) if ( t.getArtist().contains(artist) ) res.add(t); return res;}

public List<Photo> findAllAfterDate(Date d) { List<Photo> res= new ArrayList<Photo>(); for ( Photo p: photos ) if ( p.getDate().isLaterThan(d) ) res.add(p); return res;}

Page 11: Fra algoritmemønster til generisk metode

Algorithmic Pattern: findAll

public List<T> methodName(List<T> lst, additional params) { List<T> result= new ArrayList<T>(); for ( T e : lst ) { if ( <<< criteriaSatisfiedBy(e) >>> ) { result.add(e); } } return result;}

1. Substitute concrete type for T2. Choose proper method name3. Choose appropriate additional parameters for the concrete criteria

Instantiation of pattern findAll

Page 12: Fra algoritmemønster til generisk metode

Generic Method: findAll

// find alle objekter i listen lst der opfylder kriteriet cpublic static <T>List<T> findAll(List<T> lst, Criteria<T> c) { List<T> result= new ArrayList<T>(); for ( T e : lst ) { if ( c.satisfiedBy(e) ) { result.add(e); } } return result;}

interface Criteria<T> { boolean satisfiedBy(T e);}

List<Person> persons= new ArrayList<Person>();class SeniorCriteria implements Criteria<Person> {...}

findAll(persons, new SeniorCriteria());

Page 13: Fra algoritmemønster til generisk metode

Pointer

• Det kan betale sig at lave gode generelle operationer som kan genbruges i mange situationer.

• Parametrisering er nøglen til at lave generelle operationer.

• Det er svært at ‘opfinde’ de gode generelle operationer (konkret generelt), men opsøg dem!

dIntProg, E12