Upload
noelani-figueroa
View
32
Download
0
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
Fra algoritmemønstertil generisk metode
findEn og findAlle
Hvad har disse metoder tilfælles?
dIntProg, E12
findEn
dIntProg, E12
Hvad har disse metoder tilfælles?
dIntProg, E12
findAlle
dIntProg, E12
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) { ... }
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
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;}
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;}
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;}
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
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());
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