Obs! Inget ur Javas standardbibliotek får användas i ett svar (om det inte står att man får det).

Relevanta dokument
Obs! Inget ur Javas standardbibliotek får användas i ett svar (om det inte står att man får det).

Kurskod D0010E Datum Skrivtid 5tim

Objektorienterad programmering D2

LULEÅ TEKNISKA UNIVERSITET

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Tentamen i Grundläggande Programvaruutveckling, TDA548

Länkade strukturer, parametriserade typer och undantag

TENTAMEN OOP

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Agenda. Objektorienterad programmering Föreläsning 13

Laboration A Objektsamlingar

Tentamen i Objektorienterad programmering

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl

(n 1)(n) 2 för n 1, dvs att tidskomplexiteten är kvadratisk i värsta fall (n 1) =

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

2. Palindrom. Exempel: 1,2,3,2,1 är ett palindrom, och även 0, men inte 1,2,3,1,2,3.

Tentamen i EDAF25. 1 juni Skrivtid: Skriv inte med färgpenna enda tillåtna färg är svart/blyerts.

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

TENTAMEN OOP

ID1004 Laboration 4, November 2012

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Malmö högskola 2007/2008 Teknik och samhälle

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Tentamen, EDAA10 Programmering i Java

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Tentamen, Algoritmer och datastrukturer

Föreläsning 10. ADT:er och datastrukturer

Tentamen OOP

Arrayer (fält)

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

Föreläsning 2. Länkad lista och iterator

Programmering för språkteknologer II, HT2014. Rum

Föreläsning 4 Innehåll

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

OOP Objekt-orienterad programmering

Tentamen ID1004 Objektorienterad programmering April 7, 2015

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Tentamen ID1004 Objektorienterad programmering May 29, 2012

public static void mystery(int n) { if (n > 0){ mystery(n-1); System.out.print(n * 4); mystery(n-1); } }

Tentamen i TDP004 Objektorienterad Programmering Lösningsförslag

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

trafiksimulering Intro OU5 trafiksimulering

Static vs Dynamic binding Override vs Overload. Objekt-orienterad programmering och design Alex Gerdes och Sólrún Halla Einarsdóttir, 2018

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

TENTAMEN OOP

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Tentamen i EDAF oktober Skrivtid: Skriv bara på ena sidan av pappret tentorna kommer att scannas in, och endast framsidorna rättas.

Föreläsning 8: Exempel och problemlösning

Del A (obligatorisk för alla)

Tentamen TEN1 HI

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Tentamen i Algoritmer & Datastrukturer i Java

Listor. Koffman & Wolfgang kapitel 2, avsnitt , och 2.9

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Tentamen i Introduktion till programmering

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Tentamen i Programmering

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Läsanvisningar och uppgifter

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Objektsamlingar i Java

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

Laboration 1: Figurer i hierarki

Föreläsning 6: Introduktion av listor

Programmering för språkteknologer II, HT2011. Rum

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2

Malmö högskola 2008/2009 CTS

Tentamen Datastrukturer (DAT037)

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Objektorienterad programmering i Java I

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren att du har förstått dessa även om detaljer kan vara felaktiga.

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

Lösningsförslag till exempeltenta 2

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

OOP Tenta

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Malmö högskola 2007/2008 Teknik och samhälle

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Föreläsning 7. Träd och binära sökträd

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Konstruktion av klasser med klasser

Transkript:

