Parametrisering En kort introduktion.

Slides:



Advertisements
Lignende præsentationer
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Advertisements

Iteration og parametrisering
Forelæsning 3.1 Collections Javas for-each løkke
Opsamling Loops Klassedesign Immutable Lister shallowCopy() Projekt 2 FEN KbP/seminar3: Opsamling.
Interfaces – brug. Overblik Tidligere: –Interfaces Comparable gør det muligt at bruge Collections metoderne –min, max, sort, … –Algoritmemønstre Find.
Delphi og C++ Builder C++ Builder. C++ Historie Sproget blev designet for AT&T af danskeren Bjarne Stoustrup En objektorienteret videreudvikling.
Forelæsning 5.1 Brug af klassen Collections og interfacet Comparable samt parametriserede typer Projektuge: Ants and Spiders / Lommeregner dIntProg,
Comparable Students German Students Composite Pattern State Pattern Observer Pattern Collections Interfaces Abstrakte klasser Design Patterns.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
Forelæsning 2.2 Tilstand og opførsel (repetition)
Fundamentale sprogbegreber
KF04 GRAY Item 2, 12, 22, 32, 42, 52. Consider a builder when faced with many constructor parameters Item 2.
Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner findEn findAlle Primitive typer (forfremmelse og begrænsning) Identitet versus lighed.
9. Interfaces. 2 Nordjyllands Erhvervakademi Objectives “Good class design starts with good application design — how many classes, do they relate.
Begreber og Redskaber 11. Plan for idag Lidt afrunding: Collections Framework i Java Noget om oversættere og sprog Evaluering Sidste gang øvelser før.
Forelæsning 7.1 – repetition
Effective Java Blå gruppe. Item 18: Interfaces frem for abstrakte klasser Kan implementeres i klasser der ikke nedarver Eksisterende klasser kan nemt.
 Jens Bennedsen 2002Objektorienteret systemudvikling GRASP mønstre Basale ansvarsplaceringsregler.
Introduktion til programmering Repetition - ArrayList.
DAIMIIntroducerende Objektorienteret Programmering1 Polymorfi og nedarvning Motivation for arv og “mange former”
Checklister Comparable og Comparator. dIntProg, E08Checklister.2 Checkliste for Comparable Antagelse –vi har en liste med elementer af typen T: List lst;
 Jens Bennedsen 2001Multimedie programmering10A.1 Polymorfi og nedarvning Motivation for arv og “mange former”
Lærde skildpadder Specialisering af skildpadder – nye kompetencer (metoder/kommandoer)
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Henrik B. Christensen, 1999Introducerende objektorienteret programmering8B.1 Interfaces En ren kontrakt.
 Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.1 Interfaces En ren kontrakt.
DAIMIIntroducerende Objektorienteret Programmering1 Collections og opremsning Nye typer collections, objektorienteret sweep.
 Henrik Bærbak, 2000Introducerende objektorienteret programmering11B.1 Destilleret UML Oversættelse fra UML til Java.
DAIMIIntroducerende objektorienteret programmering1B.1 Skildpadder Modeller, objekter og opførsel.
Trinvis forfinelse Systematisk, gradvis udvikling af programmer.
Indledende Programmering Uge 6 - Efterår 2006
Interfaces Afkobling af programkomponenter (eksempel: Comparable)
Lærde skildpadder Specialisering af skildpadder – nye kompetencer (metoder/kommandoer)
Grafik Modeller, objekter og opførsel. dIntProg, F08Grafik.2 Nye begreber Repetition (iteration) –gentagelse af opførsel Parametrisering –generalisering.
Klasser og objekter – grundbegreber.  Michael E. Caspersen, 2001Introducerende objektorienteret programmeringKlasser og objekter.2 Klasser og objekter.
Collectionklasser Klassifikation og anvendelse. dIntProg, F08Collectionklasser.2 Samlinger af objekter Objektreferencer –for at holde fast i et objekt.
Interfaces – hvorfor, hvad og hvordan?.  Michael E. Caspersen 2003IOOPInterfaces.2 Oversigt Interfaces, hvorfor –Separering af specifikation (interface)
 Jens Bennedsen 2001Multimedie programmering10B.1 Interfaces En ren kontrakt.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
 Jens Bennedsen 2001Multimedie programmering1.1 Skildpadder Modeller, objekter og opførsel.
 Jens Bennedsen 2001Multimedie programmering3B.1 Specifikationer Betingelser, specifikationer og JavaDoc.
Lærde skildpadder Specialisering af skildpadder – nye kompetencer (metoder/kommandoer)
Introduktion til programmering Repetition. dIntProg, F08Repetition.2 dIntProg Sidste forelæsning (12/10) –kort tilbagemelding på evaluering –repetition.
DAIMIIntroducerende Objektorienteret Programmering8B.1 Interfaces En ren kontrakt.
DAIMI, AUIntroducerende objektorienteret programmering11A.1 Destilleret UML Oversættelse fra UML til Java.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Collections og opremsning Nye typer collections, objektorienteret sweep.
DAIMIIntroducerende objektorienteret programmering2A.1 Lærde skildpadder Specialisering af skildpadder – nye kompetencer (metoder/kommandoer)
Skildpadder Modeller, objekter og opførsel.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSkildpadder.2 Model Modeller bruges.
Containerklasser – klassifikation og brug.  Michael E. Caspersen, 2003IOOPContainerklasser.2 Mange objekter Containerklasser –antag at man skal repræsentere.
Forelæsning Uge 2 – Torsdag Java syntax og style guide Sætninger –Simple sætninger (assignment, interne og eksterne metodekald) –Sammensatte sætninger.
Algoritmeskabeloner findOne, findAll, findNoOf, findSumOf Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder.
Forelæsning Uge 5 – Mandag
Forelæsning Uge 5 – Mandag
Forelæsning Uge 2 – Torsdag
Forelæsning Uge 6 – Mandag
Forelæsning Uge 1 – Torsdag
Forelæsning Uge 5 – Mandag
Forelæsning Uge 12 – Torsdag
Forelæsning Uge 4 – Mandag
Forelæsning Uge 6 – Mandag
Forelæsning Uge 2 – Mandag
Forelæsning Uge 5 – Mandag
Forelæsning Uge 5 – Mandag
Forelæsning Uge 12 – Mandag
Quiz – Uge 3 – mandag – første time
Forelæsning Uge 2 – Mandag
Forelæsning Uge 12 Abstrakte klasser og interfaces
Forelæsning Uge 5 – Mandag
Quiz – Uge 3 – mandag – første time
Præsentationens transcript:

Parametrisering En kort introduktion

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Hvordan sammenligner man objekter? public interface Comparable<T> { /** * @returns 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

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

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

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

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