Forelæsning Uge 11 Torsdag

Save this PDF as:
 WORD  PNG  TXT  JPG

Størrelse: px
Starte visningen fra side:

Download "Forelæsning Uge 11 Torsdag"

Transkript

1 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 en række nyttige metoder, bl.a. getclass, tostring, equals og hashcode Afleveringsopgave: Computerspil 2 Dokumentation og test af de klasser, som I har implementeret i den første delaflevering

2 Nedarvning (subklasser) Vi vil gerne modellere et simpelt nyhedssystem med to slags meddelelser Almindelige tekstmeddelelse (MessagePost) Fotomeddelelse (PhotoPost) Uden brug af nedarvning ser det sådan ud Feltvariabler Metoder Stort overlap, men også forskelle 2

3 Dublering af kode MessagePost og PhotoPost ligner hinanden Store dele af de to klassers Java kode er identiske Det gør koden svær at overskue og vanskelig at vedligeholde Der opstår let fejl og inkonsistens, f.eks. når man ændrer noget i den ene klasse, men glemmer at rette i den anden Også dublering i NewsFeed klassen Den har to arraylister Mange metoder gennemløber begge lister (dubleret kode) Det er endnu værre, hvis vi i stedet for to slags postings har mange forskellige slags 3

4 Brug af nedarvning (subklasser) Vi kan i stedet lave en Post klasse, som har MessagePost og PhotoPost som subklasser En subklasse arver alle feltvariabler og metoder fra den oprindelig klasse Superklasse Vi har nu kun én arrayliste i NewsFeed klassen Bemærk formen på pilehovederne Fælles feltvariabler og metoder postings Post Subklasser Forskellige feltvariabler og metoder MessagePost PhotoPost MessagePost Nemmere at overskue Ingen kodedublering 4

