Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Interfaces Afkobling af programkomponenter (eksempel: Comparable)

Lignende præsentationer


Præsentationer af emnet: "Interfaces Afkobling af programkomponenter (eksempel: Comparable)"— Præsentationens transcript:

1 Interfaces Afkobling af programkomponenter (eksempel: Comparable)

2 dIntProg, E08Interfaces.2 Date-klasse(r) med interface Date setToNextDate() toString() R 1 : day, month year R 2 : # dage siden... Date > DateR2 DateR1

3 dIntProg, E08Interfaces.3 Abstrakt og konkret type Date > DateR2 DateR1 Abstrakt type (ADT) Konkret(e) type(r) (CDT)

4 dIntProg, E08Interfaces.4 Super- og subtyper En abstrakt type er supertype til sin(e) konkret(e) type(r) En konkret type er subtype til sin(e) abstrakt(e) supertype(r)

5 dIntProg, E08Interfaces.5 Typeregel for assignment Typen af udtrykket på højresiden skal være en subtype af variablen på venstresiden: v = exp; T(v) ≥ T(Exp) En type er sin egen subtype (  )

6 dIntProg, E08Interfaces.6 Eksempler Date d; d= new DateR1(); // lovligt d= new Person(); // ulovligt List l; l= new ArrayList(); // lovligt l= new HashSet(); // ulovligt

7 dIntProg, E08Interfaces.7 Interface vs. Class Et interface beskriver en abstrakt type –kan benyttes som formel type for variabler og som returtype for metoder En klasse beskriver en konkret type –kan benyttes ligesom interfaces OG til instansiering af objekter Date d; public Date next(Date d) d = new DateR1(); public DateR1 sort(DateR1 d)

8 dIntProg, E08Interfaces.8 Interfaces i Javas Collection API Containerklasser –I Java findes en række collection-interfaces og -klasser –Såvel interfaces som -klasser er organiseret i klassifikations- hierarkier (specialisering) –Interfaces er abstrakte, klasser er konkrete –Et interface definerer en abstrakt datatype (ADT) –En klasser definerer én implementation (datastruktur) HashSet impl Set TreeSet impl SortedSet ArrayList impl List LinkedList impl List HashMap impl Map TreeMap impl SortedMap Interfaces (specifikation) Klasser (implementation)

9 dIntProg, E08Interfaces.9 Afkobling af programkomponenter (1) Klient Interface Implementation Programmer til et interface Hvad Hvordan

10 dIntProg, E08Interfaces.10 Afkobling af programkomponenter (2) Den væsentligste fordel er at vi får mulighed for at operere uniformt på alle objekter af en bestemt kategori (polymorfi): A BC Klient * >

11 dIntProg, E08Interfaces.11 Dobbelt anvendelse af polymorfi class Klient { public void doSomething(Collection items) { // behandl items som om det er en Collection // uanset om det faktisk er en ArrayList, // et HashSet, et... } for ( A a : items ) { // behandl alle items som om de er // A-objekter uanset om de faktisk // er B- eller C-objekter }

12 Typeparametrisering Generel kode (generisk kode)

13 dIntProg, E08Interfaces.13 Ønsket om at kunne skrive generel kode Vi ønsker f.eks. at kunne skrive følgende metode: // Vi antager at listen ikke er tom public T min(List c) { T res; res = c.get(0); // res = min element so far for ( T e : c ) { if ( ”e < res” ) { res = e; } return res; }

14 dIntProg, E08Interfaces.14 Hvordan sammenligner man objekter? public interface Comparable { /** * @returns whether this object is * smaller (negative integer) * equal (0) * or greater (positive integer) * than object o */ public int compareTo(T o); }

15 dIntProg, E08Interfaces.15 Brug af interfaces (klient) Programmering vha. interfacet Comparable: public Object min(List c) { T res; res = c.get(0); // res = min element so far for ( T e : c ) { if ( e.compareTo(res) < 0 ) { res = e; } return res; }

16 dIntProg, E08Interfaces.16 Brug af interfaces (implementør) Tænk på et interface som en rolle Objekter fra en klasse kan spille rollen beskrevet i et interface –Person-objekter kan spille rollen Comparable public class Person implements Comparable {... public int compareTo(T o) {... }

17 dIntProg, E08Interfaces.17 Collections Klassen Collections indeholder en lang række anvendelige metoder: Som hovedregel forudsætter metoderne at typen T implementerer interfacet Comparable int binarySearch(List l, T key) void copy(List dest, List src) boolean disjoint(Collection c1, Collection c2) int frequency(Collection c, Object o) T max(Collection c) T min(Collection c) void reverse(List l) void shuffle(List l) void sort(List l)...

18 dIntProg, E08Interfaces.18 Afkobling af programkomponenter (3) Collections T min(Collection c) void sort (List l)... Comparable Person Terning Date

19 dIntProg, E08Interfaces.19 Afkobling af programkomponenter (4) 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 Person, Terning, Date,...)


Download ppt "Interfaces Afkobling af programkomponenter (eksempel: Comparable)"

Lignende præsentationer


Annoncer fra Google