Download præsentationen
Præsentation er lastning. Vent venligst
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
Lignende præsentationer
© 2024 SlidePlayer.dk Inc.
All rights reserved.