Rättningstiden är i normalfall 15 arbetsdagar, till detta tillkommer upp till 5 arbetsdagar för administration.

Relevanta dokument
Objektorienterad mjukvaruutveckling. 15 högskolepoäng. TentamensKod: Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

50 poäng. Samtliga teoretiska frågor kan ha 1-4 korrekta svar. Varje teoretisk fråga ger 1 poäng.

Tentamen NOA011 Systemarkitektprogrammet

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

Tentamen NOA011 Systemarkitektprogrammet. 51 poäng

Del av projektuppgiften. Systemarkitektprogrammet

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

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Objektorienterad Programkonstruktion. Föreläsning jan 2016

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

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

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

Objekt, klasser. Tillstånd Signatur Kommunikation Typ. Fält, parametrar och lokala variabler. Konstruktorer Metoder DAVA15

Systemvetarutbildningen och dataekonomutbildningen

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

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

DAT043 - Föreläsning 7

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

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

Tentamen. DD2385 Programutvecklingsteknik vt 2014 Måndagen den 2 juni 2014 kl Hjälpmedel: penna, suddgummi, linjal

PROGRAMMERINGSTEKNIK TIN212

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Föreläsningsmaterial (Arv) Skrivet av Andreas Lund

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Classes och Interfaces, Objects och References, Initialization

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Grundläggande programmering med C# 7,5 högskolepoäng. Provmoment: Ladokkod: Tentamen ges för: TEN1 NGC011 ADAEK17, ASYST17 samt öppen för alla

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Objekt-orienterad programmering och design. DIT953 Niklas Broberg, 2018

Systemvetarutbildningen och dataekonomutbildningen

TENTAMEN OOP

Tentamen. DD2385 Programutvecklingsteknik vt Fredagen den 5 juni 2009 kl Inga hjälpmedel utom penna, sudd och linjal

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

Undantagshantering. Fördjupad Java. Fel. Undantag. Fånga Undantag. Grupper av Undantag

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Javas Exceptions. DD2385 Programutvecklingsteknik Fler bilder till föreläsning 7 23/ Kort om Javas Exceptions Trådar i Java

Undantagshantering. Fördjupad Java. Undantag. Fel. Grupper av Undantag. Fånga Undantag

Klasshierarkier - repetition

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

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Undantag. Engelska: exceptions. Skansholm: exceptionella händelser

Kopiering av objekt i Java

Objektorienterad Programkonstruktion. Föreläsning 6 23 nov 2015

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

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Instuderingsuppgifter läsvecka 2

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

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

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

Objektorienterad Programmering (TDDC77)

Fördjupad Java. Undantagshantering. Fel

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

Tentamen i Objektorienterad modellering och design Helsingborg

Konstruktion av klasser med klasser

Objektorienterad Programkonstruktion. Föreläsning 7 24 nov 2015

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

Tentamen Programmering fortsättningskurs DIT950

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Klient/server. Översikt. Lektion 1: Webbtekniker från Microsoft. Webbteknik från Microsoft. Klient/server. Designmönster. Utrullning.

1.1 Runnable och Thread

LÖSNINGSFÖRSLAG. Tentamen. Objektorienterad modellering och design. EDA665, 4 poäng

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Fakulteten för ekonomi, kommunikation och IT. Corba. Datum: Mathias Andersson

Objektorienterad Programmering DAT043. Föreläsning 5 29/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Tentamen. DD2385 Programutvecklingsteknik vt 2015 Fredagen den 5 juni 2015 kl Hjälpmedel: penna, suddgummi, linjal

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. HT-15 Datum: Tid: kl

Objekt-orienterad Programmering och Design. TDA551 Alex Gerdes, HT-2016

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem).

Tentamen Nätverksprogrammering Lösningsförslag

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

TENTAMEN OOP

Tentamen i Objektorienterad modellering och diskreta strukturer

Målen med OOSU. Objektorienterad programmering. Objektorienterad programmering. Karlstads Universitet, Johan Öfverberg 1

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

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

Föreläsning 11 Aktiva objekt och trådar, strömmar, kommunikation DAT043,

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

Objektorienterad Programmering (TDDC77)

Tentamen. DD2385 Programutvecklingsteknik vt 2011 Tisdagen den 24 maj 2011 kl Hjälpmedel: penna, suddgummi, linjal

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering!

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Grundläggande programmering med C# 7,5 högskolepoäng. Provmoment: Ladokkod: Tentamen ges för:

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Arv innebär att man skapar en ny klass (subklass) utifrån en redan existerande klass (superklass, basklass).

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Tung bakgrundsaktivitet t.ex. Aktiva objekt t.ex. Animering, simulering. DD2385 Programutvecklingsteknik Några bilder till föreläsning 9 6/5 2013

Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

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