LULEÅ TEKNISKA UNIVERSITET Tentamen i Objektorienterad programmering och design Totala antalet uppgifter: 6 Lärare: Håkan Jonsson, Tomas Johansson, 491000 Resultatet anslås senast 08-04-10 i A-huset. Tillåtna hjälpmedel: Inga Kurskod D0010E Datum 08-03-31 Skrivtid 5 tim Obs! Inget ur Javas standardbibliotek får användas i ett svar (om det inte står att man får det). 1. Teori och begrepp a) Vad menas med dynamic dispatch? b) Rita upp ett litet UML-diagram som tydligt visar att du vet vad ett Template Design Pattern är. Skriv små förklarande meningar ute i marginalerna och dra pilar in i diagrammet om du behöver förtydliga. c) Ge en väsentlig anledning till att undantag (exceptions) bör finnas i programmeringsspråk. d) Vad menas med Design by Contract? (2p) 2. Programmering a) Klassen D ärver C som ärver B som implementerar gränssnittet A. Klasserna och gränssnittet ligger i samma paket. C innehåller, till skillnad från de övriga, en variabel v som är deklarerad protected. I vilken/vilka av A-D kan nu v användas? b) Skriv en rekursiv metod double power(double x, int k) som beräknar och returnerar x k. Du får anta att k är positivt. c) Vilka fyra synligheter finns det i Java? d) Vad är skillnaden mellan en metod som är statisk och en som inte är det? e) Skriv en iterativ metod int digitsum(int d) som beräknar summan av siffrorna i ett heltal som du får anta är positivt ( 0). Ledning: Använd operatorerna / och % som beräknar heltalsdivision respektive ger resten vid heltalsdivision. 3. Programmering enligt 4-4-2-modellen (5p) Din uppgift är att skriva en klass som representerar ett fotbollslag. Ett fotbollslag består av n antal spelare på positionerna 1 n, där varje spelare kan få gula och röda kort. Att få ett gult kort är samma sak som att bli varnad, och att få ett rött kort är samma sak som att bli utvisad. Att bli varnad två gånger betyder att man blir utvisad. Följande 7 publika metoder och konstruktorer ska ingå i klassen FootballTeam: (a) FootballTeam(int nrofplayers): skapar ett lag med nrofplayers antal spelare. Från början har ingen spelare fått gult eller rött kort. (b) void giveyellowcard(int player): ger spelare på position player ett gult kort. Om spelaren har ett gult kort sedan tidigare blir spelaren utvisad.

(c) void giveredcard(int player): ger spelare på position player ett rött kort. Spelaren blir därmed utvisad. Om man försöker ge en redan utvisad spelare ett kort ska undantaget SuspendedPlayerException kastas. Du får anta att klassen som representerar undantaget redan är skriven. (d) void replace(int pos): Sätter in en ny spelare på positionen pos. Om spelaren som redan finns på den aktuella positionen är utvisad ska istället undantaget SuspendedPlayerException kastas. En ny spelare har förstås inga varningar, även om den tidigare spelaren på positionen hade det. Du får anta att man aldrig skickar in en position som inte finns i laget som argument. (e) int playersleft(): Returnerar hur många spelare som finns på plan, dvs hur många som inte är utvisade. (f) String tostring(): Returnerar en strängrepresentation av laget, där varje spelare representeras med ett tecken, och spelartecknen separeras med ett mellanslag. Spelarna skrivs ut i positionsordning. En spelare som inte blivit varnad representeras med ett X, en spelare som fått ett gult kort representeras med V, och en utvisad spelare representeras med ett U. Anta till exempel att ett lag har sju spelare, där spelaren på position 1 blivit varnad, och spelaren på position 6 blivit utvisad. tostring() skulle då returnera följande sträng: "V X X X X U X" (g) static int numberofteams(): Returnerar det totala antal fotbollslag som skapats. 4. Underligt Mobila Lösningar (5p) <<abstract>> ElectricalVehicle +ElectricalVehicle(maxCharge:double) +charge(energyamount:double): void +drive(dist:double): boolean Segway +Segway(maxCharge:double) +drive(dist:double): boolean ElectricalSubmarine +ElectricalSubmarine(maxCharge:double) +drive(dist:double,depth:double): boolean AcmeSegway +AcmeSegway(maxCharge:double) +setconnected(b:boolean): void Figure 1: UML-diagram för Uppgift 4. Acme Programming, Inc. ska ge sig in i fordonsbranschen. Eftersom miljötänkande är populärt just nu har Acme plötsligt kommit på att de alltid värnat om miljön, och siktar in sig på eldrivna fordon. Men först måste man förstås analysera marknaden genom simulering, och det är där du kommer in. Din uppgift är att skriva följande klasser baserat på UML-diagrammet i figur 1: ElectricalVehicle som är abstrakt och representerar ett elfordon. Ett elfordons batteri har en laddning, och när ett elfordon skapas är det fulladdat. Den maximala laddningen anges i ett argument till konstrueraren.

