Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Parametrisering En kort introduktion.

Lignende præsentationer


Præsentationer af emnet: "Parametrisering En kort introduktion."— Præsentationens transcript:

1 Parametrisering En kort introduktion

2 Parametrisering og generisk kode
Parametrisering tak! public class SkilledTurtle extends Turtle { public void square100() { for ( int i= 0; i<4; i++ ) { move(100); turn(90); } ... Programmeringsteknologi, F11 Parametrisering og generisk kode

3 Simpel parametrisering (1)
Det ville være smartere at lave en metode der kan tegne kvadrater af vilkårlig størrelse. public class SkilledTurtle extends Turtle { /** tegner et kvadrat med sidelængde length */ public void square(int length) { for (int i= 0; i < 4; i++) { move(length); turn(90); } Programmeringsteknologi, F11 Parametrisering og generisk kode

4 Parametrisering og generisk kode
Øvelse 1 Hvordan tegner man en ligesidet trekant? Hvordan tegner man en cirkel? Programmeringsteknologi, F11 Parametrisering og generisk kode

5 Parametrisering og generisk kode
Øvelse 2 Skriv en metode der tegner en polygon. Lad antal sider og sidelængden være parametre til metoden. public class SkilledTurtle extends Turtle { ... /** * tegner en d-kant med sidelængde length */ public void polygon(int d, int length) { } Programmeringsteknologi, F11 Parametrisering og generisk kode

6 Generel kode (generisk kode)
Typeparametrisering Generel kode (generisk kode)

7 Et lille eksempel med strenge
Programmeringsteknologi, F11 Parametrisering og generisk kode

8 Forprogrammerede metoder
Klassen Collections indeholder en lang række anvendelige metoder: Som hovedregel forudsætter metoderne at typen T definerer en total ordning f.eks. ved at implementere af interfacet Comparable int binarySearch(List<T> l, T key) void copy(List<T> dest, List<T> src) boolean disjoint(Collection<T> c1, Collection<T> c2) int frequency(Collection<T> c, Object o) T max(Collection<T> c) T min(Collection<T> c) void reverse(List<T> l) void shuffle(List<T> l) void sort(List<T> l) ... Programmeringsteknologi, F11 Parametrisering og generisk kode

9 Parametrisering og generisk kode
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; Programmeringsteknologi, F11 Parametrisering og generisk kode

10 Parametrisering og generisk kode
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; Programmeringsteknologi, F11 Parametrisering og generisk kode

11 Hvad er forskellen på de to metoder?
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; } 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; } Programmeringsteknologi, F11 Parametrisering og generisk kode

12 Hvordan generaliserer vi kode?
public void square100() { for ( int i= 0; i<4; i++ ) { move(100); turn(90); } public void square200() { move(200); public void triangle100() { for ( int i= 0; i<3; i++ ) { move(100); turn(120); } public void triangle400() { move(400); Programmeringsteknologi, F11 Parametrisering og generisk kode

13 Kan generaliserer vi disse metoder?
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; } 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; } Programmeringsteknologi, F11 Parametrisering og generisk kode

14 Vi ønsker at kunne... ...parametrisere med elementtype
// Vi antager at listen l ikke er tom public T min(List<T> l) { T res; res= l.get(0); // res == min element so far for ( T e : l ) { if ( ”e < res” ) { res= e; } return res; ...parametrisere med sammenligningsmetode Programmeringsteknologi, F11 Parametrisering og generisk kode

15 Collections Extension
Intermezzo BlueJ-eksempel med hjemmelavet generisk kode...

16 Hvordan sammenligner man objekter?
public interface Comparable<T> { /** whether this object is * smaller (negative integer) * equal (0) * or greater (positive integer) * than object o */ public int compareTo(T o); } Programmeringsteknologi, F11 Parametrisering og generisk kode

17 Programmering vha. interfacet Comparable
public <%!&%T€#%!&> min(List<? extends T> 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; Programmeringsteknologi, F11 Parametrisering og generisk kode

18 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<Track> { ... public int compareTo(Track o) { } Programmeringsteknologi, F11 Parametrisering og generisk kode

19 Afkobling af programkomponenter (1)
Collections T min(Collection<T> c) void sort (List<T> l) ... <<interface>> Comparable Terning Person Track Programmeringsteknologi, F11 Parametrisering og generisk kode

20 Afkobling af programkomponenter (2)
Der er behov for at kunne mindske afhængigheden mellem programkomponenter Interfaces benyttes til at fastlægge minimale afhængigheder mellem programkomponenter Ved brug af interfaces kan samarbejdende programkomponenter udvikles, oversættes, testes, etc. uafhængigt af hinanden tidsmæssigt kan der være lang tid mellem at komponenterne udvikles (f.eks. Collections.sort() og Terning, Person, Track, ...) Programmeringsteknologi, F11 Parametrisering og generisk kode


Download ppt "Parametrisering En kort introduktion."

Lignende præsentationer


Annoncer fra Google