Objektorienterad Programmering (TDDC77)

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

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Transkript:

Objektorienterad mjukvaruutveckling Provmoment: Ladokkod: Tentamen ges för: Tentamen (teori) 21OO1B Systemarkitektprogrammet 7,5 högskolepoäng Tentamenskod: Tentamensdatum: 2016-10-20 Tid: 09:00 11:00 Hjälpmedel: Inga. Totalt antal poäng på tentamen: För att få respektive betyg krävs: G >= 10 VG >= 15 20 poäng Allmänna anvisningar: Fyll i din tentamenskod och dina svar (genom att sätta kryss i svarsmatrisen) på nästa sida. Skriv tydligt (oläslig markering = fel)! Frågorna (1-80) ger 0,25 poäng för korrekt svar och -0,25 poäng för inkorrekt svar. Icke besvarade frågor ger 0 poäng. Om du anser att en fråga är svår att förstå eller felaktigt ställd och inte kan få den klarlagd under tentamen, skriv ner din tolkning av frågan tillsammans med svaret (eller svara inte på den). Nästkommande tentamenstillfälle: 2017-01-10. Rättningstiden är i normalfall 15 arbetsdagar, till detta tillkommer upp till 5 arbetsdagar för administration. Viktigt! Glöm inte att skriva Tentamenskod på alla blad du lämnar in. Lycka till! Ansvarig lärare: Anders Gidenstam Patrick Gabrielsson Telefonnummer: 033 435 4214 033 435 4132

1

Svarsmatris Tentamenskod: (Ifylles av student) Svarsmatris Påståendet är: Sant Falskt Sant Falskt Sant Falskt Sant Falskt 1 21 41 61 2 22 42 62 3 23 43 63 4 24 44 64 5 25 45 65 6 26 46 66 7 27 47 67 8 28 48 68 9 29 49 69 10 30 50 70 11 31 51 71 12 32 52 72 13 33 53 73 14 34 54 74 15 35 55 75 16 36 56 76 17 37 57 77 18 38 58 78 19 39 59 79 20 40 60 80 2

3

