Har kun én enkelt abstract metode De steder, hvor man skal bruge et objekt, hvis type er et funktionelt interface, kan man i stedet bruge en lambda

Størrelse: px
Starte visningen fra side:

Download "Har kun én enkelt abstract metode De steder, hvor man skal bruge et objekt, hvis type er et funktionelt interface, kan man i stedet bruge en lambda"

Transkript

1 Forelæsning Uge 12 Abstrakte klasser og interfaces En abstrakt klasse er en klasse, som man ikke kan lave instanser af En abstrakt klasse kan indeholde abstrakte metoder, hvor kun hovedet er angivet, mens implementationen (kroppen) mangler I et interface er alle metoder abstrakte Funktionelle interfaces Har kun én enkelt abstract metode De steder, hvor man skal bruge et objekt, hvis type er et funktionelt interface, kan man i stedet bruge en lambda Wildcards (jokere) Gør det muligt at beskrive komplicerede typebegrænsninger i forbindelse med generiske klasser Afleveringsopgave: Computerspil 2 Dokumentation og test af de klasser, som I har implementeret i den første delaflevering

2 Træning i mundtlig præsentation Deltag i træningen i mundtlig præsentation Den er uhyre vigtig for jeres succes ved mundtlig eksamen Eneste gang under jeres studier, hvor I får systematisk træning heri Træning gør mester de timer I bruger på det, er godt givet ud Se videoerne om den "perfekte" eksamenspræstation og hør jeres medstuderendes præsentationer det lærer I også af Hvis I er nervøse og usikre omkring eksamen og det at skulle lave præsentationer for andre, har I netop brug for træning Det er vigtigt for it-folk at kunne præsentere tekniske problemstillinger for fagfæller og lægfolk Det er en essentiel del af vores faglige kompetencer, og I kommer alle til at gøre det i jeres daglige arbejde 2

