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

Størrelse: px
Starte visningen fra side:

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

Transkript

1 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 række nyttige metoder, bl.a. getclass, tostring, equals og hashcode Protected access Alternativ til public og private Projektopgave om computerspil I kursets sidste fem uger skal I, sammen med en makker, programmere et computerspil

2 Træning i mundtlig præsentation 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 Evnen til at lave gode mundtlige præsentationer kan forbedres kraftigt ved intensiv træning Vi bruger derfor den anden af de to ugentlige øvelsesgange på dette Det er obligatorisk at lave mindst 2 præsentationer som skal godkendes af instruktoren Tag træningen alvorligt Det er den eneste gang under jeres studier, hvor I får omfattende konstruktiv feedback på, hvordan I kan forbedre jeres mundtlige præsentationer og dermed jeres karakterer ved mundtlig eksamen Træning gør mester de timer I bruger på det, er virkelig godt givet ud Se videoerne om den "perfekte" eksamenspræstation og hør jeres medstuderendes præsentationer det lærer I også meget af 2

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

4 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) Vi kunne nøjes med en Post klasse Med en feltvariabel, der angiver om det er en message post eller en photo post Men det bliver heller ikke særligt pænt Det er selvfølgelig endnu værre, hvis vi i stedet for to slags postings har mange forskellige slags 4

5 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, som kaldes en superklasse Alt det der er fælles for subklasserne placeres i superklassen Superklasse Fælles feltvariabler og metoder Bemærk formen på pilehovederne Subklasser Nemmere at overskue Ingen kodedublering Forskellige feltvariabler og metoder 5

6 NewsFeed klassen Vi undgår også kodedublering i NewsFeed klassen Nu har vi kun én arrayliste med elementtypen Post Alle de steder, hvor man skal bruge et Post objekt, kan man i stedet bruge et objekt fra en subklasse Dvs. at elementerne i arraylisten kan være af typen Post, MessagePost eller PhotoPost postings Post Vi slipper for at skulle erklære og gennemløbe to forskellige arraylister MessagePost PhotoPost MessagePost 6

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