Programmeringsteori Ange för följande påståenden om de är sanna eller falska. 1. I Java finns en automatiskt genererad argumentlös konstruktor (default constructor) i alla klasser. 2. I Java kan en privat metod inte överskuggas (override) vid arv. 3. I följande programkod kopieras vektorn a till b by value: int[] a = ; int[] b = ; b = a; 4. I Java är En accessormetod skall aldrig ändra ett objekts tillstånd en vedertagen tumregel. 5. Följande klass går att kompilera och köra: class Foo { int b = 0; public static int getb() { return b; 6. En Javakompilator översätter Java källkod till Java binärkod (byte code). 7. Om en subklass definierar en publik metod med samma signatur och returtyp som en publik metod ärvd från en superklass blir metoderna relaterade så att vid dynamisk bindning (dynamic dispatch, anrop på en referens av en superklass typ) kommer den egna metoden anropas. 8. Ett interface i Java får enbart innehålla signaturer (med returtyp) för publika metoder. 9. I Java kan en klass direkt ärva från flera superklasser. 10. I Java får en abstrakt (abstract) klass innehålla konkreta metoder. 11. I Java kan ett interface utöka (extend) ett eller flera andra interface. 12. Vid överlagring (overloading) av metoder i Java så kan dessa skilja sig åt enbart till sin returtyp. 13. Följande kod kommer att kompilera utan några problem: public void m(int value) { if(i < 0) throw new Exception( value must be positive ); 4

14. Utskriften från följande kod är: Divide by zero try { double d = 1.0 / 0; catch(exception e) { System.out.println( Divide by zero ); 15. Utskriften från följande kod är: A try { System.out.print( A ); return; catch(exception e) { System.out.print( B ); finally { System.out.print( C ); System.out.print( D ); 16. Följande kod kommer att kompilera utan några problem try { InputStream in = new FileInputStream( file.xyz ); catch(exception e) { System.out.println( Exception ); catch(ioexception ioe) { System.out.println( IOException ); 17. RuntimeException och dess subklasser är exempel på unchecked undantag. 18. I/O klasser som slutar på Reader kan hantera inläsning av byte-strömmar. 19. I nedanstående kod kommer I/O strömmen att stängas automatiskt: try(outputstream out = new FileOutputStream( file.xyz )) { out.write(0); catch(ioexception ioe) { System.out.println( IOException ); 5

20. Instanser av inre klasser skapas ofta i den yttre klassen (som omsluter den inre klassen). Dock kan man även skapa instanser av inre klasser från en annan klass. I så fall, om en inre klass är icke-statisk, måste man först skapa en instans av den yttre klassen (yttreobjekt), och därefter använda nedanstående kod för att skapa en instans av den inre klassen (inreobjekt) från en annan klass: YttreKlass.InreKlass inreobjekt = yttreobjekt.new InreKlass(); 21. Om den inre klassen i ovanstående uppgift istället är statisk, måste man använda nedanståden kod för att skapa en instans av den inre klassen från en annan klass: YttreKlass.InreKlass inreobjekt = new YttreKlass.InreKlass(); 22. Anonyma inre klasser används ofta i samband med händelsehanterare. I JavaFX (GUI biblioteket som ersatte Swing) fås ett händelseobjekt av typ ActionEvent när man klickar på en knapp, där händelsehanteraren måste implementera det typade interfacet EventHandler<ActionEvent> som innehåller den enda metoden void handle(actionevent e). Nedanstående kod är ett korrekt exempel på hur man kan skapa en anonym inre klass som kan registreras som en händelsehanterare för en knapptryckning: EventHandler<ActionEvent> handler = new EventHandler<ActionEvent>() { @Override public void handle(actionevent e) { System.out.println("Button clicked"); ; 23. Som ett alternativ till anonyma inre klasser som händelsehanterare, kan lambdauttryck användas. Följande kod är ett korrekt exempel på hur man kan använda ett lambdauttryck för att skapa en instans av en händelsehanterare för en knapptryckning: EventHandler<ActionEvent> handler = (e) -> { System.out.println("Button clicked"); ; 24. Varje händelseobjekt innehåller metoden getsource() som returnerar objektet som skapade händelseobjektet. 25. En ActionEvent skapas när man klickar på en MenuItem. 26. Notifyable är basklassen för alla händelser. 6

27. Följande kod kommer att exekvera ett jobb på en ny tråd: Thread t = new Thread( new Runnable() { public void run() { System.out.println( Executing job ); ); t.run(); 28. Följande kod är ett korrekt exempel på hur man kan skapa ett trådsäkert kodblock: Object o = new Object(); serializable(o) { // Trådsäkert kodblock 29. Följande kod skapar en trådpool med tre trådar samt exekverar ett jobb i trådpoolen: ExecutorService executor = Executors.newFixedThreadPool(3); Executor.execute(new Runnable() { public void run() { ); 30. En tråd som har exekverat klart kan återstartas genom att anropa dess resume() metod. 31. Om cond.await() anropas på ett Condition-objekt cond i ett trådsäkert kodblock, kommer nuvarande tråd att släppa låset lock och vänta tills en annan tråd anropar cond.signal(), innan exekveringen fortsätter. 32. En Iterator är fail-fast, vilket innebär att om iteratorn används för att traversera en samling, medans den underliggande samlingen håller på att modifieras av en annan tråd, så kommer iteratorn att kasta undantaget ConcurrentModificationException. 33. Metoden isdone() kan användas för att ta reda på om en ForkJoinTask har exekverat klart. 34. Sockets kan användas för att kommunicera mellan två Javaprogram. För att lyssna efter klientuppkopplingar på serversidan, anropar man metoden accept() på en Socket instans. 35. För att kunna skicka en instans av en egendefinierad klass via en socket, måste klassen implementera synchronized interfacet. 36. Om man skickar en instans av en egendefinierad klass via en socket, och klassen har ett attribut som är markerad som volatile, så kommer attributets värde inte att beaktas då instansen skickas över socket instansen. 7

37. När instanser av DatagramPacket skickas via en DatagramSocket-instans, så kommer det underliggande transportprotokollet att garantera att DatagramPacketinstanserna når mottagaren, och dessutom att paketen når mottagaren i samma ordning som de skickades. 38. För att kommunicera med en databashanterare, måste man först ladda in relevant JDBC-drivrutin samt erhålla ett Connection objekt genom att anropa en statisk metod på DriverManager klassen. 39. En instans av CallableStatement kan användas för att skicka ad hoc (godtycklig) SQL-kod till en databashanterare. 40. Om man exekverar en SELECT-sats via JDBC, så får man tillbaka en Iterator instans som man kan använda för att loopa igenom alla rader som returnerades. 8

Analys- och designteori Ange för följande påståenden om de är sanna eller falska. 41. Följande javakod är exempel på Facade mönstret: InputStreamReader in = new InputStreamReader(new FileInputStream(new File("file.xyz"))); 42. I Java är clone() metoden (som returnerar en kopia av ett objekt) ett exempel på en implementering av Proxy mönstret. 43. Memento mönstret används för att gömma ett komplext subsystem bakom ett simpelt interface. 44. Mediator mönstret används för att lagra samt återställa det inre tillståndet av ett objekt utan att påverka objektets inkapsling. 45. Eager Initialization används när man vill undvika att skapa ett Singleton objekt tills objektet först behövs. 46. Det går inte att skapa trådsäkra Singleton objekt. 47. Decorator mönstret används för att utöka eller ändra på ett objekts funktionalitet under körtid. 48. State mönstret används för att skapa en mängd relaterade algoritmer. 49. Händelsehanteringssystemet i Java är ett exempel på ett Observer mönster. 50. Chain of Responsibility mönstret definierar en länkad lista med hanterare som kan hantera olika begäran från en klient. 51. Det finns 23 Gang of Four (GoF) design mönster, indelade i de 3 kategorierna: Creational, Structural och Behavioral. 52. Adapter mönstret tillhör kategorin Creational designmönster. 53. Analys är att utifrån ett problem ta fram en konceptuell lösning. 54. Vattenfallsmodellen ingår som en del i the Unified Process (UP). 55. I dokumentet Supplementary Specification samlas majoriteten av de icke-funktionella kraven på systemet. 9

56. I UP planerar man innehållet i alla iterationerna som projektet kommer löpa över under Inception-fasen. 57. En iteration i UP är 1 till 4 månader. 58. Aktörer i användningsfall (Use Case) är alltid personer som identifieras av sina roller. 59. Syftet med Inception-fasen i UP är att ta fram projektets mål och vision och avgöra om det är värt att gå vidare med projektet. 60. Ett System Operation Contract beskriver hur tillståndet för objekt i designmodellen (Design Model) förändrats efter att operationen har genomförts. 61. Applikationslagret separerar, när det finns, domänlagret från UI/presentationslagret. 62. I arkitekturanalys är variationspunkter ställen där man spekulativt gissar att systemet i framtiden kan komma att behöva stödja förändringar. 63. Ett tekniskt memo (technical memo) beskriver hur en systemoperation har implementerats. 64. En Use Case realisering beskriver hur ett (scenario av ett) Use Case har realiserats i design modellen. 10

PersistentObject oid : OID state : PObjectState PObjectState commit() delete() rollback() save() setstate(pobjectstate)... * 1 commit(obj : PersistentObject) delete(obj : PersistentObject) rollback(obj : PersistentObject) save(obj : PersistentObject)...... Product Specification...... Sale OldDirty State commit(...) delete(...) rollback(...) OldClean State delete(...) save(...) New State commit(...) OldDeleted State commit(...) rollback(...) Figur 1 Del av Persistency Framework Betrakta Figur 1 ovan och ange för följande påståenden om de är sanna eller falska. 65. En applikation behöver bara en instans vardera av klasserna OldDirtyState, OldCleanState, NewState och OldDeletedState. 66. Diagrammet visar ett exempel på State mönstret. 67. Metoden setstate( ) i PersistentObject är en mallmetod som eventuella subklasser måste implementera. 68. Metoden delete() i PersistentObject skulle kunna implementeras som nedan enligt diagrammet: void delete() { state.delete(this); 69. Klasserna ProductSpecification och Sale har ett attribut av typen PersistentObject. 70. Att anropa state.rollback(this) från metoder i PersistentObject fungerar bara om state attributet refererar till en instans av OldDirtyState eller OldDeletedState. 11

Figur 2 Del av NextGen POS Betrakta Figur 2 ovan och ange för följande påståenden om de är sanna eller falska. 71. Diagramformen kallas i UML för Communication Diagram. 72. Anropen till put(id, pd) och create(id, price, description) görs inifrån metoden loadprodspec(). 73. En implementation av Register gjord utifrån diagrammet skulle kunna se ut så här: public class Register { private ProductCatalog productcatalog; public Register() { public create(productcatalog pc) { productcatalog = pc; 74. Diagrammet ingår i realiseringen av Use Case:t Process Sale för NextGen POS. 75. Klassen Map i diagrammet är generisk enbart med avseende på värdetypen. 76. Mönstret Information Expert är det som främst motiverar att Store skapar instansen pc av typen ProductCatalog. 12

Ange för följande påståenden om de är sanna eller falska. 77. I test-driven design (TDD) skriver man samtliga test som behövs för en klass innan man påbörjar implementeringen av klassen. 78. En väl designad uppsättning av systemtest bevisar att systemet är felfritt. 79. I test-driven design används omstrukturering (refactoring) för att fixa test som misslyckas. 80. Top-down, bottom-up och big bang är strategier för integrationstestning (integration testing). 13