NADA, KTH OOMPA 998-0-3 Sid () Extentamen i 2D359 Objektorinterad modellering programmering och analys Tisdag den 3 oktober 998 kl. -3 MED KORTA LÖSNINGSFÖRSLAG I dom flesta fall finns också lösningarna i föreläsningsanteckningarna, även då detta inte anges! Inga hjälpmedel tillåtna. Poäng och betyg: För godkänt krävs minst 0 poäng på vardera av teoridelen och problemdelen. För betyget 3, 4 och 5 krävs 20, 26 respektive 32 poäng (av möjliga 40). Övriga anvisningar: Teoridelen besvaras på dom prickade linjerna under respektive fråga och lämnas in tillsammans med övriga svarsblad. Lösningar till problemdelen lämnas in på separata blad. Frågorna ej säkert i svårighetsordning! Lösningar: Lösningsskisser på http://www.nada.kth.se/kurser/kth/2d359. Namn: Lycka till! Personnummer: Teoridel (svaren direkt på lydelsen). (4) Arv är centralt i objektorienterade språk och utvecklingsmetoder. a) Vad innebär det att en klass i ett objektorienterat språk ärver från en annan. Se Budd kapitel, 5.3, 8, 0
NADA, KTH OOMPA 998-0-3 Sid 2 () Man kan också tala om olika typer av arv. Förklara med en mening per delfråga vad de olika typerna av arv i b-g nedan innebär: b) Arv för specifikation (eng. inheritance for specification) Se Budd avsnitt 8.4.2 c) Arv för specialisering (eng. inheritance for specialization) Se Budd avsnitt 8.4. d) Arv för konstruktion (eng. inheritance for construction) Se Budd avsnitt 8.4.3 e) Arv för utvidgning (eng. inheritance for extension) Se Budd avsnitt 8.4.4 f) Arv för begränsning (eng. inheritance for limitation) Se Budd avsnitt 8.4.5 g) Arv för kombinering (eng. inheritance for combination) Se Budd avsnitt 8.4.6 2. (5) Förklara vad följande begrepp innebär inom objektorienterad programmering: a) Polymorfi Se Budd kapitel 2 + ordlistan sidan 355 b) Abstrakt klass Se Budd kapitel 8 + ordlistan sidan 349
NADA, KTH OOMPA 998-0-3 Sid 3 () c) Abstrakt metod Se Budd kapitel 8, avsnitt 2.5 + ordlistan sidan 349 d) Överskrivning (eng. overriding) Se Budd avsnitt 2.4 + ordlistan sidan 355 e) Överlagring (eng. overloading) Se Budd avsnitt 2.3 + ordlistan sidan 355 3. (2) Förklara kort begreppen datadriven och ansvarsdriven design samt vilken inverkan respektive metod har på programkonstruktionen. Se WBW 4. (3) Diskutera vilka konsekvenser användning av komposition respektive arv har på designen och underhållet av ett program. Se Budd avsnitt 8.7-8.8, 0.2
NADA, KTH OOMPA 998-0-3 Sid 4 () 5. (4) Den objektorineterade utvecklingsprocessen Beskriv de olika faserna i en objektorienterad utvecklingsprocess och vad man gör i respektive moment. Poängtera vilka av UML:s tekniker som används i respektive moment samt hur de olika faserna och momenten hänger ihop och påverkar varandra. Se Fowler kapitel 2 + föreläsninganteckningar 4, 9
NADA, KTH OOMPA 998-0-3 Sid 5 () 6. (2) Ge minst tre viktiga orsaker till att använda designmönster (eng. design patterns): Se Budd kapitel 5 + föreläsninganteckningar 0 + EG
NADA, KTH OOMPA 998-0-3 Sid 6 () Problemdel (svaren på separata blad) 7. (4) Använd den fragmentariska bekrivningen av klassen Vector nedan för att konstruera en klass Stack med metoderna (beskrivningen på formen returtyp metodnamn(argumenttyp)): boolean isempty() // Är stacken tom? Object push(object) //Lägg ett element på stacken och returnera det Object peek() //Vad ligger överst på stacken Object pop() //Ta bort översta objektet från stacken public class Vector { //Är vektorn tom? public boolean isempty() {...} //Hur stor är vektorn? public int size() {...} //Ingår elem i vektorn? public boolean contains(object elem) {...} //Vilket element finns vid index? public Object elementat(int index) {...} } //Första elementet public Object firstelement() {...} //Sista elementet public Object lastelement() {...} //lägg till obj sist i vektorn public void addelement(object obj) {...} //ta bort obj från vektorn public boolean removeelement(object obj) {...}... Genom att: a) implementera stacken som subklass till Vector b) använda komposition via en instans av Vector. Lösning: Se Budd avsnitt 0.2. Observera att vi borde använda removeelementat(...). Vad händer annars om vi har dubbletter och tar bort ett element på stacken? 8. (4) Klass- och samarbetsdiagram: a) Konstruera ett klassdiagram med företag och personer. Där: ett företag har noll eller flera anställda varje person jobbar på högst fyra olika företag varje anställd har en chef som sin tur har en noll eller flera underställda. Sätt också ut: lämpliga rollnamn namn på eventuella associationer samt riktningar på dessa. b) Ett samarbetsdiagram (eng. collaboration diagram) som illustrerar följande enkla scenarie: En person (P) ber om "audiens" hos ett företag via dess personalavdelning (PA). PA meddelar P om att han kan komma för intervju hos sin eventuellt blivande chef C kl K dagen D. Personen kommer till receptionen (R) och frågar efter C. Receptionen kontrollerar om C är inne.
NADA, KTH OOMPA 998-0-3 Sid 7 () Är C inne så meddelar R C att P är på väg upp annars frågar R PA om ny tid och meddelar P den nya tiden. Lösning: Se föreläsningsanteckningar 5 och Fowler. a) Klassdiagram 0.. boss Works-for4 0..4 Person employee employer worker Company Manages4 b) Samarbetsdiagram 2.2.3b :[C not available] proposenewappointment(n) 2.2.2a: [C available] okey() P R 2.:askFor (C).:askForAudience().2:confirmAppointment(C, D, K) 2.2.3a:[C not available]n := askfornewappointment (C) 2.2.:checkIfAvailable() 2.2.2b:[C available]persononway(p) PA C 9. (6) En bandspelare har följande knappar som kontrollerar motorn: Rew << Play > FF >> Stop där Rew är Rewind och FF är Fast Forward. Stop par bandet mjukt. Om användaren byter riktning utan att först pa bandet (t ex om man trycker Play och sedan Rew) ska motorlogiken pa bandet automatiskt för att undvika bandbrott. Play-Rew ska alltså utföras som Play-Stop-Rew, Rew-FF som Rew-Stop-FF osv. Däremot behöver inte bandet pas om man trycker Play-FF, eftersom spelriktningen då är oförändrad. Antag att det finns ett objekt panel som skickar meddelandena rew,, ff och vidare till ett objekt control som följd av att användaren trycker på knapparna. Objektet control i
NADA, KTH OOMPA 998-0-3 Sid 8 () sin tur skickar meddelandena forward, fast forward, fast backward och till motor för att kontrollera bandets hastighet. a) Konstruera ett sekvensdiagram som visar meddelandesändningen mellan de tre ovan nämnda objekten. Täck speciellt in följande sekvens av knapptryckingar på panelen:,, ff, rew,. b) Konstruera ett tillståndsdiagram som beskriver motorns olika tillstånd samt övergångar mellan dessa. Hantera dom tillfälliga pen mellan fram- och bakåtspolning med speciella ptillstånd som tillfälligt par bandet och efter tiden t automatiskt går över i nästa tillstånd. Tex fastforward till fast backward ger sekvensen: fast forward, tillfälligt p, efter tiden t övergång till fast backward. Lösning: a) Panel Control Motor forward ff rew fast forward fast backward forward
NADA, KTH OOMPA 998-0-3 Sid 9 () b) Vi börjar med att identifiera tillstånden i tillståndsdiagrammet i (a) (detta hör gentligen inte till svaret utan är ett steg på vägen för att komma fram till det). Panel Control Motor Playing Stopped ff FastForward rew Waiting Rewinding Waiting2 Playing forward fast forward fast backward forward och här är tillståndsdiagrammet (som snarast visar motorkontrollenheten): FastForward entry/fast forward rew after(t sec) Waiting entry/ Waiting4 entry/ after(t sec) ff Rewinding entry/fast backward ff ff Stopped entry/ rew Waiting2 entry/ after(t sec) Playing entry/forward rew Waiting3 entry/
NADA, KTH OOMPA 998-0-3 Sid 0 () 0. (6) Antag att vi skall konstruera ett system för att hantera studenter, anställda, kurser, tentor och inrapportering till LADOK Följande lista och kort-korta beskrivningar av ingående objekt har vi fått från den administrativa avdelningen. I övrigt är vi fria att designa systemet efter vår egen förmåga och införa nya objekt om vi anser att detta behövs. Fast ett sidokrav från den administrativa avdelningen är att varje deluppgift skall få plats på högst en A4 var. (I ett senare skede kan dom tänka sig att vi gör mer detaljerade beskrivningar.) Objekt Beskrivning Student en person går kurser Lärare en person håller kurser har lön rapporterar in resultat till LADOK Kurs har deltagare har en kursledare/lärare har kurskod Studievägledning ansvarar för tentamensbokning Tentamen för kurs och moment anmälda tentander sal salsvakt, som bla skall ha lön LADOK inrapportering av kursmoment a) Konstruera CRC-kort över problemet. b) Konstruera ett klassdiagram med lämpliga arvshierarkier, associationer och beroenden. Diagrammet skall vara på (konceptuell) analysnivå.
NADA, KTH OOMPA 998-0-3 Sid () Lösning: a) Tex något i följande stil: Person subklasser: Student subklasser: Anställd, Student Hanterar information om en person: namn, adress, telefon, födelsenummer, email Student superklasser: Person Hanterar info om linjer/inriktingoch kursstatus Anställd superklasser: Person subklasser: Lärare Hanterar lön, anställningsnummer, utbetalningskonto, etc Lärare superklasser: Anställd Kurs LADOK Ansvarar för kurser och inrapportering av resultat Kurs LADOK Kurs Beskrivning, hemsidor, res, fanteckningar, labkurs Lärare Student Tentamen Studievägledning Tentamensbokning Student Tentamen LADOK Inrapportering och hantering av resultat Tentamen Salsbokning, tillsättande av vakt, tentalistor Anställd Student Kurs Lösning: ett möjligt diagram (jag har inte hunnit lägga in namn på associationer osv än!) Studievägledning Person Student LADOK Kurs Anställd Lärare.. salsvakt lärare.. Tentamen Referenser Budd - UML Distilled Applying The Standard Object Modelling Language st Edition, M. Fowler, K. Scott, 997 208 pages, Addison-Wesley 0-20-32563-2. Fowler - Understanding Object-Oriented Programming With Java st Edition, Timothy Budd, 998 384 pages, Addison-Wesley 0-20-3088-9. BC - A Laboratory For Teaching Object-Oriented Thinking, Kent Beck och Ward Cunningham, 989. PW - Dimensions of Object-Based Language Design, Peter Wegner, 987. WBW - Object-Oriented Design: A Responsibility-Driven Approach, Rebecca Wirfs-Brock och Brian Wilkerson, 989. EG - Utdrag ur Design Patterns Elements of Reusable Object-oriented Software (mönstret Observer) av Gamma, Helm, Johnson och Vlissides, 994.