fra algoritmemønster til generisk metode

13
Fra algoritmemønster til generisk metode findEn og findAlle

Upload: noelani-figueroa

Post on 30-Dec-2015

32 views

Category:

Documents


0 download

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

TRANSCRIPT

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