8 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) Det virker kun, hvis der er en konstruktør uden parametre, og det er ikke god stil 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, f.eks. getauthor() Subklasse public MessagePost(String author, String text) { super(author); message = text; // Methods omitted 8

9 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 udtryk b, der evaluerer til et objekt af en subtype B Assignments Parameterværdier Returværdier Elementer i objektsamlinger Ovenstående er kendt som Liskovs substitutionsprincip Vi har tidligere sagt at typerne skal matche (for assignments, parametre, returværdier og objektsamlinger) a = b; public void pip(a param) {...; public A pop() {... return b;... ArrayList<A> list; list.add(b); pip(b); Mere præcist betyder det, at typen af udtrykket b skal være en subtype af den forventede type A (eller A selv) 9

10 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 (eller Post) 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 10

11 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 Javas variabler er polymorfe ( kan antage forskellige former) De kan pege på objekter af forskellig type Når post peger på et MessagePost objekt er den dynamiske type MessagePost Når post peger på et PhotoPost objekt er den dynamiske type PhotoPost Når post peger på et Post objekt er den dynamiske type Post Opsummering Den statiske type bestemmes af variablens erklæring Den dynamiske type bestemmes af det objekt, som variablen pt peger på Den dynamiske type er altid en subtype af den statiske type (eller identisk med denne) 11

12 Typecheck Liskovs substitutions princip betyder at nedenstående tre assignments alle er lovlige Vehicle v1 = new Vehicle(); Vehicle v2 = new Car(); Vehicle v3 = new Bicycle(); oversætterens typecheck anvender de statiske typer De dynamiske typer kendes jo først under programudførelsen I nedenstående erklæringer har v den statiske type Vehicle, mens c har den statiske type Car Vehicle v = new Car(); Car c = new Car(); Det er derfor lovligt at assigne c til v, men ikke omvendt v = c; c = v; OK Compile-time fejl v's statiske type, Vehicle, er ikke en subtype af c's statiske type, Car Det er lige meget at v's dynamiske type er Car 12

13 Typeskift (type cast) Vehicle v = new Car(); Car c = new Car(); Ved at bruge et type cast kan vi ændre den statiske type af et udtryk c = (Car) v; Højresiden af assignment har nu den statiske type Car, og oversætteren godkende derfor assignmentet Under udførslen af programmet tjekkes det, at den dynamiske type af v er Car (eller en subtype af Car) Ellers får man en run-time fejl (ClassCastException) Objektet, som v peger på, ændres ikke ved et type cast Det eneste, der ændres, er oversætterens opfattelse af udtrykkets type 13

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

15 Klassediagram for brug af Comparable 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)... Nedarvning mellem interfaces 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 Nedarvning mellem klasser HashSet LinkedList Adult Child 15

16 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 på terminalen 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 16

17 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 klassen Post klassens display metode kender ikke de feltvariabler, der ligger i subklasserne, og kan derfor ikke udskrive information om disse 17

18 Første løsningsforslag (virker ikke) Vi kan flytte display metoden til de to subklasser Metoderne har kun adgang til superklassens feltvariabler via acces metoder Det giver massiv kodedublering Vi får en compile-time fejl i NewsFeed klassen public void show() { for( Post post : posts) { post.display(); System.out.println(); Newsfeed xxx Oversætteren bruger de statiske typer Den statiske type af post er Post og oversætteren 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 18

19 Korrekt løsning Vi har både en display metode i superklassen og i de to subklasser display metoderne i subklasserne kalder display metoden i superklassen Via den er der adgang til superklassens feltvariabler uden brug af acces metoder (og uden kodedublikering) public void display() { super.display(); System.out.println(message); MessagePost public void display() { super.display(); System.out.println(filename); System.out.println(caption); PhotoPost Kald af superklassens display metode Kaldet af superklassens display metode behøver ikke at være i første linje og det kan helt mangle (eller der kan være flere kald) 19

20 Statiske og dynamiske typer Oversætteren bruger den statiske type, dvs. typen fra variablens erklæring Variablen 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 Oversætter Programudførelse Under programudførelsen bruges den dynamiske type, dvs. typen af variablens aktuelle værdi Når den dynamiske type er en MessagePost, kaldes display metoden fra MessagePost Når den dynamiske type er en PhotoPost, kaldes display metoden fra PhotoPost Når den dynamiske type er en Post, kaldes display metoden fra Post Dette princip kaldes dynamisk method lookup 20

21 Overskrivning De to subklasser overskriver superklassens display metode med deres egne udgaver af metoden På engelsk: override tilsidesætte / underkende De nye metoder skal have matchende signatur, returtype og access modifier som den de overskriver Når man overskriver en metode, bør man angive dette via tag Gør det lettere at forstå koden Oversætteren protesterer, hvis signatur, returtype eller access modifier ikke public void display() { super.display(); System.out.println(message); MessagePost De to røde display metoder overskriver den blå 21

22 Metodekald (simpelt eksempel, én klasse) Hvilken metode udføres ved nedenstående metodekald? p.display(); PhotoPost p; Dynamisk type Det er denne metode, der udføres Find variablen dynamiske type display metoden søges i PhotoPost og findes der 22

23 Metodekald (nedarvning) Hvilken metode udføres ved nedenstående metodekald? p.display(); Det er denne metode, der udføres PhotoPost p; Dynamisk type Find variablens dynamiske type display metoden søges i PhotoPost (uden held) display metoden søges i superklasserne (efter tur) og findes i Post 23

24 Metodekald (nedarvning og overskrivning) Hvilken metode udføres ved nedenstående metodekald? p.display(); Bemærk at den statiske type nu er Post Post p; display Dynamisk type Det er denne metode, der udføres Find variablens dynamiske type display metoden søges i PhotoPost og findes der 24

25 Dynamic method lookup Under udførslen findes den rigtige metode 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 Kan være overskrevet i en subtype heraf 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 25

26 Polymorfi Betyder at noget kan antage forskellige former Vi har tidligere set, at Javas variabler er polymorfe De kan pege på objekter af forskellig type Vi har nu set, at også Javas metodekald 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 eller Post 26

27 Object klassen Alle klasser i Java er subklasser af Object klassen Object klassen indeholder en række nyttige metoder, som de øvrige klasser nedarver (og eventuelt overskriver) getclass metoden returnerer objektets dynamiske type tostring metoden returnerer en tekstrepræsentation af objektet equals metoden tjekker om to objekter "ligner hinanden" hashcode metoden beregner en hashkode 27

28 getclass metoden I et kørende program har hver type (også de primitive) ét (og kun et) tilhørende objekt fra Class klassen Class er en parametriseret type og objektet for klassen A tilhører Class<A> getclass metoden returnerer objektets dynamiske type Mere præcist det Class object, som svarer til den dynamiske type Nedenstående boolske udtryk tjekker om de to variabler har samme dynamiske type x.getclass() == y.getclass() Nedenstående boolske udtryk tjekker om variablens dynamisk type er Person x.getclass()== Person.class Giver os det Class objekt, der svarer til Person I begge tilfælde skal de dynamiske typer være identiske Det er ikke nok, at den ene er en subklasse af den anden 28

29 Det reserverede or instanceof Man kan også undersøge en variabels dynamiske type ved hjælp af det reserverede ord instanceof Nedenstående boolske udtryk tjekker om variablen dynamiske type er Car eller en subklasse af Car (her kræves ikke at typerne er identiske) v instanceof Car Bruges ofte i forbindelse med type cast Når vi har tjekket, at variablens dynamiske type er Car (eller en subklasse af Car) kan vi uden fare for run-time exceptions lave et type cast til Car if( v instanceof Car){ c = (Car) v; 29

30 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 ved konkatenering skal konverteres til en tekststreng I Object klassen er tostring metoden defineret til at returnere Person@19bb25a, 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 Mange klasser overskriver derfor tostring metoden Ex: I String klassen returnerer tostring metoden værdien af den tekststreng som String objektet repræsenterer Jeres egne klasser kan også overskrive tostring metoden For Person klassen kan man f.eks. returnere tekststrengen Cecilie:18, hvor Cecilie er personens navn og 18 er personens alder I køreprøveopgaverne overskrev i tostring metoden (for den simple af klasserne) 30

31 equals metoden Metoden bruges bl.a. i forbindelse med mængder (Set) For en mængde vil et kald add(elem) kun tilføje elem, hvis der ikke er et element e i mængden, der ligner (elem.equals(e)) 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 Mange klasser overskriver derfor equals metoden Ex: I String klassen tjekker equals metoden om de to tekststrenge er mage til hinanden, dvs. indeholder de samme tegn (i samme rækkefølge) Jeres egne klasser kan også overskrive 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 Ingen objekter er mage til null: x!= null! x.equals(null) for alle x 31

32 Overskrivning af equals metoden For Person klassen kan man overskrive equals som følger Optimalisering null? Dynamiske type Type cast Sammenlign (udvalgte) feltvariabler public boolean equals(object otherobject) { Bemærk at if( this = = otherobject ) {return true; parameteren har typen Object if( otherobject = = null ){return false; if( getclass()!= otherobject.getclass() ) {return false; Person other = (Person) otherobject; return name.equals(other.name) && age == other.age; equals metoden i String For primitive typer er det ok at bruge == I subklassen Child kan man overskrive equals som følger Kald af equals metoden i superklassen Tjekker den dynamiske type og superklassens feltvariabler public boolean equals(otherobject) { if(! super.equals(otherobject) ) {return false; return nooftoys = = otherobject.nooftoys; Tjek af subklassens egne feltvariabler (eller nogle af dem) BlueJ bogen overskriver equals på en lidt anden måde og kommer ikke ind på overskrivning i subklasser 32

33 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 metoden er konsistent med equals metoden 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 (hashcode(x) == hashcode(y)) I Object klassen er hashcode metoden defineret som objektets memory adresse (i det hexadecimale talsystem) Dermed er det nemt at se, at hashcode er konsistent med equals Hvis jeres egne klasser overskriver equals metoden, vil det normalt også være nødvendigt at overskrive hashcode metoden Hvis I tillader to forskellige objekter at være mage til hinanden, skal de ifølge konsistenskravet også have samme hashkode 33

34 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 Et første forsøg kunne være nedenstående, hvor 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 + s.charat(i); return hc; Det fungerer ikke ret godt Hvis vi ombytter tegnene i tekststrengen får vi samme hashkode Det giver rigtigt mange kollisioner (tekststrenge med samme hashkode) hashcode("eat") = 'e' + 'a' + 't' = = 314 hashcode("tea") = 't' + 'e' + 'a' = =

35 Hashkoder for tekststrenge version 2 Ved at gange et primtal på før summeringen, får vi langt færre kollisioner (tekststrenge med samme hashkode) public int hashcode() { int hc = 0; for( int i = 0; i < s.length(); i++) { hc = 31 * hc + s.charat(i); return hc; hashcode("eat") = 31 2 * 'e' + 31 * 'a' + 't' = hashcode("tea") = 31 2 * 't' + 31 * 'e' + 'a' =

36 Overskrivning af hashcode metoden For Person klassen kan man overskrive hashcode som følger public int hashcode() { return 11 * name.hashcode() + 13 * new Integer(age).hashCode(); Hashkoderne for feltvariablerne multipliceres med forskellige primtal Primitive værdier konverteres først til deres wrapper type Vi bruger kun feltvariabler, som sammenlignes i equals metoden På den måde sikrer vi, at konsistenskravet er opfyldt I subklassen Child kan man definere hashcode som følger public int hashcode() { return super.hashcode() + 17 * new Integer(noOfToys).hashCode(); Kald af equals metoden i superklassen Hashkode baseret på superklassens feltvariabler Hashkode baseret på egne feltvariabler 36

37 Protected access Vi har tidligere set, at feltvariabler og metoder kan være private eller public De kan også være protected public Det betyder, at de kan tilgås fra klassen selv og alle dens subklasser protected feltvariabler Samme ulemper som public Bør aldrig bruges private protected metoder Kan i nogle situationer give god mening protected I Java kan feltvariabler og metoder, der er protected, også tilgås fra klasser i samme programpakke (package) Det gør det mere tvivlsomt at benytte protected Man kan også helt udelade access modifier'en, hvilket betyder, at feltvariabler/metoder kan tilgås fra klasser i samme programpakke 37

38 Projektopgave om computerspil I kursets sidste fem uger skal I, sammen med en makker, programmere et computerspil Den første af ugens øvelsesgange bruges på projektopgaven Hver uge tilføjer I ting, som I har lært om i de foregående uger Et antal spillere rejser rundt mellem byer i forskellige lande og indsamler point En af spillerne (GUI player) styres af brugeren vedhjælp af musen De øvrige tre spillere styres af spillet (dvs. computeren) 38

39 Pointgivning Hver delaflevering giver op til 3 point, som (sammen med pointene fra køreprøven) indgår ved fastlæggelsen af den endelige karakter for kurset 3 = fremragende (få og uvæsentlige mangler) 2 = fortrinlig (nogle mindre mangler) 1 = acceptabel (adskillige mangler) 0 = genaflevering Der kan gives halve point 1 er godkendt De påpegede fejl rettes i næste delaflevering 0 betyder genaflevering, hvor man højst kan få 1 Fradrag Hvis man afleverer for sent (uden gyldig grund) trækkes 1 point pr påbegyndt døgn Hvis man ikke retter fejl fra de foregående delafleveringer, trækker de ned en gang til Genaflevering skal ske senest 1 uge efter den oprindelige afleveringsfrist Opgaverne rettes først, når afleveringsfristen er udløbet Hvis I (inden afleveringsfristens udløb) afleverer en forbedret udgave, er det den der rettes Hvis man har afleveret (en eller flere gange) inden fristen, må man ikke aflevere efter fristen (det betragtes som forsøg på snyd og kan give fradrag) 39

40 Computerspil 1 (første delaflevering) I første delaflevering skal I bl.a. modellere byerne og vejene imellem dem, samt landene hvori byerne ligger i Når I er færdige, vil I kunne spille Der er forholdsvis meget at lave, men langt de fleste af tingene er lette at implementere En af instruktorerne lavede en løsning på under en time Når I laver jeres klasser, skal I samtidig dokumentere dem, således at dokumentationen er helt i top følger retningslinjerne fra BlueJ bogen (specielt afsnit 6.11, afsnit 9.7 og Appendix I) 40

41 Dokumentation af Road klassen Kommentar for klassen Kommentar for feltvariablerne Kommentar for konstruktøren Kommentar for metoden /** * Represents a road (between two 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 ends. length Length of this Road object. */ public Road(City from, City to, int length){ this.from = from; this.to = to; this.length = length; Husk også at indsætte kommentarer passende steder i kompleks kode For testklasser og testmetoder behøver I ikke at lave klasseog metodekommentarer /** * Returns a reference to the City where this Road starts. from city. */ public City getfrom(){ return from;... 41

42 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. Teksten i de røde kasser kopieres fra jeres kommentarer 42

43 Brug af Test Fixture Når man skal afteste metoderne i Country og City klasserne, har man behov for at kunne skabe Country objekter Dette er lidt bøvlet, idet klassens konstruktør har en parameter af typen Map<City, List<Road>> En første løsning er at bruge null som parameterværdi En mere sofistikeret løsning er at bruge en Test Fixture (fast opsætning) som realiserer nedenstående netværk Test Fixturen kan kopieres til "Object benchen", som så får nedenstående udseende Opgaveformuleringen forklarer, hvordan Test Fixtur'en hentes og anvendes 2 Country objekter 7 City objekter 1 Game objekt

44 Test af computerspilsprojektet I forhold til jeres tidligere afleveringsopgaver er computerspillet et stort og komplekst Java program Inden I afleverer, skal I derfor huske at teste jeres kode via vores TestServer For Computerspil 1 består testen bl.a. i, at der afvikles et spil med høj hastighed og forudbestemte tilfældige valg (dvs. fast seed værdi) Undervejs kontrolleres, at alle byer og alle spillere har de rigtige værdier Hvis testserveren finder fejl, skal l gennemgå jeres kode og rette dem TestServeren erstatter ikke jeres egen aftestning Mens I programmerer, skal I løbende teste de programstumper, som I skriver Ellers får I aldrig jeres program til at virke 44

45 TestServeren Hvis jeres program fejler, kan det være vanskeligt at lokalisere fejlen Derfor afprøver TestServeren hver enkelt af de klasser, som I selv har skrevet, sammen med vores løsning således at I kan se hvilke klasser, der er fejl i Herudover udføres der en række regression tests for konstruktørerne og metoderne i jeres klasser hvilket også kan afsløre fejl Brug TestServeren med omtanke Når I får en fejlrapport, bør I rette alle de fejl, der rapporteres og teste, at rettelserne er korrekte, før I atter forsøger at køre TestServeren Hvis I blot retter en enkelt fejl ad gangen (uden selv at teste om rettelsen fungerer) kommer I let til at bruge alt for megen tid på at vente på, at TestServeren genererer rapporter til jer (specielt hvis der er kø) 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). 45

46 Computerspil 2-5 I de næste fire delafleveringer skal I Lave regression tests for alle konstruktører og metoder (Computerspil 2) Bruge nedarvning (subklasser) og dynamisk method lookup (med overskrivning af metoder) til at strukturere jeres kode, således at der er flere forskellige slags lande og flere forskellige slags byer (Computerspil 3) Udvide den grafiske brugergrænseflade med nogle ekstra knapper, labels og tekstfelter samt en menubar (Computerspil 4) Optage spil ved hjælp af en Log klasse, hvis objekter kan gemmes i filsystemet, for sidenhen at blive genindlæst og afspillet (Computerspil 5) 46

47 Klassediagram Det færdig projekt indeholder 25 klasser, hvoraf I skal skrive 15 Derudover skal I modificere GUI klassen 47

48 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 Protected access Alternativ til public og private Projektopgave om computerspil Test fixture Debugningsværktøj 48

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Java Klasse nedarvninger

Java Klasse nedarvninger Denne guide er oprindeligt udgivet på Eksperten.dk Java Klasse nedarvninger Et let lille overblik i hvordan klasse nedarvning virker i java Skrevet den 07. dec 2011 af mochners I kategorien Programmering

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Forelæsning Uge 10. Opremsningstyper. Forskellige teknikker til test og debugging. Afleveringsopgave: Debugging + Test.

Forelæsning Uge 10. Opremsningstyper. Forskellige teknikker til test og debugging. Afleveringsopgave: Debugging + Test. Forelæsning Uge 10 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), forsøger

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

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

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

Programmering 1999 KVL Side 5-4. Klassen Time: metoder. Metoder i objektet giver mulighed for at ændre tilstanden, eller kigge på tilstanden.

Programmering 1999 KVL Side 5-4. Klassen Time: metoder. Metoder i objektet giver mulighed for at ændre tilstanden, eller kigge på tilstanden. Programmering 1999 Forelæsning 5, tirsdag 14. september 1999 Oversigt Mere om klasser og objekter Klassefelter: static Konstante felter: final Indkapsling og synlighed: private og public Overlæsning af

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

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

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

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

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

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

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

Programmering for begyndere Lektion 2. Opsamling mm

Programmering for begyndere Lektion 2. Opsamling mm Lektion 2 Opsamling mm God tone Der er indlagt spørge sessioner Lektion 2 - Agenda Programmering for Lidt ændringer til teknikken, herunder hvordan du genser en lektion Lidt generelle tilbagemeldinger

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

Kursusgang 11. Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing

Kursusgang 11. Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing Kursusgang 11 Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing Design af brugerflader 11.1 Samme sted Forskellige steder Sidste kursusgang Samtidigt

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

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