5 Nedarvning i Java public class Post { Superklasse private String username; private long timestamp; private int likes; private ArrayList<String> comments; public Post(String author) { username = author; timestamp = System.currentTimeMillis(); likes = 0; comments = new ArrayList<>(); // Methods omitted public class MessagePost extends Post { private String message; Feltvariabel I tilgift til de 4, der nedarves Konstruktør Initialiserer feltvariablen Kalder superklassens konstruktør, så de fire nedarvede feltvariabler kan blive initialiseret 4 feltvariabler Konstruktør Initialiserer de 4 feltvariabler Angiver at klassen er en subklasse af Post Subklasse public MessagePost(String author, String text) { super(author); message = text; // Methods omitted 5

6 Access rettigheder public class Post { Superklasse private String username; private long timestamp; private int likes; private ArrayList<String> comments; public Post(String author) { username = author; timestamp = System.currentTimeMillis(); likes = 0; comments = new ArrayList<>(); // Methods omitted public class MessagePost extends Post { private String message; Java kræver at første sætning i en subklasses konstruktør er et kald til superklassens konstruktør Hvis dette ikke er tilfældet, indsætter compileren et sådant kald (uden parametre) De 4 feltvariabler i superklassen er private Subklassen kan (som alle andre klasser) kun tilgå dem via public accessor og mutator metoder defineret i superklassen public metoder fra superklassen kan kaldes i subklassen som om de var lokale Uden brug af dot notation methodname(args) Subklasse public MessagePost(String author, String text) { super(author); message = text; // Methods omitted 6

7 Subtyper Alle objekt klasser bestemmer en type Når en klasse B er en subklasse af klassen A, siger vi at typen B er en subtype af typen A (som er en supertype af typen B) De steder, hvor der skal bruges et objekt af typen A, kan man i stedet bruge et objekt af en subtype B Assignments A a; B b; a = b; Parameterværdier public void pip(a param) {...; Returværdier Elementer i objektsamlinger Ovenstående er kendt som Liskovs substitutionsprincip Vi har tidligere sagt at typerne skal matche (for assignments, parametre og returværdier) public A pop() {... return b;... ArrayList<A> list; B b; list.add(b); pip(b); Mere præcist betyder det, at typen af udtrykket skal være den samme som variablens/parameterens type eller være en subtype heraf 7

8 NewsFeed klassen public class NewsFeed { private ArrayList<Post> posts; public NewsFeed() { posts = new ArrayList<>(); public void addpost(post post) { posts.add(post); public void show() { for(post post : posts) { post.display(); System.out.println(); Feltvariabel Arrayliste med elementtypen Post Elementerne i listen vil være af typen MessagePost eller PhotoPost Konstruktør Initialiserer feltvariablen Metode til indsættelse af postings Bemærk at parameteren er af typen Post Argumenter af typen MessagePost og PhotoPost er også lovlige Metode til udskrift af alle postings For-each løkken løber arraylisten igennem og udskriver de enkelte elementer ved hjælp af display metoden fra Post klassen 8

9 Statisk og dynamisk type Lad os se lidt nærmere på show metoden fra foregående slide public void show() { for(post post : posts) { post.display(); System.out.println(); Den lokale variabel post er erklæret til at have typen Post Vi siger derfor, at den statiske type for variablen post er Post De objekter som variablen post vil pege på er af typen MessagePost eller typen PhotoPost Vi siger derfor, at den dynamiske type for post er MessagePost, når post peger på et MessagePost objekt PhotoPost, når post peger på et PhotoPost objekt Opsummering Den statiske type bestemmes af variablens erklæring Den dynamiske type bestemmes af det objekt, som variablen pt peger på 9

10 Typeskift (type cast) Vehicle v1 = new Vehicle(); Vehicle v2 = new Car(); Vehicle v3 = new Bicycle(); Vehicle v = new Car(); Car c = new Car(); v = c; // Lovligt c = v; // Ulovligt, compile-time fejl c = (Car) v; // Lovligt Javas variabler er polymorfe De kan antage værdier af forskellig type Polymorf kan antage forskellige former Type cast Typen af udtrykket ændres til at være Car Kun muligt, hvis den dynamiske type af v er Car (eller en subtype af Car) Ellers får man en run-time fejl Objektet v ændres ikke på nogen måde ved et type cast Det eneste, der ændres, er typen af udtrykket på højresiden af assignmentet 10

11 Nedarvning i flere niveauer En subklasse kan igen have subklasser, osv. Dog klassen er en Direkte subklasse af Mammal klassen Subklasse af Animal klassen (subklasse relationen er transitiv) Subklasse af sig selv (subklasse relationen er refleksiv) Direkte superklasse for Poodle og Dalmatian klasserne Superklasse af sig selv (superklasse relationen er refleksiv og transitiv) 11

12 Klassediagram for brug af Comparator 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)... 3 forskellige slags UML pile Fuldt optrukne pile med lukket hoved angiver nedarvning mellem klasser/interfaces Stiplede pile med lukket hoved angiver implementation af interface Stiplede pile med åbent hoved angiver brug (uses) <<interface>> Comparable int compareto(t o) <<interface>> List <<interface>> Queue <<interface>> Set Pixel Person String ArrayList HashSet LinkedList Adult Child 12

13 Metoder i subklasser Lad os nu kigge lidt nærmere på metoder i super- og subklasser Post klassen har en display metode, der udskriver information om klassens tilstand display metoden har kun adgang til feltvariabler i Post klassen Hvad gør vi, hvis vi gerne vil udskrive information om subklassernes feltvariabler? Fælles feltvariabler og metoder Sidebemærkning (om cohesion) display metoden udskriver klassens tilstand Det ville være bedre at have en tostring metode, der returnerer en tekststreng Så kan man på kaldstedet selv bestemme, hvad man vil gøre ved tekststrengen Forskellige feltvariabler og metoder 13

14 Situationen er som vist nedenfor public void display() { System.out.println( username ); System.out.print(timeString( timestamp )); if( likes > 0) { System.out.println(likes + " people like this."); else { System.out.println(); if( comments.isempty()) { System.out.println("No comments."); else { System.out.println(comments.size() + " comment(s)."); public void show() { for(post post : posts) { post.display (); System.out.println(); Newsfeed Post Post klassens display metode kender ikke de feltvariabler, der ligger i subklasserne, og kan derfor ikke udskrive information om disse 14

15 Første løsningsforslag (virker ikke) Vi kan flytte display metoden til de to subklasser Det giver massiv kodedublering Metoderne har kun adgang til superklassens feltvariabler via acces metoder Vi får en compile-time fejl i NewsFeed klassen Den lokale variabel post har Post som sin statiske type public void show() { for( Post post : posts) { post.display (); System.out.println(); Newsfeed Oversætteren bruger altid den statiske type og kigger derfor (uden held) i Post klassen (og dens superklasser) for at finde display metoden Det hjælper ikke, at alle subklasserne har en display metode xxx 15

16 Korrekt løsning Vi har både en display metode i superklassen og i de to subklasser Vi undgår kodedublering display metoderne i subklasserne kalder (via super) display metoden i superklassen og har (via den) adgang til superklassens feltvariabler uden brug af acces metoder public void display() { super.display(); System.out.println(message); MessagePost public void display() { super.display(); System.out.println(filename); System.out.println(caption); PhotoPost 16

17 Statiske type Oversætteren bruger den statiske type, dvs. typen fra variablens erklæring Den lokale variabel post er erklæret til at være af typen Post Oversætteren kigger derfor i Post klassen for at finde display metoden (og finder den) public void show() { for( Post post : posts) { post.display (); System.out.println(); Newsfeed 17

18 Dynamiske type Under programudførelsen bruges den dynamiske type, dvs. typen af variablens aktuelle værdi Når den aktuelle værdi af post er en MessagePost kaldes displaymetoden fra MessagePost Når den aktuelle værdi af post er en PhotoPost kaldes display metoden fra PhotoPost public void show() { for(post post : posts) { post.display (); System.out.println(); Newsfeed De to subklasser overskriver superklassens display metode med deres egne udgaver af metoden På engelsk: override underkende/tilsidesætte De nye metoder skal have samme signatur som den de overskriver Når man overskriver en metode, bør man (af hensyn til compileren/ dem der læser koden) i linjen over metodesignaturen 18

19 Simpelt eksempel (kun en klasse) v1.display(); Ingen nedarvning Ingen overskrivning Vi bestemmer v1 s dynamiske type Find variablen v1 Find det objekt, som v1 peger på Find objektets type (klasse) display metoden søges i PhotoPost og findes der 19

20 Nedarvning uden overskrivning v1.display(); Vi bestemmer v1 s dynamiske type Find variablen v1 Find det objekt, som v1 peger på Find objektets type (klasse) display metoden søges i PhotoPost (uden held) display metoden søges i superklasserne (efter tur) og findes i Post display findes altid ellers ville vi have fået en compile-time fejl 20

21 Nedarvning med overskrivning v1.display(); display Vi bestemmer v1 s dynamiske type Find variablen v1 Find det objekt, som v1 peger på Find objektets type (klasse) display metoden søges i PhotoPost og findes der 21

22 Dynamic method lookup (opsummering) Under udførslen findes den rigtige metoden ved at bestemme variablens dynamiske type søge metoden i denne klasse eller i en superklasse af den Oversætteren har tjekket, at metoden findes i variablens statiske type (eller en af dennes superklasser) Den dynamiske type er en subtype af den statiske type Vi er derfor sikre på at finde metoden Den er i den statiske type (eller en af dennes superklasser), men kan være overskrevet i en subtype af den statiske type Ovenstående er kendt som dynamic method lookup Spiller en essentiel rolle i anvendelsen af subklasser Tillader at de enkelte subklasser kan lave deres egne specialtilpassede versioner af en metode Eksempel på responsibility-driven design 22

23 Polymorfi Betyder at noget kan antage forskellige former Vi har tidligere set, at Javas variabler er polymorfe De kan antage værdier af forskellig type Vi har nu set, at også Javas metoder er polymorfe Et metodekald kan aktivere metoder i forskellige klasser (typer) public void show() { for(post post : posts) { post.display (); System.out.println(); Newsfeed Metodekaldet aktiverer sommetider display metoden i MessagePost og sommetider display metoden i PhotoPost 23

24 Object klassen Alle klasser i Java er subklasser af Object klassen Object klassen indeholder en række nyttige metoder, som de øvrige klasser nedarver (eller overskriver) getclass metoden fortæller, hvilken klasse objektet tilhører tostring metoden returnerer en tekstrepræsentation af det pågældende objekt equals metoden tjekker om to objekter "ligner hinanden" hashcode metoden beregner en hashkode 24

25 getclass metoden og instanceof Man kan undersøge et objekts klasse på forskellige vis Ved hjælp af det reserverede ord instanceof Her testes om objektet tilhører den angivne klasse eller en subklasse heraf Vehicle v; Car c; if( v instanceof Car){ c = (Car) v; Ved hjælp af getclass metoden (fra Object klassen) Metoden returnerer et objekt fra klassen Class I et kørende program har hver type (også de primitive) et (og kun et) tilhørende objekt i Class Class er en parametriseret type og objektet for klassen A tilhører Class<A> if( x.getclass() == y.getclass() ) {... Man kan også skrive som vist nedenfor (hvor Person.class angiver Person klassens objekt i klassen Class<Person>) if( x.getclass() == Person.class ) {... I de to sidste tilfælde skal klasserne matche eksakt det er ikke nok at den ene er en subklasse af den anden (som ved brug af instanceof) 25

26 tostring metoden Metoden bruges bl.a. i print og prinln metoderne Hvis argumentet til metoderne ikke allerede er en tekststreng, bruges tostring til at konvertere argumentet til en tekststreng Det er også tostring metoden, der bruges, når den ene side af en + operation skal konverteres til en tekststreng I Object klassen er tostring metoden defineret til at returnere hvor Person er klassens navn og 19bb25a er den hexadecimale repræsentation af hashkoden (som vi vender tilbage til) Hashkoden giver ikke ret meget interessant information String klassen redefinerer metoden til at returnere værdien af tekststrengen (i stedet for Jeres egne klasser bør også redefinere tostring metoden For personklassen kan man f.eks. returnere tekststrengen Cecilie:18, hvor Cecilie er personens navn og 18 er personens alder I køreprøveopgaverne blev I altid bedt om at redefinere tostring metoden (for den simple af klasserne) 26

27 equals metoden Metoden bruges bl.a. i collections til at afgøre om et givet element er indeholdt i en mængde (Set) for en mængde vil et kald add(elem) kun tilføje elementet, hvis der ikke eksisterer et element e i mængden, så elem.equals(e) er sand I Object klassen er equals metoden defineret ved hjælp af == Det betyder at e1.equals(e2) kun evaluerer til sand, hvis de to objekter er identiske (e1 == e2) Dette er ofte for restriktivt String klassen redefinerer metoden til at tjekke om de to tekststrenge er ens, dvs. indeholder de samme tegn (i samme rækkefølge) Jeres egne klasser bør også redefinere equals metoden Det kræves at equals er en ækvivalensrelation Refleksiv: x.equals(x) for alle x Symmetrisk: x.equals(y) y.equals(x) for alle x,y Transitiv: x.equals(y) y.equals(z) x.equals(z) for alle x,y,z Teknisk: x!= null!x.equals(null) for all x 27

28 Redefinering af equals metoden For Person klassen kan man definere equals som følger Optimalisering null? Rigtig klasse? Type cast Sammenlign (udvalgte) feltvariabler public boolean equals(object otherobject) { if( this = = otherobject ) {return true; if( otherobject = = null ){return false; if( getclass()!= otherobject.getclass() ) {return false; Person other = (Person) otherobject; return name.equals(other.name) && age == other.age; I subklassen Child kan man definere equals som følger Kald af equals i superklassen korrekt klasse mv superklassens feltvariabler Tjek af egne feltvariabler public class Child extends Person { private int nooftoys; Feltvariabel... public boolean equals(otherobject) { if(!super.equals(otherobject) ) {return false; return nooftoys = = other.nooftoys;... 28

29 hashcode metoden Metoden returnerer en hashkode for objektet Hashkoder bruges som nøgler i såkaldte hashtabeller, f.eks. i klasserne HashSet og HashMap Det kræves, at hashcode er konsistent med equals x.equals(y) hashcode(x) == hashcode(y) Derudover bør hashcode være konstrueret således, at der for to forskellige objekter (! x.equals(y)) er lille sandsynlighed for at deres hashkoder kolliderer (hascode(x) == hashcode(y)) I Object klassen er hashcode metoden defineret som objektets memory adresse Dermed er det nemt at se, at hashcode er konsistent med equals Hvis jeres egne klasser redefinerer equals metoden, vil det normalt også være nødvendigt at redefinere hashcode metoden Dette gøres for at sikre at ovenstående betingelse stadig er opfyldt 29

30 Hashkoder for tekststrenge Det er en hel videnskab at definere hashkoder, hvor der er så få kollisioner som muligt Lad os starte med at se, hvordan hashcode kan defineres i String klassen s er en feltvariabel, der indeholder værdien af tekststrengen public int hashcode() { int hc = 0; for( int i = 0; i < s.length(); i++) { hc = hc 31 + * s.charat(i); hc + s.charat(i); return hc; hashcode("eat") = 'e' *'a' 'e' + + 't' 31 = * 101 'a' 't' = = 314 hashcode("tea") = 't' *'e' 't' + + 'a' 31 = * 116 'e' 'a' + 97 = =

31 Hashkoder for jeres egne klasser For Person klassen kan man definere hashcode som følger Vi bruger kun de feltvariabler, som tjekkes i equals metoden Primitive værdier konverteres først til deres wrapper type Hashkoderne multipliceres med forskellige primtal før de adderes public int hashcode() { return 11 * name.hashcode() + 13 * new Integer(age).hashCode(); I subklassen Child kan man definere hashcode som følger Hashkode for superklassens feltvariabler Hashkode for egne feltvariabler public class Child extends Person { private int nooftoys; Feltvariabel... public boolean hashcode() { return super.hashcode() + 17 * new Integer(noOfToys).hashCode();... 31

32 Afleveringsopgave: Computerspil 2 I den anden delaflevering skal I bruge nogle af de ting, som I har lært om dokumentation og test, på de fire klasser, som I har implementeret i den første delaflevering Gennemgå de fire klasser, og tilføj dokumentation, således at den er helt i top og følger de retningslinjer, der gives i BlueJ bogen (herunder specielt afsnit 6.11, afsnit 9.7 og Appendix I) Lav velvalgte regression tests for de fire klasser I skal både teste, hvad der normalt sker, og hvad der sker i specialtilfælde og tæt ved grænseværdier Husk, at der skal være både positive og negative tests Det er dog ikke nødvendigt at lave test metoder 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 32

33 Dokumentation af Road klassen Kommentar for klassen Kommentar for feltvariablerne Kommentar for konstruktøren Kommentar for metoden /** * Represents a road (between to cities). * A road is one-directional. This means that we may have a road from * City A to City B, without having a road from City B to City A. * Kurt Jensen. April */ public class Road implements Comparable<Road> { /** References to the cities connected by this Road */ private City from, to; /** Length of this Road. */ private int length; /** * Creates a new Road object. from City where this Road starts. to City where this Road ens. length Length of this Road object. */ public Road(City from, City to, int length){ this.from = from; this.to = to; this.length = length; /** * Returns a reference to the City where this Road starts. from city. */ public City getfrom(){ return from;... 33

34 Documentation view Husk at kontrollere, at resultatet er fornuftigt Skal give relevant og letlæselig information Til brugere, der ikke kender implementationen af jeres klasser. 34

35 Test All: Test of Road klassen Fra den generelle Test Fixture kan I "stjæle" import sætningerne Feltvariablerne for landet og byerne Erklæringerne 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 test metode 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(road.getfrom(), public void compareto() { Road road1 = new Road(cityA, cityb, 0); Road road2 = new Road(cityA, cityc, 0); Road road3 = new Road(cityB, citya, 0); asserttrue(road1.compareto(road2) < 0);... asserttrue(road2.compareto(road1) > 0);... assertequals(road1.compareto(road1), 0); 35

36 Test af Position Disse ting kan I (som før) stjæle fra den generelle Test Fixture Sætningerne i de to to grønne bokse skal I selv tilføje Som før skal I lave en test metode for hver (ikke triviel) konstruktør/metode Hver testmetode tester flere forskellige ting (via forskellige assertions) 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, 3); 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 test metoder og set, hvordan de ser ud, er det langt hurtigere at skrive test metoderne public void constructor() { assertequals(pos.getfrom(), public void hasarrived() { assertfalse(pos.hasarrived()); pos.move(); assertfalse(pos.hasarrived());... pos.move(); asserttrue(pos.hasarrived()); 36

37 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 Testmetode for turnaround A. move + turnaround B. move + turnaround C. turnaround Efter hvert kald af turnaround tjekkes, at feltvariablerne i pos har de korrekte værdier Hvis man højreklikker testklassen og vælger Test All får public void move() { assertequals(pos.getdistance(), 3); asserttrue(pos.move()); assertequals(pos.getdistance(), public void turnaround() { pos.move(); A pos.turnaround(); assertequals(pos.getfrom(), cityb);... pos.move(); B pos.turnaround(); assertequals(pos.getfrom() == Cpos.turnAround(); assertequals(pos.getfrom() ==......; 37

38 Assertions Som I har set, kan assertions skrives på flere forskellige måder assertequals, asserttrue, eller assertfalse Det er lige meget hvilken af de tre assert metoder, man bruger assertequals bruger (som navnet antyder) equals metoden til at sammenligne de to værdier (af en Objekt type) Disse tre sætninger er ækvivalente assertequals(false, pos.hasarrived()); asserttrue(!pos.hasarrived()); assertfalse(pos.hasarrived()); Disse to sætninger er ækvivalente assertequals(citya, pos.getfrom()); asserttrue(citya.equals(pos.getfrom())); Bemærk at knappen Run Tests kun tester metoderne i de test klasser, der allerede er succesfuldt kompileret 38

39 Eksempler på testmetoder for Country arrive kaldes 3 gange Så er man nogenlunde sikker på at byens værdi er public void reset() { citya.arrive(null); citya.arrive(null); citya.arrive(null); citye.arrive(null); citye.arrive(null); citye.arrive(null); int valuee = citye.getvalue(); // Remember value of City E country1.reset(); assertequals(citya.getvalue(), 80); // City A is reset assertequals(citye.getvalue(), valuee); // City E is not public void bonus() { for(int seed = 0; seed < 1000; seed++) { // Try 1000 different seeds game.getrandom().setseed(seed); int sum = 0; Set<Integer> values = new HashSet<>(); for(int i = 0; i < 10000; i++) { int bonus = country1.bonus(80); sum += bonus; values.add(bonus); // Call method times asserttrue(... < 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 39

40 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(){ int bonus = country1.bonus(80); // Remember bonus game.getrandom().setseed(0); // Reset seed int arrive = citya.arrive(); // Same bonus assertequals(arrive,...); 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 Fxituren, der er dyr Husk at resette byen mellem de enkelte public void arrive(){ for(int i=0; i<1000; i++) { // Try different seeds game.getrandom().setseed(i); // Set seed int bonus = country1.bonus(80); // Remember bonus game.getrandom().setseed(i); // Reset seed int arrive = citya.arrive(); // Same bonus as before assertequals(arrive,...); assertequals(citya.getvalue(),...); citya.reset(); 40

41 Opsummering Nedarvning Subklasser Forskellen på en variabels statiske og dynamiske type Subtyper og Liskovs substitutionsprincip Typeskift (type cast) Metoder i subklasser Dynamic method lookup i forbindelse med nedarvning og overskrivning Object klassen Superklasse for alle klasser Indeholder en række nyttige metoder, bl.a. getclass, tostring, equals og hashcode Afleveringsopgave: Computerspil 2 Dokumentation og test af de klasser, som I har implementeret i den første delaflevering 41

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

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 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 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

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

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 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 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

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 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

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 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

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

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

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

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 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

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 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

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

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

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 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

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 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

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

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

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

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

Løsning af møntproblemet

Løsning af møntproblemet Løsning af møntproblemet Keld Helsgaun RUC, oktober 1999 Antag at tilstandene i problemet (stillingerne) er repræsenteret ved objekter af klassen State. Vi kan da finde en kortest mulig løsning af problemet

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

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

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

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

Eksempel: Skat i år 2000

Eksempel: Skat i år 2000 Kursus 02199: Programmering afsnit 2.1-2.7 Anne Haxthausen IMM, DTU 1. Værdier og typer (bl.a. char, boolean, int, double) (afsnit 2.4) 2. Variable og konstanter (afsnit 2.3) 3. Sætninger (bl.a. assignments)

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 10 Mandag

Forelæsning Uge 10 Mandag Forelæsning Uge 10 Mandag 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

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen. Indledning...2 Variabler...13 Eksempel: 1...13 Eksempel 2:...13 Eksempel 3:...15 Eksempel 4:...16 Metoder...17 Metode (intet ind og intet ud)...17 Metode (tekst ind)...18 Metode (tekst ind og tekst ud)...19

Læs mere

Fundamentale sprogbegreber

Fundamentale sprogbegreber Fundamentale sprogbegreber Sætninger og udtryk Niveauer af programbeskrivelse (statisk versus dynamisk syn) Oversigt Sætninger simple sætninger (assignment, metodekald) sammensatte sætninger (selektion,

Læs mere

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004 Overvågningssystem Beskrivelse Bagagesorteringssystemet består af et antal skranker (check-in) til modtagelse og registrering af bagage, et automatiseret sorteringsanlæg samt et antal terminaler (gates),

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

Rename og redefine. Abstrakte klasser. Dynamisk binding.

Rename og redefine. Abstrakte klasser. Dynamisk binding. 11 Nedarvning II. Enkeltnedarvning i Eiffel. Rename og redefine. Initialisering af superklasse-dele af et objekt. Interfaces til klienter og subklasser. Typesammenlignelighed og polymorfi. Abstrakte klasser.

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

Klasser. Grundlæggende Programmering med Projekt. Peter Sestoft Tirsdag 2. september 2008. (Tak til Jakob Bardram for nogle slides) Dagens begreber

Klasser. Grundlæggende Programmering med Projekt. Peter Sestoft Tirsdag 2. september 2008. (Tak til Jakob Bardram for nogle slides) Dagens begreber Klasser Grundlæggende Programmering med Projekt Peter Sestoft Tirsdag 2. september 2008 (Tak til Jakob Bardram for nogle slides) Dagens begreber Felt (field) Metode (method) Parameter (parameter) Sætning,

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

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

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2 DM502 Forelæsning 2 Repetition Kompilere og køre Java program javac HelloWorld.java java HeloWorld.java Debugge Java program javac -g HelloWorld.java jswat Det basale Java program public class HelloWorld

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

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

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

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11 DM503 Forelæsning 11 Generics Pakker Exceptions Indhold Generics Nedarvning og Generics Generics Nedarvning og Generics Husk Box fra sidst Generics public class Box {! private T object;! public void

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

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter Skriftlig eksamen i Datalogi Modul 1 Vinter 1998/99 Opgavesættet består af 5 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 16% Opgave 2 12% Opgave 3 10% Opgave

Læs mere

Databaseadgang fra Java

Databaseadgang fra Java Databaseadgang fra Java Grundlæggende Programmering med Projekt Peter Sestoft Fredag 2007-11-23 Relationsdatabasesystemer Der er mange databaseservere Microsoft Access del af Microsoft Office MySQL god,

Læs mere

Aritmetiske Forelæsning Pr ogrammering operatorer tir 1999 sda præcedens september 1999 Logiske Sammenligningsoperatorer operatorer præcedens

Aritmetiske Forelæsning Pr ogrammering operatorer tir 1999 sda præcedens september 1999 Logiske Sammenligningsoperatorer operatorer præcedens Programmering 1999 Forelæsning 3, tirsdag 7. september 1999 Aritmetiske og logiske operatorer, præcedens Den indbyggede klasse String: tegnstrenge Metoder i klasser Metoder: returtype eller void Metoder:

Læs mere

Objektorienteret design med arv og polymorfi:

Objektorienteret design med arv og polymorfi: Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Objektorienteret design med arv og polymorfi: Substitutionsprincippet Composite Design Pattern Finn Nordbjerg Side 1 Objektorienteret

Læs mere

Hashing og hashtabeller

Hashing og hashtabeller Datastrukturer & Algoritmer, Datalogi C Forelæsning 12/11-2002 Hashing og hashtabeller Teknik til at repræsentere mængder Konstant tid for finde og indsætte men ingen sortering af elementerne Specielt

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

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

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

Introduktion til ActionScript

Introduktion til ActionScript Introduktion til ActionScript Kaspar Rosengreen Nielsen kaspar@interactivespaces.net i n t e r a c t i v e s p a c e s. n e t Kaspar Nielsen, kaspar@interactivespaces.net 1 Dagens program Opsamling på

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

Introduktion til ActionScript, fortsat

Introduktion til ActionScript, fortsat Introduktion til ActionScript, fortsat Kaspar Rosengreen Nielsen kaspar@interactivespaces.net i n t e r a c t i v e s p a c e s. n e t Kaspar Nielsen, kaspar@interactivespaces.net 1 Dagens program Opsamling

Læs mere

Objektorienteret Programmering

Objektorienteret Programmering Objektorienteret Programmering Struktureret Systemudvikling Jan Bendtsen Automation and Control Indhold Lidt om programmeringssprog Klasser i Java Klasser i C++ Oversættelse og kørsel af kode Et eksempel:

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

Sekvenser af længde mellem 1 og 4 ord repræsenteres ved en klasse Segment, som uden grundlæggende ser således ud:

Sekvenser af længde mellem 1 og 4 ord repræsenteres ved en klasse Segment, som uden grundlæggende ser således ud: Besvarelse af opgave til formuleret til øvelserne 10. september 2002 Datastrukturer og algoritmer Henning Christiansen 22/9-2002 Følgende er ikke en eksakt besvarelse af opgaven, idet den benytter hashtabeller

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

Grundlæggende Programmering ITU, Efterår 1999. Skriftlig eksamen i Grundlæggende Programmering

Grundlæggende Programmering ITU, Efterår 1999. Skriftlig eksamen i Grundlæggende Programmering Skriftlig eksamen i Grundlæggende Programmering ITU, 20. januar 2000 Alle hjælpemidler tilladt, dog ikke datamat. Eksamen er skriftlig, fire timer, og bedømmes efter 13-skalaen. Opgavesættet består af

Læs mere

BRP Tal. Om computer-repræsentation og -manipulation. Logaritmer

BRP Tal. Om computer-repræsentation og -manipulation. Logaritmer BRP 13.9.2006 Tal. Om computer-repræsentation og -manipulation. Logaritmer 1. Opgaverne til i dag dækker det meste af stoffet 2. Resten af stoffet logaritmer binære træer 3. Øvelse ny programmeringsopgave

Læs mere

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

//Udskriver System.out.println(Hej  + ditfornavn +   + ditefternavn + .); System.out.println(Du er  + dinalder +  aar gammel! Denne guide er oprindeligt udgivet på Eksperten.dk Brugerinput i Java Denne her artikel gennemgår diverse ting ved brug af brugerinput i Java. Den starter med det simple og fortæller derefter skridt for

Læs mere

Design by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater

Design by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater Design by Contract Bertrand Meyer 1986 Design and Programming by Contract Michael R. Hansen & Anne Haxthausen mrh@imm.dtu.dk Informatics and Mathematical Modelling Technical University of Denmark Design

Læs mere

Rekursion og dynamisk programmering

Rekursion og dynamisk programmering Rekursion og dynamisk programmering Datastrukturer & Algoritmer, Dat C Forelæsning 12/10-2004 Henning Christiansen Rekursion: at en procedure kalder sig selv eller et antal metoder kalder hinanden gensidigt.

Læs mere

Hashing og hashtabeller

Hashing og hashtabeller Datastrukturer & Algoritmer, Datalogi C Forelæsning 16/11-2004 Hashing og hashtabeller Teknik til at repræsentere mængder Konstant tid for finde og indsætte men ingen sortering af elementerne Specielt

Læs mere

BOSK F2012, 1. del: Prædikatslogik

BOSK F2012, 1. del: Prædikatslogik ε > 0. δ > 0. x. x a < δ f (x) L < ε February 8, 2012 Prædikater Vi skal lære om prædikatslogik lad os starte med prædikater. Et prædikat er et orakel der svarer ja eller nej. Eller mere præcist: Prædikater

Læs mere

Forelæsning Uge 14 Mandag

Forelæsning Uge 14 Mandag Forelæsning Uge 14 Mandag Defensiv programmering Metoder og konstruktører bør tjekke de parameterværdier, som de kaldes med Derved kan man ofte undgå ulovlige handlinger, såsom at dividere med nul eller

Læs mere

Forelæsning Uge 14 Mandag

Forelæsning Uge 14 Mandag Forelæsning Uge 14 Mandag Defensiv programmering Metoder og konstruktører bør tjekke de parameterværdier, som de kaldes med Derved kan man ofte undgå ulovlige handlinger, såsom at dividere med nul eller

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

DM34-1. Obligatorisk opgave Dilemma spillet. Jacob Aae Mikkelsen 191076 kok04

DM34-1. Obligatorisk opgave Dilemma spillet. Jacob Aae Mikkelsen 191076 kok04 DM34-1. Obligatorisk opgave Dilemma spillet Jacob Aae Mikkelsen 191076 kok04 April 2005 Kapitel 1 Resumé Denne rapport dokumenterer udviklingsforløbet og afprøvningen af et spil Dilemma. Spillet går ud

Læs mere

Forelæsning Uge 6 torsdag repetition

Forelæsning Uge 6 torsdag repetition Forelæsning Uge 6 torsdag repetition Java style guide Niveauer af programbeskrivelser Arraylister (én-til-mange relation) For-løkker (almindelig og udvidet) Primitive typer (forfremmelse og begrænsning)

Læs mere

Anvendelse af metoder - Programmering

Anvendelse af metoder - Programmering Denne guide er oprindeligt udgivet på Eksperten.dk Anvendelse af metoder - Programmering En forhåbentlig rigtig god forklaring på hvad metoder er og hvordan de anvendes. Lidt om private og public, retur

Læs mere

Objektorienterede metoder

Objektorienterede metoder Objektorienterede metoder Denne gang: Designmønstre Skabende designmønstre: Fabrikeringsmetode/Fabrik, Singleton, Abstrakt fabrik (Toolkit), Prototype, Objektpulje Singleton eksempel: Forskellige slags

Læs mere

import java.awt.event.*; import java.awt.*; Container <- Panel <- Applet Component <- Button <- Checkbox <- ScrollPane <- Label

import java.awt.event.*; import java.awt.*; Container <- Panel <- Applet Component <- Button <- Checkbox <- ScrollPane <- Label Programmering 1999 Forelæsning 13, tirsdag 12. oktober 1999 Oversigt Grafiske brugergrænseflader. Komponenter: Knapper, tekstfelter, checkbokse... Vinduer (containere). Hændelser, hændelsesstyret programmering.

Læs mere

Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16, 19-22.

Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16, 19-22. Klasser og Objekter i Python Uge 46 Learning Python: kap 15-16, 19-22. Klasser og objekter En klasse beskriver en klump af samhørende funktioner og variable En klasse er en beskrivelse. En kage form Klassens

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

Exceptions i Delphi. Try except

Exceptions i Delphi. Try except Exceptions i Delphi Exceptions er en teknik til at fange fejl under programafviklingen. Ikke programmeringsfejl, men fejl der opstår i forskellige situationer, f.eks. en fil der mangler en fil der er skrivebeskyttet,

Læs mere

Sekvensafstand DM34 - Eksamensopgave. Jacob Aae Mikkelsen

Sekvensafstand DM34 - Eksamensopgave. Jacob Aae Mikkelsen Sekvensafstand DM34 - Eksamensopgave Jacob Aae Mikkelsen 19 10 76 kokken@grydeske.dk 27. maj 2005 Resumé Rapporten her beskriver tre forskellige rekursive metoder til at sammenligne tekst strenge med.

Læs mere

JSP, Tomcat. Tutorial lavet af Jákup W. Hansen TSU semester 10.october 2007

JSP, Tomcat. Tutorial lavet af Jákup W. Hansen TSU semester 10.october 2007 JSP, Tomcat Tutorial lavet af Jákup W. Hansen TSU 2006 3.semester 10.october 2007 Hvad er JSP(Java Server Pages): Det er en teknik som er bygget ovenover Servlets teknikken, men fidusen er at det skal

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

29 Opsamling af Objekt-orienteret Programmering.

29 Opsamling af Objekt-orienteret Programmering. 29 Opsamling af Objekt-orienteret Programmering. Bottom-up kontra top-down design. "The shopping list approach". Hvordan finder man på objekterne. Klasser og dataabstraktion. Klasse interface og interface-teknikker.

Læs mere

Undtagelseshåndtering i C#

Undtagelseshåndtering i C# Denne guide er oprindeligt udgivet på Eksperten.dk Undtagelseshåndtering i C# I modsætning til C++ kan man i C# ikke skrive et program uden undtagelseshåndtering, så derfor har jeg skrevet denne guide

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

Python programmering. Per Tøfting. MacFest

Python programmering. Per Tøfting. MacFest Python programmering MacFest 2005 Per Tøfting http://pertoefting.dk/macfest/ Indhold Måder at afvikle Python program på Variabler Data typer Tal Sekvenser Strenge Tupler Lister Dictionaries Kontrolstrukturer

Læs mere

Python 3 kursus lektion 1:

Python 3 kursus lektion 1: Python 3 kursus lektion 1: Her laves et nyt program Her køre programmet! Her skrives koden: Gem (CTRL-s) Tryk F5 (for at køre) www.madsmatik.dk d.14-01-2016 1/5 At skrive til skærmen: Hello World Man kan

Læs mere

Lær Python - Dag 4, modul 2 Objektorienteret programmering

Lær Python - Dag 4, modul 2 Objektorienteret programmering Lær Python - Dag 4, modul 2 Objektorienteret programmering Simon J. Larsen 28. oktober 2017 Institut for Matematik og Datalogi Metoder Metoder Indtil videre har vi kun brugt objekter til at gemme værdier.

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

Klienten. import java.util.*;

Klienten. import java.util.*; Klienten import java.util.*; * Aktiviteter er et model element, som indeholder blandt andet psimetiks beskrivleser. * @author rling public class Aktivitet extends Beholder implements HarEOgA, HarTilknytning,

Læs mere

Løsning af skyline-problemet

Løsning af skyline-problemet Løsning af skyline-problemet Keld Helsgaun RUC, oktober 1999 Efter at have overvejet problemet en stund er min første indskydelse, at jeg kan opnå en løsning ved at tilføje en bygning til den aktuelle

Læs mere