Metoden void charge(double energyamount) laddar upp batteriet med den givna laddningen. Batteriet kan inte laddas upp mer än till maximal laddning. Den abstrakta metoden boolean drive(double dist) anropas när ett fordon ska köras en viss sträcka, och resulterar i att laddningen minskar. Om laddningen tar slut ska metoden returnera false, annars true. Ett fordons laddning kan aldrig bli mindre än noll. Segway som ärver ElectricalVehicle, representerar ett tvåhjuligt transportfordon som blivit populärt eftersom kulturpersonligheter som Weird Al Yankovic setts använda den. Klassen ska implementera metoden drive så att den nya laddningen l minskar beroende på sträckan s som körs enligt följande formel: l = l s. AcmeSegway som ärver klassen Segway. Den revolutionerande idén är att fordonet förutom batteriet har ett vanligt eluttag (jättelånga sladdar säljs separat). Metoden void setconnected(boolean b) används för att ange om sladden är ikopplad eller inte: om argumentet är true är sladden ikopplad, annars inte. När en AcmeSegway skapas är sladden inte ikopplad. Metoden drive ska fungera precis som i superklassen, med ett tillägg: om sladden är ikopplad används inte batteriet, och laddningen förändras inte. ElectricalSubmarine som ärver ElectricalVehicle. I den här klassen fungerar metoden drive(double dist, double depth) så att den tar två argument: sträckan och djupet. Laddningen l minskar enligt formeln l = l (3s+sd), där s är sträckan och d djupet, eftersom det är jobbigare att ta sig fram ju djupare ubåten går 1. (drive-metoden som tar ett argument ska inte kunna användas i den här klassen.) 5. Gamegrids I laboration 4 förekom ett kvadratiskt spelbräde representerat som ett objekt av typen GameGrid. I denna klass var spelplanen en 2-dimensionell heltalsarray private int[][] board vars element endast kunde innehålla någon av heltalskonstanterna EMPTY, ME eller OTHER. Normalt sett ritar man en bild av brädet och markerar var spelare gjort sina drag samt var det är ledigt. Om vi använder och för drag (låt stå för ME) och en punkt för en ledig ruta skulle t ex kunna vara en bild av ett bräde med 4 rader och kolumner (det är som ska dra). Istället för en bild kan vi ge en strängrepresentation. Vi använder då bindestreck och utropstecken för att avgränsa rutorna och tecknen X, O och mellanslag för vad som finns i rutorna. För vårt brädexempel ovan blir då strängen "---------\n!!x!!o!\n!!x!o!!\n!o!!x!!\n!!o!!!\n---------" vilken skulle ge 1 Hade kapten Nemo bara hållit sig närmare ytan hade han säkert hunnit med två världsomseglingar under havet! (5p)

---------!!X!!O!!!X!O!!!O!!X!!!!O!!! --------- vid utskrift. Tecknenkombinationen \n skrivs inte ut utan ger istället radbyte. Uppgift: Skriv en metod public String tostring() som är tänkt att ligga i GameGrid och som ger tillbaka den sträng som representerar brädet. Hjälp: Studera noga hur strängen är uppbyggd och bestäm relationen mellan tecken i strängen och den 2-dimensionella arrayens storlek och innehåll. Mellan raderna i utskriften finns teckenföljden \n. Hur förändras mängden bindestreck med antalet rader? Arrayen är alltid kvadratisk och innehåller minst en rad (och kolumn). 6. Länkade listor a) Skriv en klass som implementerar enkellänkade listor med ankare och header. (3p) Operationer på en lista ska vara: insert som stoppar in ett element först (före det som var först), delete som tar bort det första elementet och size som ger antalet element i listan. Använd följande nodklass som ska finnas deklarerad som inre klass i din listklass: private class Node { Object content; Node next; } b) Inkludera i din listklass en metod public Iterator iterator() som ger tillbaka en iterator beskriven av gränssnittet Iterator nedan. Metoden remove ska inte ha någon effekt annat än att den kastar ett undantag. (2p)

Errata (D0010E, 08-03-31) No errors found so far.

Existing suggested solutions (D0010E, 08-03-31) None.