3 Abstrakte klasser og interfaces En abstrakt klasse er en klasse, som man ikke kan lave instanser af new operatoren kan ikke anvendes på klassen I vores Newsfeed system vil det være oplagt at erklære Post til at være en abstrakt klasse Det signalerer, at vi ikke vil lave instanser af Post, men kun instanser af dens subklasser MessagePost og PhotoPost Formålet med Post er udelukkende at samle de ting, der er fælles for MessagePost og PhotoPost, og på den måde undgå kodedublering og opnå større læsbarhed Angiver, at klassen er abstrakt (rækkefølgen af public og abstract er uden betydning) Angiver at klassen er abstrakt <<abstract>> public abstract class Post { 3

4 Abstrakte metoder En abstrakt klasse kan indeholde abstrakte metoder En abstrakt metode er en metode, der ikke er implementeret i klassen Vi angiver kun metodens hoved, mens kroppen udelades I vores Newsfeed system har vi en display metode i hver af klasserne Post, MessagePost og PhotoPost Lad os for et øjeblik antage, at display metoden i Post klassen ikke har noget fornuftigt at lave, f.eks. fordi Post klassen ingen feltvariabler har Så kan vi erklære display metoden til at være abstrakt public abstract void display(); Betyder at implementationen af metoden overlades til subklasserne Hvis en subklasse ikke implementerer metoden, skal subklassen selv være abstrakt Det sikrer, at alle konkrete subklasser har en implementation af metoden 4

5 Interfaces Et interface ligner en abstrakt klasse, hvor alle metoder er abstrakte der ikke er feltvariabler og konstruktører De abstrakte metoder implementeres i de klasser, der implementerer interfacet Interfaces kan nedarve fra hinanden på samme måde som klasser Vi kan have subinterfaces og superinterfaces Eksempel: Comparable For hver metode angives hovedet, mens kroppen udelades Alle metoder er public og abstract (hvorfor dette ikke angives) Comparable har kun én metode, compareto Angiver at Comparable er et interface public interface Comparable<T> { int compareto(t o); Angiver, at klassen inplementerer interfacet Metoden implementeres i de klasser, der implementerer interfacet public class Person implements Comparable<Person> { public int compareto(person p) { 5

6 List interfacet List interfacet beskriver en sekvens af elementer. Det har mange forskellige implementationer, bl.a. ArrayList opbevarer elementerne i et array LinkedList opbevarer elementer i en dobbeltkædet liste, hvor element har en pegepinde til det foregående og det efterfølgende element Brug af List interfacet gør det let at skifte mellem de forskelige implementationer Hvis man har erklæret alle sine variable til at være af typen List (i stedet for ArrayList eller LinkedList), er det eneste, der skal ændres, det sted hvor listen instantieres Her skal man udskifte new ArrayList<>() med new LinkedList<>() (eller omvendt) 6

7 Set og Map interfacet Set interfacet beskriver en mængde. Det har mange forskellige implementationer, bl.a. HashSet opbevarer mængden i en hashtabel, hvor nøglerne er elementernes hashkoder LinkedHashSet opbevarer mængden i en hashtabel og har derudover en dobbeltkædet liste, der gennemløber alle elementer, og bestemmer den rækkefølge de besøges i, når man bruger en iterator (eller en for-each løkke) TreeSet opbevarer mængden i en træstruktur, hvilket bevirker at de fleste operationer kan udføres i logaritmisk tid Map interfacet beskriver en afbildning, hvor man ud fra en nøgle kan slå en værdi op. Det har mange forskellige implementationer, bl.a. HashMap LinkedHashMap TreeMap 7

8 Hvad opnår vi? Fælles for abstrakte klasser og interfaces De bestemmer en type Man kan lave polymorfe metoder, som kan bruges på objekter fra alle subklasser af en abstrakt klasse alle de klasser, der implementerer et interface F.eks. kan reverse og shuffle metoderne i Collections klassen bruges på alle objektsamlinger, der implementerer List interfacet, mens min, max og sort metoderne endvidere kræver, at elementtypen i objektsamlingen implementerer Comparable interfacet Nedarvning fra abstrakt eller konkret superklasse Vi arver både noget implementation og en type Klassen bliver en subtype af superklassen, og dens objekter kan bruges alle de steder superklassens objekter kan bruges Implementation af interface Vi arver kun typen (der er jo ingen implementation at arve) Klassen bliver en subtype af interfacet, og dens objekter kan bruges alle de steder, hvor der kræves et objekt af interface typen 8

9 Abstrakte klasse eller interface? Hvorfor har Java både abstrakte klasser og interfaces? En abstrakt klasse kan indeholde implementation (og feltvariabler) det kan et interface ikke En klasse kan implementere flere interfaces men kun være (direkte) subklasse af én anden klasse Multipel nedarvning De tre røde klasser nedarver fra begge blå klasser Dette kan kun lade sig gøre, hvis mindst en af de blå er et interface Hvor meget er implementeret? Almindelig konkret klasse: alt er implementeret (100%) Interface: ingen implementation (0%) Abstrakt klasse: delvis implementation (0-100%) 9

10 Abstract klasse eller interface (fortsat) Virkeligheden er (desværre) ikke helt så pæn og simpel som beskrevet på de foregående slides Fra og med Java 8 kan et interface indeholde implementation i form af klassemetoder og såkaldte default metoder Implementation af disse metoder nedarves til de klasser, der implementerer interfacet Default metoder er bl.a. indført for at kunne tilføje nye metoder til et eksisterende interface uden at genere de klasser, der allerede implementerer det Da et interface ikke har feltvariabler og konstruktører, er det begrænset, hvad man kan gøre i en default metode (der er ingen tilstand at operere på) Eksempel fra funktionel sortering Klassemetode i Comparator interfacet (tager en lambda som parameter og returnerer et Comparator objekt) Collections.sort(persons, Comparator. comparing((person p) -> p.getname()).thencomparing (p -> p.getage()) ); Klassemetode i Collections klassen default metode i Comparator interfacet (kaldes på det objekt, som comparing metoden returnerer, og returnerer et Comparator objekt) 10

11 Collection frameworket (udsnit) 2 forskellige slags UML pile Fuldt optrukne: nedarvning Stiplede: implementation <<interface>> Collection <<abstract class>> AbstractCollection <<interface>> Set <<interface>> List <<interface>> Queue HashSet <<interface>> SortedSet <<abstract class>> AbstractList LinkedList PriorityQueue LinkedHashSet <<interface>> NavigableSet TreeSet ArrayList Vector Collection frameworket består af 12 interfaces 5 abstrakte klasser 30 konkrete klasser AbstractList implementerer nogle metoder, der er fælles for alle lister AbstractCollection implementerer nogle metoder, der er fælles for alle collections De to abstrakte klasser gør det nemmere at lave sine egne List og Collection klasser Dele af implementationen er allerede er lavet (i de abstrakte klasser) Bemærk at Map<K,V> ikke er et subinterface af Collection<E> (selvom Map indgår i det såkaldte collection framework) 11

12 Brug af Collections og Comparable 3 forskellige slags UML pile Fuldt optrukne: nedarvning Stiplede pile: implementation Stiplede med åbent hoved: brug Collections T min(collection<t> c) T max(collection<t> c) void sort(list<t> l) <<interface>> Collection boolean add(e e) boolean contains(object o) <<interface>> Comparable int compareto(t o) <<interface>> List <<interface>> Queue <<interface>> Set Pixel Person String ArrayList HashSet LinkedList Adult Child 12

13 Funktionelle interfaces Et funktionelt interface har én enkelt abstract metode De steder, hvor man skal bruge et objekt, hvis type er et funktionelt interface, kan man i stedet bruge en lambda Man kan erklære variabler, hvis type er et funktionelt interface Dermed bliver det muligt at assigne lambda'er til variabler, og dermed bruge dem forskellige steder i programmet, f.eks. som parameterværdier java.util.function definerer en række funktionelle interfaces, bl.a. Predicate bruges til lambda'er, der returnerer en boolsk værdi BinaryOperator bruges til lambda'er, hvor de to parametre og returværdien er af samme type (f.eks. String x String String) UnaryOperator bruges til lambda'er, hvor parameteren og returværdien er af samme type (f.eks. String String) Function bruges til lambda'er, hvor parameteren og returværdien er af forskellig type (f.eks. String Integer) Consumer bruges til lambda'er der ikke returnerer en værdi, men typisk har en sideeffekt 13

14 Billedredigering via funktionelle interfaces Operationerne i billedredigeringsopgaven fra uge 4 kan implementeres ved hjælp af funktionelle interfaces I de simple billedoperationer (såsom brighten, darken, invert og noise) kan en pixel's nye gråtone beregnes ud fra den gamle ved hjælp af en lambda public Image simplefilter( UnaryOperator<Integer> modification) { for(int x = 0; x < image.getwidth(); x++) { for(int y = 0; y < image.getheight(); y++) { int oldvalue = image.getpixel(x,y).getvalue(); image.getpixel(x,y).setvalue( modification.apply(oldvalue)); image.updatecanvas(); return image; public Image brighten(int amount) { return simplefilter( v -> v + amount ); Funktionelt interface (Integer Integer) Beregning af den nye værdi ved hjælp af apply metoden i det funktionelle interface UnaryOperator, dvs. den lambda, der bruges som parameterværdi i kaldet Ved kald af simplefilter er parameterværdien en lambda, der automatisk giver os et objekt af typen UnaryOperator public Image invert() { return simplefilter(v -> 255 v); 14

15 Billedredigering (fortsat) I de operationer, der spejler, roterer og resizer, bliver gråtonen for en pixel kopieret fra en anden pixel Beregningen af denne pixel's koordinater kan beskrives ved hjælp af to lambda'er public Image complexfilter(int width, int height, BinaryOperator<Integer> xpos, BinaryOperator<Integer> ypos) { Image newimage = new Image(width, height, image.gettitle(), false); for(int x = 0; x < width; x++) { Positionen, hvor gråtoneværdien skal hentes for(int y = 0; y < height; y++) { Pixel p = image.getpixel( xpos.apply(x,y), ypos.apply(x,y) ); newimage.getpixel(x,y).setvalue(p.getvalue()); image = newimage; image.updatecanvas(); return image; Funktionel interface (Integer * Integer Integer) public Image mirror() { int w = image.getwidth(); Den nye gråtoneværdi int h = image.getheight(); for (i,j) hentes i (w-i-1,j) return complexfilter (w, h,(i,j) -> w-i-1,(i,j) -> j); I næste forelæsning vil vi se, at funktionelle interfaces også er særdeles nyttige i forbindelse med grafiske brugergrænseflader public Image rotate() { int w = image.getwidth(); Den nye gråtoneværdi int h = image.getheight(); for (i,j) hentes i (j,h-i-1) return complexfilter (h, w,(i,j) -> j,(i,j) -> h-i-1); 15

16 Wildcards og typebegrænsninger Klasser med typeparametre (fx. ArrayList<E>) kaldes generiske klasser Når man, for metoderne i en generisk klasse, skal beskrive parametrenes type (og returtypen) bruges der en speciel notation indeholdende wildcards (jokere) og typebegrænsninger Det kan være nyttigt, at kende og forstå de hyppigst forekomne wildcard konstruktioner, f.eks. når man slår op i Java API'en Dem vil vi nu illustrere ved hjælp af nogle eksempler Eksempel fra Class<T> Vi vil lave en afbildning (Map), hvor nøglerne er klasser (Fox og Rabbit) og værdierne de farver, hvormed objekterne i disse klasser vises på spillepladen? angiver, at vi på dette sted kan bruge et vilkårlig Class objekt private Map<Class<?>, Color> colors; colors.put( Rabbit.class, Color.ORANGE ); colors.put( Fox.class, Color.BLUE ); Nøgler af type Class<?> Class<Fox> og Class<Rabbit> Konstanter i Color klassen 16

17 Eksempler fra ArrayList<E> klassen boolean add(e e) Tilføjer elementet e til enden af listen Nem at forstå (ingen wildcards) boolean addall(collection<? extends E> c) Tilføjer alle elementerne fra c Parameteren skal være en objektsamling (implementere Collection interfacet) Elementtypen i objektsamlingen skal være en subtype af E (inklusiv E selv) Sikrer at det er lovligt at tilføje elementerne i c til vores arrayliste boolean removeif(predicate<? super E> filter) Fjerner alle de elementer der opfylder filter Parameteren skal være et prædikat (dvs. en boolsk lambda) Prædikatets parameter skal være en supertype af E (inklusiv E selv) Sikrer at prædikatet kan bruges på elementer af typen E 17

18 Eksempler fra Collections void shuffle(list<?> list) Permuterer listens elementer Parameteren skal være af en type, der implementere List interfacet Elementtypen i listen kan være vilkårlig Metoden kan bruges på alle lister, men f.eks. ikke på en Set eller Queue (med mindre de også er lister) int frequency(collection<?> c, Object o) Returnerer antallet af forekomster af objektet o i objektsamlingen c Første parameter skal være af en type, der implementerer Collection interfacet Anden parameter er af vilkårlig type (alle klasser er subklasser af Object) Lovligt at spørge om frekvensen af objekter, der slet ikke kan forekomme i listen (de har trivielt frequency lig med 0) 18

19 Eksempler fra Collections (fortsat) <T> void copy(list<? super T> dest, List<? extends T> src) Kopierer alle elementer fra source listen (src) til destination listen (dest) Begge parametre skal være af typer, der implementerer List interfacet Der skal eksistere en type T, således at elementtypen i dest er en supertype af T, og elementtypen i src er en subtype af T Dvs. at elementtypen i src er en subtype af elementtypen i dest (eller lig med denne) Sikrer at det er lovligt at indsætte elementerne fra src i dest Foran returtypen listes, de typer, der bruges til typebegrænsninger Det er dog ikke nødvendigt at liste de typer, der er type parametre for den generiske type, som vi er i færd med at definere F.eks. behøver vi ikke at liste E i boolean addall(collection<? extends E> c) idet E allerede er introduceret som en type parameter i ArrayList<E> 19

20 Eksempler fra Collections (sort metoderne) <T> void sort(list<t> list, Comparator<? super T> c) Sorterer listen ved hjælp af en comparator Første parameter skal være en liste med elementtypen T Anden parameter skal være af en type, der implementere Comparator interfacet for T (eller en supertype af T) Sikrer at T (eller en supertype af T) stiller en compare metode til rådighed for sorteringen <T extends Comparable<? super T>> void sort(list<t> list) Sorterer listen ved hjælp af den naturlige ordning Parameteren skal være en liste Elementtypen skal implementerer Comparable interfacet (eller have en supertype, der gør det) Sikrer at T (eller en supertype af T) stiller en naturlig ordning til rådighed for sorteringen Yderligere info om wildcards: Link 20

21 Afleveringsopgave: Computerspil 2 I den anden delaflevering skal I bruge de ting, som I har lært om regression tests, på de fire klasser, som I har implementeret i den første delaflevering Lav velvalgte regression tests for de fire klasser Positive tests skal afprøve programmets normale opførsel herunder om det fungerer korrekt omkring forskellige grænseværdier (f.eks. om personer på 12, 13, 14, 18, 19 og 20 år er teenagere) Negative tests skal afprøve om programmet kan håndtere uventede situationer (f.eks. hvad der sker, hvis en bruger forsøger at sætte en persons alder til noget negativt eller meget stort) I behøver ikke lave testmetoder for trivielle accessor og mutator metoder, der blot returnerer/ændrer en enkelt feltvariabel uden at gøre andet Herudover skal I rette de fejl og mangler, som instruktoren har påpeget i jeres første delaflevering 21

22 Test All: Test of Road klassen Fra den generelle Test Fixture kan I "stjæle" import sætningerne Feltvariablerne for landene og byerne Sætningerne i setup metoden (idet vi dog sætter netværket til null, da vi ikke skal bruge det) For overskuelighedens skyld bør I fjerne de dele, som I ikke bruger I skal lave en testmetode for hver (ikke triviel) konstruktør/metode Hver testmetode tester flere forskellige ting (via forskellige assertions) Testmetode for konstruktøren Vi skaber et Road objekt og tjekker at feltvariablerne initialiseres korrekt Testmetode for compareto Vi skaber veje mellem byerne fra vores Test Fxiture (setup metode) og tjekker at compareto returnerer værdier med korrekt fortegn import static org.junit.assert.*; import org.junit.after; import org.junit.before; import org.junit.test; public class RoadTest { private Country country1, country2; private City citya, cityb, public void setup() { country1 = new Country("Country 1", null); citya = new City("City A", 80, country1); cityb = cityc public void constructor() { Road road = new Road(cityA, cityb, 4); assertequals(citya, public void compareto() { Road road1 = new Road(cityA, cityb, 0); Road road2 = new Road(cityA, cityc, 0); Road road3 = new Road(cityB, citya, 0); assertequals(true, (road1.compareto(road2) < 0); assertequals(true, road2.compareto(road1) > 0); assertequals(0, road1.compareto(road1)); 22

23 Test af Position klassen Disse ting kan I (som før) stjæle fra den generelle Test Fixture Sætningerne i de to grønne bokse skal I selv tilføje Fjern de ting i Test Fixturen, som ikke bruges Som før skal I lave en testmetode for hver (ikke triviel) konstruktør/ metode Hver testmetode tester flere forskellige ting (via forskellige assertions) Testmetode for konstruktøren Vi tjekker at feltvariablerne initialiseres korrekt Testmetode for hasarrived metoden Hvor mange gange skal move metoden kaldes før hasarrived returnerer true? Når man har lavet et par optagelser af testmetoder og set, hvordan de ser ud, er det langt hurtigere at skrive testmetoderne selv import public class PositionTest { private Country country1; private City citya, cityb; private Position public void setup() { country1 = new Country("Country 1", null); citya = cityb = pos = new Position(cityA, cityb, public void constructor() { assertequals(citya, pos.getfrom()); Spilleren står i citya og er på vej mod cityb, som kan nås i 3 public void hasarrived() { assertequals(false, pos.hasarrived()); pos.move(); assertsequals(false, pos.hasarrived()); pos.move(); assertequals(true, pos.hasarrived()); 23

24 Test af Position klassen (fortsat) Testmetode for move Kald move metoden et antal gange og test hver gang værdierne af distance og returværdi Husk at teste tilfældet, hvor distance er nul Testmetode for turnaround A. move + turnaround B. move + turnaround C. turnaround Efter hvert kald af turnaround tjekkes, at de 4 feltvariablerne i pos har de korrekte værdier Hvis man højreklikker testklassen og vælger Test All skulle man gerne få public void move() { assertequals(3, pos.getdistance()); assertequals(true, pos.move()); assertequals(2, public void turnaround() { pos.move(); A A pos.turnaround(); assertequals(cityb, pos.getfrom()); pos.move(); B B pos.turnaround(); assertequals(, pos.getfrom()) Cpos.turnAround(); C assertequals(, pos.getfrom()) ; 24

25 Test af metoder med tilfældige værdier Når man skal teste arrive metoden i City klassen kan det være nyttigt at resette den seed værdi som Random objektet bruger På den måde kan man finde ud af hvad bonus metoden returnerer, når den kaldes inde fra arrive Test at returværdi og værdien af value er public void arrive(){ game.getrandom().setseed(0); // Set seed int bonus = country1.bonus(80); // Remember bonus game.getrandom().setseed(0); // Reset seed assertequals(bonus, citya.arrive()); // Same bonus assertequals(, citya.getvalue()); Man kan også proppe det hele ind i en for løkke og dermed teste mange forskellige seed værdier Tager ikke meget længere tid Det er opsætningen af Test Fixturen, der er dyr Som ovenfor, bortset fra, at seed nu resettes til public void arrive(){ for(int seed = 0; seed < 1000; seed++) { // Try different seeds game.getrandom().setseed(seed); // Set seed int bonus = country1.bonus(80); // Remember bonus game.getrandom().setseed(seed); // Reset seed assertequals(bonus, citya.arrive()); // Same bonus assertequals(, citya.getvalue()); citya.reset(); Husk at resette byen mellem de enkelte tests 25

26 Eksempler på testmetoder for Country arrive kaldes 3 gange for hver by Så er man nogenlunde sikker på at byens værdi er public void reset() { citya.arrive(); citya.arrive(); citya.arrive(); citye.arrive(); citye.arrive(); citye.arrive(); int valuee = citye.getvalue(); // Remember value of citye country1.reset(); assertequals(80, citya.getvalue()); // citya is reset assertequals(valuee, citye.getvalue()); // citye is Husk de negative test såsom public void bonus() { getroads(c), hvor byen c ikke for(int seed = 0; seed < 1000; seed++) { // Try findes 1000 i landet different seeds game.getrandom().setseed(seed); int sum = 0; Set<Integer> values = new HashSet<>(); getcity("city"), hvor byen "city" ikke findes i landet for(int i = 0; i < 10000; i++) { // Call method times int bonus = country1.bonus(80); assertequals(true, <= bonus && bonus <=); // Correct interval sum += bonus; values.add(bonus); assertequals(true, < sum && sum < ); // Average close to 40 assertequals(, values.size()); // All values returned Man bør lave tilsvarende tests for grænsetilfældene, hvor bonus kaldes med parametrene 0 og 1 26

27 TestServeren TestServeren skal også anvendes for Computerspil 2 Værktøjet tester at jeres regression tests er fornuftige Regression tests kan imidlertid laves på mange forskellige måder, og det er ikke altid entydigt, hvad der bør testes TestServeren afprøver derfor, at jeres regression tests ikke finder fejl i et korrekt projekt finder alle oplagte fejl i nogle forkerte projekter finder de fleste mindre oplagte" fejl i nogle forkerte projekter Brug TestServeren med omtanke Når I får en fejlrapport, bør I rette alle de fejl, der rapporteres og kontrollere, at rettelserne er korrekte, før I atter forsøger at køre TestServeren TestServeren understøtter ikke Hamcrest (som bruges på andre kurser) Når instruktorerne retter jeres opgaver, bruger de links i TestServeren til at tilgå det seneste projekt, som I har kørt på TestServeren Det er derfor vigtigt, at det projekt som I uploader på Blackboards afleveringsside er identisk med det seneste projekt, som I har kørt på TestServeren (for samme aflevering). 27

28 Opsummering Abstrakte klasser og interfaces En abstrakt klasse er en klasse, som man ikke kan lave instanser af En abstrakt klasse kan indeholde abstrakte metoder, hvor kun hovedet er angivet, mens implementationen (kroppen) mangler I et interface er alle metoder abstrakte Funktionelle interfaces Har kun én enkelt abstract metode De steder, hvor man skal bruge et objekt, hvis type er et funktionelt interface, kan man i stedet bruge en lambda Wildcards (jokere) Gør det muligt at beskrive komplicerede typebegrænsninger i forbindelse med generiske klasser Afleveringsopgave: Computerspil 2 Dokumentation og test af de klasser, som I har implementeret i den første delaflevering 28

29 Det var alt for nu.. spørgsmål 29

Har kun én enkelt abstract metode De steder, hvor man skal bruge et objekt, hvis type er et funktionelt interface, kan man i stedet bruge en lambda

Har kun én enkelt abstract metode De steder, hvor man skal bruge et objekt, hvis type er et funktionelt interface, kan man i stedet bruge en lambda Forelæsning Uge 12 Protected access Alternativ til public og private Abstrakte klasser og interfaces En abstrakt klasse er en klasse, som man ikke kan lave instanser af En abstrakt klasse kan indeholde

Læs mere

Forelæsning Uge 12 Torsdag

Forelæsning Uge 12 Torsdag Forelæsning Uge 12 Torsdag Protected access Alternativ til public og private Abstrakte klasser og interfaces En abstrakt klasse er en klasse, som man ikke kan lave instanser (objekter) af En abstrakt klasse

Læs mere

Forelæsning Uge 12 Mandag

Forelæsning Uge 12 Mandag Forelæsning Uge 12 Mandag Protected access Alternativ til public og private Abstrakte klasser og interfaces En abstrakt klasse er en klasse, som man ikke kan lave instanser (objekter) af En abstrakt klasse

Læs mere

Forelæsning Uge 6 Mandag

Forelæsning Uge 6 Mandag Forelæsning Uge 6 Mandag Tingene i denne forelæsning er ikke eksamenspensum Forelæsningen afrunder kurset, og forklarer nogle af de begreber, som I har mødt under kurset uden at få detaljeret forklaring

Læs mere

Forelæsning Uge 11 Torsdag

Forelæsning Uge 11 Torsdag Forelæsning Uge 11 Torsdag Nedarvning En klasse kan være en subklasse af en anden Det betyder at subklassen arver superklassens feltvariabler og metoder Object klassen Superklasse for alle klasser Indeholder

Læs mere

Forelæsning Uge 11 Mandag

Forelæsning Uge 11 Mandag Forelæsning Uge 11 Mandag Nedarvning En klasse kan være en subklasse af en anden Det betyder at subklassen arver superklassens feltvariabler og metoder Object klassen Superklasse for alle klasser Indeholder

Læs mere

Forelæsning Uge 5 Mandag

Forelæsning Uge 5 Mandag Forelæsning Uge 5 Mandag Algoritmeskabeloner findone, findall, findnoof, findsumof (sidste mandag) findbest Brug af klassen Collections og interfacet Comparable BlueJ s Debugger Nyttig til at inspicere

Læs mere

Forelæsning Uge 5 Mandag

Forelæsning Uge 5 Mandag Forelæsning Uge 5 Mandag Sortering ved hjælp af klassen Collections Ved hjælp af interfacet Comparable Ved hjælp af interfacet Comparator findbest som sorteringsproblem Køreprøven i uge 7 Form Forberedelse

Læs mere

Forelæsning Uge 5 Mandag

Forelæsning Uge 5 Mandag Forelæsning Uge 5 Mandag Sortering ved hjælp af klassen Collections Ved hjælp af interfacet Comparable Ved hjælp af interfacet Comparator findbest som sorteringsproblem Information om køreprøven i uge

Læs mere

Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag Forelæsning Uge 3 Torsdag Billedredigering (bl.a. brug af for-løkker) Gråtonebilleder (som er lidt simplere end farvebilleder) Arrays Kan "opbevare" et antal objekter (som ArrayList) Fast (på forhånd kendt)

Læs mere

Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag Forelæsning Uge 3 Torsdag Billedredigering Gråtonebilleder (som er lidt simplere end farvebilleder) Arrays Kan "opbevare" et antal objekter (som ArrayList) Fast (på forhånd kendt) antal elementer Afleveringsopgave:

Læs mere

COMPUTERSPIL 1. Opgave 1. Opgave 2

COMPUTERSPIL 1. Opgave 1. Opgave 2 COMPUTERSPIL 1 I løbet af de kommende fem uger skal I programmere et computerspil, hvor spillerne rejser rundt mellem byer i forskellige lande og indsamler point. Der er en delaflevering hver uge, hvor

Læs mere

COMPUTERSPIL 1. Opgave 1

COMPUTERSPIL 1. Opgave 1 COMPUTERSPIL 1 I løbet af de kommende fem uger skal I programmere et computerspil, hvor spillerne rejser rundt mellem byer i forskellige lande og indsamler point. Der er en delaflevering hver uge, hvor

Læs mere

Forelæsning Uge 5 Mandag

Forelæsning Uge 5 Mandag Forelæsning Uge 5 Mandag Sortering ved hjælp af klassen Collections Ved hjælp af interfacet Comparable Ved hjælp af interfacet Comparator findbest som sorteringsproblem Information om køreprøven i uge

Læs mere

Forelæsning Uge 11. Nedarvning. Object klassen. Projektopgave om computerspil

Forelæsning Uge 11. Nedarvning. Object klassen. Projektopgave om computerspil Forelæsning Uge 11 Nedarvning En klasse kan være en subklasse af en anden Det betyder at subklassen arver superklassens feltvariabler og metoder Object klassen Superklasse for alle klasser Indeholder en

Læs mere

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner Kan (ved simple tilretningerne) bruges til at implementere metoder, der gennemsøger en arrayliste (eller anden objektsamling) og finder objekter, der opfylder

Læs mere

Forelæsning Uge 11. Nedarvning. Object klassen. Projektopgave om computerspil

Forelæsning Uge 11. Nedarvning. Object klassen. Projektopgave om computerspil Forelæsning Uge 11 Nedarvning En klasse kan være en subklasse af en anden Det betyder at subklassen arver superklassens feltvariabler og metoder Object klassen Superklasse for alle klasser Indeholder en

Læs mere

Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag Forelæsning Uge 3 Torsdag Billedredigering Gråtonebilleder (som er lidt simplere end farvebilleder) Rekursive metoder Metoder der kalder sig selv Giver ofte meget elegante og simple løsninger på komplekse

Læs mere

Ugeseddel 4 1. marts - 8. marts

Ugeseddel 4 1. marts - 8. marts Ugeseddel 4 1. marts - 8. marts Læs følgende sider i kapitel 6 i lærebogen: s. 233 258 og s. 291 317 (afsnit 6.3 overspringes). Begynd at overveje, hvad afleveringsopgaven skal omhandle. Læs vejledningen,

Læs mere

BILLEDREDIGERING (IMAGES)

BILLEDREDIGERING (IMAGES) BILLEDREDIGERING (IMAGES) I dette projekt skal I redigere gråtonebilleder ved hjælp af nogle af de teknikker, der blev beskrevet i en forelæsning. Hent BlueJ-projektet Image (zip) og husk at pakke det

Læs mere

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner Kan (ved simple tilretningerne) bruges til at implementere metoder, der gennemsøger en arrayliste (eller anden objektsamling) og finder objekter, der opfylder

Læs mere

Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag Forelæsning Uge 3 Torsdag Billedredigering Gråtonebilleder (som er lidt simplere end farvebilleder) Rekursive metoder Metoder der kalder sig selv Giver ofte meget elegante og simple løsninger på komplekse

Læs mere

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag Forelæsning Uge 2 Torsdag Java syntax og style guide Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Brug

Læs mere

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner findone, findall, findnoof, findsumof Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder strenge) Opfølgning på Skildpadde

Læs mere

DRONNINGER (QUEENS) Opgave 1

DRONNINGER (QUEENS) Opgave 1 DRONNINGER (QUEENS) I denne opgave vil vi beskæftige os med det såkaldte 8-dronningeproblem, hvor man skal placerede 8 dronninger på et 8 x 8 skakbræt, således at ingen af dronningerne kan slå hinanden.

Læs mere

Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag Forelæsning Uge 3 Torsdag Billedredigering Gråtonebilleder (som er lidt simplere end farvebilleder) Rekursive metoder Metoder der kalder sig selv Giver ofte meget elegante og simple løsninger på komplekse

Læs mere

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag Forelæsning Uge 4 Torsdag Algoritmeskabeloner findone, findall, findnoof, findsumof (i mandags) findbest Levetid for variabler og parametre Virkefeltsregler Hvor kan man bruge de forskellige variabler?

Læs mere

DANMARKS TEKNISKE UNIVERSITET

DANMARKS TEKNISKE UNIVERSITET DANMARKS TEKNISKE UNIVERSITET Skriftlig prøve, 14. december 2018, 4 timer Side 1 af 18 Kursus navn: 02101 Indledende Programmering Kursus : 02101 Tilladte hjælpemidler: Ikke-digitale skriftlige hjælpemidler

Læs mere

dintprog Manual Revision: 731 September 30, 2009 1 Introduktion 3 1.1 Notation... 3 I Begreber 4 2 Grundbegreber om programmering 4

dintprog Manual Revision: 731 September 30, 2009 1 Introduktion 3 1.1 Notation... 3 I Begreber 4 2 Grundbegreber om programmering 4 dintprog Manual Revision: 731 September 30, 2009 Indhold 1 Introduktion 3 1.1 Notation................................. 3 I Begreber 4 2 Grundbegreber om programmering 4 3 Grundbegreber om modellering

Læs mere

Forelæsning Uge 6 Mandag

Forelæsning Uge 6 Mandag Forelæsning Uge 6 Mandag Funktionel programmering i Java (Kapitel 5) Forskellen på imperative og funktionelle programmeringssprog Lambda'er (kodestumper, der kan bruges som parametre i et metodekald) Streams

Læs mere

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Java syntax og style guide Afleveringsopgave:

Læs mere

dintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4

dintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4 dintprog Manual Revision: 1241 August 24, 2010 Indhold I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4 3 Grundbegreber om modellering 4 III Sprogkonstruktioner 5 4 Klasser

Læs mere

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne. Exercise 1: Opgave 9.1 på CodeJudge. a) Lav klasserne Cirkel, Rektangel og Kvadrat, som implementerer vedhæftede interface From.java (se CodeJudge). Lav Rektangel før du laver Kvadrat. Kan du bruge nedarvning

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 20. marts, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Billedbehandling. Processering af digitale billeder

Billedbehandling. Processering af digitale billeder Billedbehandling Processering af digitale billeder Billedbehandling Lighten Blur Darken Invert Billedrepræsentation 0 0 x width Pixel (x, y) [0..255] 0 ~ sort, 255 ~hvid x [0..width[, y [0..heigth[ y height

Læs mere

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag Forelæsning Uge 4 Torsdag Algoritmeskabeloner findone, findall, findnoof, findsumof (sidste mandag) findbest Levetid for variabler og parametre Virkefeltsregler Hvor kan man bruge de forskellige variabler?

Læs mere

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Objekters tilstand og opførsel BlueJ og Greenfoot Java Skabelse af objekter (via new-operatoren) Iteration (gentagelser) og parametrisering Forskellige slags variabler Afleveringsopgave:

Læs mere

Forelæsning Uge 6 Mandag

Forelæsning Uge 6 Mandag Forelæsning Uge 6 Mandag Funktionel programmering i Java (Kapitel 5) Forskellen på imperative og funktionelle programmeringssprog Lambda'er (kodestumper, der kan bruges som parametre i et metodekald) Streams

Læs mere

Klasser og objekter. (Afsnit i manualen)

Klasser og objekter. (Afsnit i manualen) Klasser og objekter (Afsnit 4 + 5 i manualen) Grundbegreber Klasser og objekter beskrivelse oprettelse Attributter og metoder tilstand opførsel Indkapsling afskærmning datarepræsentationsuafhængighed Klasser

Læs mere

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag Forelæsning Uge 2 Torsdag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser Klassevariabler og klassemetoder Variabler og metoder der et tilknyttet klassen (i stedet for at være tilknyttet

Læs mere

Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner

Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner Forelæsning 4.1 Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner finden findalle Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder strenge) Afleveringsopgave

Læs mere

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java Kursus i OOP og Java Kursus i Objektorienteret programmering i Java Åben Dokumentlicens Dette foredragsmateriale er under Åben Dokumentlicens (ÅDL) Du har derfor lov til frit at kopiere dette værk Bruger

Læs mere

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag Forelæsning Uge 3 Mandag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser ArrayList Collection med variabelt antal elementer Der er mange andre Collection typer (se Collection interfacet

Læs mere

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning Datalogi OB, Efterår 2002 OH er, forelæsning 10/9-2002 Klasser og nedarvning Hvad er formålet? Typer, generisk kode, typeparameterisering Kritisk kig på, hvordan man gør i Java. Eftermiddagens opgave:

Læs mere

Forelæsning Uge 6 Mandag

Forelæsning Uge 6 Mandag Forelæsning Uge 6 Mandag Funktionel programmering i Java (Kapitel 5) Lambda'er (kodestumper, der kan bruges som parametre i et metodekald) Streams (sekvenser af data / strømme af data) Brug af assignments

Læs mere

Forelæsning Uge 6 Mandag

Forelæsning Uge 6 Mandag Forelæsning Uge 6 Mandag Funktionel programmering i Java (Kapitel 5) Lambda'er (kodestumper, der kan bruges som parametre i et metodekald) Streams (sekvenser af data / strømme af data) Brug af assignments

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 29. februar, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Java syntax og style guide Afleveringsopgave:

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2019 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 27. februar, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 13. marts, 2018 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag Forelæsning Uge 2 Torsdag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser Klassevariabler og klassemetoder Variabler og metoder der et tilknyttet klassen (i stedet for at være tilknyttet

Læs mere

Forelæsning Uge 1 Torsdag

Forelæsning Uge 1 Torsdag Forelæsning Uge 1 Torsdag Objekters tilstand og opførsel Java og BlueJ Skabelse af objekter (via new-operatoren) Iteration (gentagelser) og parametrisering Java's for løkke Parametre i metoder Forskellige

Læs mere

Forelæsning Uge 1 Torsdag

Forelæsning Uge 1 Torsdag Forelæsning Uge 1 Torsdag Objekters tilstand og opførsel Java og BlueJ Skabelse af objekter (via new-operatoren) Iteration (gentagelser) og parametrisering Java's for løkke Parametre i metoder Forskellige

Læs mere

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 Opgavebesvarelsen skal afleveres som enten en printerudskrift eller som et passende dokument sendt via email til fjj@noea.dk. Besvarelsen skal

Læs mere

Tree klassen fra sidste forelæsning

Tree klassen fra sidste forelæsning Programmering 1999 Forelæsning 12, fredag 8. oktober 1999 Oversigt Abstrakte klasser. Grænseflader. Programmering 1999 KVL Side 12-1 Tree klassen fra sidste forelæsning class Tree { int age; // in years

Læs mere

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Java syntax og style guide Afleveringsopgaver

Læs mere

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag Forelæsning Uge 3 Mandag ArrayList klassen Gør det let at lave en objektsamling (collection) med et variabelt antal elementer Der er mange andre slags objektsamlinger (se Collection interfacet i JavaDoc)

Læs mere

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag Forelæsning Uge 2 Torsdag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser Klassevariabler og klassemetoder Variabler og metoder der et tilknyttet klassen (i stedet for at være tilknyttet

Læs mere

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Java syntax og style guide Afleveringsopgaver

Læs mere

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1. Programmering 1999 Forelæsning 4, fredag 10. september 1999 Klasser og objekter Felter, konstruktorer, this Eksempler på klasser: Time, Appointment Eksempler på metoder i Time og Appointment Klassefelter:

Læs mere

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag Forelæsning Uge 3 Mandag ArrayList Collection (samling af objekter) med variabelt antal elementer Der er mange andre Collection typer (se Collection interfacet i JavaDoc) MusicOrganizer projektet Eksempel

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2013 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 5. marts, 2013 Dette projekt udleveres i to dele. Hver del har sin deadline, således

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2015 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 3. marts, 2015 Dette projekt udleveres i to dele. Hver del har sin deadline, således

Læs mere

Forelæsning Uge 9 Mandag

Forelæsning Uge 9 Mandag Forelæsning Uge 9 Mandag Arrays Objektsamlinger med et fast (på forhånd kendt) antal elementer Velkendt fra mange andre programmeringssprog Principper for design af klasser Undgå f.eks. at have den samme

Læs mere

Tabelbegrebet. Klassediagrammer (III) Oversigt. Anvendelse af Tabeller. Tabeller og qualified associations

Tabelbegrebet. Klassediagrammer (III) Oversigt. Anvendelse af Tabeller. Tabeller og qualified associations Tabelbegrebet Klassediagrammer (III) Tabeller og qualified associations originally by Michael R. Hansen modified/extended by Anne E. Haxthausen Informatics and Mathematical Modelling Technical University

Læs mere

Klasser og nedarvning

Klasser og nedarvning Datalogi C, Efterår 2004 OH er, forelæsning 21/9-2004 Klasser og nedarvning Hvad er formålet? Typer, generisk kode, typeparameterisering Kritisk kig på, hvordan man gør i Java. Opgaven til senere: Generalisere

Læs mere

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag Forelæsning Uge 4 Torsdag Klassevariabler og klassemetoder Levetid for variabler og parametre Virkefeltsregler Projektopgave Kaninjagt Lommeregner (for MAT studerende) Klassevariabler og klassemetoder

Læs mere

Forelæsning Uge 10 Torsdag

Forelæsning Uge 10 Torsdag Forelæsning Uge 10 Torsdag Opremsningstyper Enumerated types Forskellige teknikker til test og debugging Når man tester undersøger man, om opførslen (semantikken) er den ønskede Når man debugger (afluser),

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4 DM502 Forelæsning 4 Flere kontrolstrukturer for-løkke switch-case Metoder Indhold Arrays og sortering af arrays String-funktioner for-løkke Ofte har man brug for at udføre det samme kode, for en sekvens

Læs mere

Software Construction 1 semester (SWC) Spørgsmål 1

Software Construction 1 semester (SWC) Spørgsmål 1 Spørgsmål 1 Objekter #1 Giv en kort præsentation af begrebet objekt, samt hvorledes du erklærer(declare), opretter(create) og bruger objekter Du kan beskrive o Datatyper o Variable / Instans variable /

Læs mere

class subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree.

class subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree. Programmering 1999 Forelæsning 11, tirsdag 5. oktober 1999 Oversigt Klasse-hierarkier: superklasser og subklasser Nedarvning Polymorfi Programmering 1999 KVL Side 11-1 Hierarkier En klasse repræsenterer

Læs mere

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Finn Nordbjerg 1/9 Indledning I det følgende introduceres et par abstrakte

Læs mere

Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion

Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion Polymorfi Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type Coercion Tvangskonvertering (forfremmelse og begrænsning) Oversigt Abstrakt klasse abstrakt

Læs mere

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag Forelæsning Uge 3 Mandag ArrayList Collection med variabelt antal elementer Der er mange andre Collection typer (se Collection interfacet i JavaDoc) MusicOrganizer projektet Eksempel på brug af ArrayList

Læs mere

Om binære søgetræer i Java

Om binære søgetræer i Java Om binære søgetræer i Java Mads Rosendahl 7. november 2002 Resumé En fix måde at gemme data på er i en træstruktur. Måden er nyttig hvis man får noget data ind og man gerne vil have at det gemt i en sorteret

Læs mere

Abstrakte datatyper C#-version

Abstrakte datatyper C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype

Læs mere

Software Construction 1. semester (SWC) januar 2014 Spørgsmål 1

Software Construction 1. semester (SWC) januar 2014 Spørgsmål 1 Spørgsmål 1 Grundlæggende objektorienterede begreber o Klasse (class) o Objekt (object) o Metode (method), herunder return type og parametre o Instansvariable (instance variables) & egenskaber (properties),

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter side 1 af 9 sider Skriftlig eksamen i Datalogi Modul 1 Vinter 1999/2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 5% Opgave 2

Læs mere

Forelæsning Uge 9 Mandag

Forelæsning Uge 9 Mandag Forelæsning Uge 9 Mandag Arrays Objektsamlinger med et fast (på forhånd kendt) antal elementer Velkendt fra mange andre programmeringssprog Principper for design af klasser Undgå f.eks. at have den samme

Læs mere

Hvad er Objekter - Programmering

Hvad er Objekter - Programmering Denne guide er oprindeligt udgivet på Eksperten.dk Hvad er Objekter - Programmering En rigtig god gennemgang af hvad objekter er! Hvordan de oprettes og anvendes! Det er helt klart til nybegyndere, som

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter Skriftlig eksamen i Datalogi Modul 1 Sommer 1999 Opgavesættet består af 5 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 15% Opgave 2 15% Opgave 3 8% Opgave

Læs mere

SWC eksamens-spørgsmål. Oversigt

SWC eksamens-spørgsmål. Oversigt SWC eksamens-spørgsmål Oversigt #1 Typer og variable #2 Aritmetik og logik #3 Klasser (definition, objekter) #4 Klasser (metoder) #5 Klasser (nedarvning, polymorfi) #6 Conditional statements #7 Repetition

Læs mere

I denne artikel vil vi bruge en User klasse som vi så vil gruppere på forskellige måder.

I denne artikel vil vi bruge en User klasse som vi så vil gruppere på forskellige måder. Denne guide er oprindeligt udgivet på Eksperten.dk Collections i.net Når du kigger i namespacet System.Collections finder du over 10 forskellige klasser. At vælge den rigtige til netop din applikations

Læs mere

Stakke, køer og lidt om hægtede lister - kapitel 16 og 17

Stakke, køer og lidt om hægtede lister - kapitel 16 og 17 Datastrukturer & Algoritmer, Datalogi C Forelæsning 2/11-2004 Henning Christiansen Stakke, køer og lidt om hægtede lister - kapitel 16 og 17 Fundamentale datastrukturer man får brug for igen og igen Et

Læs mere

Virkefeltsregler i Java

Virkefeltsregler i Java Virkefeltsregler i Java int i; int k; Sequence s; int j; What s in a name? Brian spillede blændende i søndags! Skolen ligger i Viby Ring til Kirsten og sig at... Et navn fortolkes i en kontekst og konteksten

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter side 1 af 11 sider Skriftlig eksamen i Datalogi Modul 1 Sommer 2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 10% Opgave 2 10%

Læs mere

DM01 DM01. 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 18/3-2003. Side 1 af 11

DM01 DM01. 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 18/3-2003. Side 1 af 11 DM01 DM01 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk D12, Elias 18/3-2003 Side 1 af 11 DM01 Indholdsfortegnelse: BILAG:...2 1 FORMÅL:...3 2 KLASSER:...4 2.1 DILEMMA:...4 2.1.1 METODER:...4

Læs mere

public Set(int size) { this.listelement = new LinkedList<Integer>(); }

public Set(int size) { this.listelement = new LinkedList<Integer>(); } // Henri AYCARD import java.util.linkedlist; public class Set { private LinkedList listelement; public Set(int size) { this.listelement = new LinkedList(); public boolean contains(int

Læs mere

Objektsamlinger med et fast (på forhånd kendt) antal elementer Velkendt fra mange andre programmeringssprog

Objektsamlinger med et fast (på forhånd kendt) antal elementer Velkendt fra mange andre programmeringssprog Forelæsning Uge 9 Arrays Objektsamlinger med et fast (på forhånd kendt) antal elementer Velkendt fra mange andre programmeringssprog Principper for design af klasser Undgå f.eks. at have den samme kode

Læs mere

Civilingeniøreksamen 49104 12. januar 2001. Skriftelig prøve den 12. januar 2001 Kursusnummer 49104

Civilingeniøreksamen 49104 12. januar 2001. Skriftelig prøve den 12. januar 2001 Kursusnummer 49104 Skriftelig prøve den 12. januar 2001 Kursusnummer 49104 Kursusnavn: Programmering. Tilladte hjælpemidler: Alle skriftlige hjælpemidler Opgavesættet består af fire opgaver, der har følgende vægtning: Opgave

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2019 Projekt, del III Institut for matematik og datalogi Syddansk Universitet 10. april, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Tabeller (I) Tabeller

Tabeller (I) Tabeller Tabeller (I) Klassediagrammer (III) Tabeller og qualified associations Michael R. Hansen mrh@imm.dtu.dk Informatics and Mathematical Modelling Technical University of Denmark En tabel fra en mængde A til

Læs mere

Stakke, køer og lidt om hægtede lister

Stakke, køer og lidt om hægtede lister Datastrukturer & Algoritmer, Datalogi C Forelæsning 4/11-2003 Henning Christiansen Stakke, køer og lidt om hægtede lister - kapitel 16 og 17 Hvorfor? Fundamentale datastrukturer man får brug for igen og

Læs mere

4 Basal Objekt-orienteret Programmering I.

4 Basal Objekt-orienteret Programmering I. 4 Basal Objekt-orienteret Programmering I. Klasser i forhold til abstrakte datatyper og record-typer. Variable og operationer. Klasse-interfaces. Klasser og typer. Klasse-instantiering og initialisering.

Læs mere

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation). Denne guide er oprindeligt udgivet på Eksperten.dk RMI introduktion Denne artikel beskriver Java RMI (Remtote Method Invocation). Den beskriver teorien bag RMI, viser et simpelt kode eksempel og forklarer

Læs mere

Vejledende løsninger

Vejledende løsninger Roskilde Universitetscenter side 1 af 8 sider Vejledende løsninger Opgave 1 Spørgsmål 1.1 a = b - a; b = b - a; a = b + a; Opgaven har flere løsninger. En anden løsning er: a = b + a; b = a - b; a = a

Læs mere

METODER ARV KLASSER. Grundlæggende programmering Lektion 5

METODER ARV KLASSER. Grundlæggende programmering Lektion 5 METODER KLASSER ARV Grundlæggende programmering Lektion 5 1 METODER Sekvenser af kode om samme emne 2 REPETITION Række af statements der udfører en handling Mindst én metode der hedder main Forskellen

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java Dag 6 Komponenter (og lidt Swing og MVC) Læsning: VP 4, evt. VP 6 Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html Grafiske komponenter

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3 DM502 Forelæsning 3 Indlæsning fra tastatur Udskrift til skærm Repetition Beregning af middelværdi Gentagelse med stop-betingelse (while) Heltalsdivision Division med nul Type-casting ( (double) ) Betinget

Læs mere

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt.

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt. Merging og hashing Mål Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt. Dette emne er et uddrag af kurset DM507 Algoritmer og datastrukturer (2. semester). Mål

Læs mere