Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

Relevanta dokument
Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

Modellsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

Modellsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

Modellsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

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

Tentamen FYTA11 Javaprogrammering

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

PROGRAMMERING-JAVA TENTAMINA

Föreläsning 15 (16) Historik (java.awt) Historik (javax.swing) Introduktion till Swing

Repetitionsföreläsning 2: Quiz & problemlösning med swing Inget nytt material.

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

PROGRAMMERING-Java TENTAMINA

PROGRAMMERING-Java Omtentamina

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

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

Föreläsning 1, vecka 8: Att förbereda sig för tentan

Lösningsförslag till tentamen

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

PROGRAMMERINGSTEKNIK TIN212

Java-concept och Swing. Swing low, sweet chariot

Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se

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

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Mer om grafiska komponenter. Händelsestyrda program

ITK:P1 Föreläsning 4. Grafiska gränssnitt i Java. AWT-komponenter

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Detta dokument är ett exempel, cirka hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

SMD091 Lektion 9. Definition. Inkapsling. Lite repetition. Grafik. Gränssnitt Definition och Implementation. Sammansättning... Implementation.

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

DAT043 Objektorienterad Programmering

Lektion Händelsehanterare

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 18

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

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

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

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt

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

Objektorienterad Programkonstruktion. Föreläsning 3 9 nov 2015

TENTAMEN OOP

Föreläsning 3: Händelsestyrda program och användargränssnitt

Föreläsning 2, vecka 8: Repetition

LYCKA TILL!!! TENTAMEN I Programmeringsteknik F1. Var vänlig och läs detta: CTH TIN 211. DATAVETENSKAP Göteborg ( ) TENTAMEN

Lösningar till tentamen i EDAF25

DAT043 - föreläsning 8

27. GUI Programming. Java. Summer 2008 Instructor: Dr. Masoud Yaghini

Lösningsförslag till tentamen FYTA11 Javaprogrammering

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

Föreläsning 2, vecka 6: Tillstånd i objektorienterade program (och mera interface)

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016

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

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Övning vecka 5. Denna vecka ska vi titta pa samlingar, generics och designmönstren Decorator, Singleton och Iterator.

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

TDDD78 Viktiga begrepp, del 2

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

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

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

TENTAMEN OOP

Den som bara har en hammare tror att alla problem är spikar

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 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

CHALMERS TENTAMEN. 2018/2019, lp 1 DAT050. Uno Holmer

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

Föreläsning 3: Booleans, if, switch

Föreläsning 1, vecka 7: Rekursion

Tentamen Objekt-orienterad programmering med Java, 1DL100 Sommarkurs och distanskurs

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

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

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 5

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Tentamen i Objektorienterad programmering E

Tentamen FYTA11 Javaprogrammering

Objektorienterad programvaruutveckling, fk, TDA550. Exempeltentamen

Tentamen i Programmering

Tentamen i Objektorienterad programmering

Föreläsning 13: Swing (GUI), händelser, timer

Föreläsning 14: Grafik & mera händelsehantering

Föreläsning 12. Föreläsning 12. Rörliga figurer Klassen Timer Undantag Något om applets. Rörliga appletsfigurer Klassen Timer Undantag

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

Swing. MER Java Foundation Classes (JFC) Hur lära sig? Vad är farorna. LayoutManagers. Exempel på några av komponenterna

2I1049 Föreläsning 8. Grafiska gränssnitt i Java. AWT-komponenter. Grafiska gränssnitt, Java interface och händelsehantering

Exempel på användning av arv: Geometriska figurer

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag aug - 23 Tentamen i Objektorientering och Java Skrivtid 5 h

Swing. MER Java Foundation Classes (JFC) Vad är farorna. Hur lära sig? LayoutManagers. Exempel på några av komponenterna

Föreläsnings 11 - GUI, Händelsestyrda program, MVC

Lösningsförslag tentamen FYTA11 Java

Lösningar för tenta 3 DAT043,

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 2

Lösningsförslag till tentamen

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

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

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?

Transkript:

Data och Informationsteknik / Computer Science and Engineering Chalmers University of Technology and University of Gothenburg Magnus Myréen Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545 Måndag, 2015-01- 05, 14:00-18:00, byggnad M Ansvarig lärare: Magnus Myréen; Alexander Sjösten besöker tentan (076 199 90 55) Vitsords gränser: 3=28p, 4=38p, 5=48p, max 60p. Hjälpmedel: på sista sidan av dokument finns ett utdrag ur Javas API Resultat: skickas per epost från Ladok Lösningar: kommer att finnas på kurshemsidan Granskning av rättning: tider för detta kommer att finnas på kurshemsidan Kom ihåg att inte fastna på en uppgift. Bestäm i förväg din egen tidsgräns per uppgift. Lycka till! Uppgift 1: [4 poäng totalt] arv, gränssnitt, exceptions Svara sant eller falskt på följande påståenden. a) I Java kan man skriva: public class A extends B implements I { [1 poäng] sant b) I Java kan man skriva: public class A extends B, C { [1 poäng] falskt c) I Java kan man skriva: public class A implements I, J { [1 poäng] sant d) I Java kan man skriva: public class A throws IllegalArgumentException { [1 poäng] falskt Uppgift 2: [7 poäng totalt] rekursion, strängar, loopar Funktionen f är definierad som nedan. public static String f(int k) { if (k < 1) { return ""; else { return f(k- 1) + k + f(k- 1); a) Vad skrivs ut när System.out.println(f(4)) körs? [3 poäng] 121312141213121

b) Skriv en ny version av f som inte använder rekursion. Den nya version bör utföra precis samma beräkning som koden för f ovan. [4 poäng] public static String f(int k) { String res = ""; for (int i=1; i<=k; i++) { res = res + i + res; return res; Uppgift 3: [18 poäng] gränssnitt, att skriva klass Denna uppgift handlar om att implementera logik delen av en mycket enkel kalkylator. public interface Calc { public void presskey(string key); public String getdisplaytext(); Skriv kod för en klass som implementerar (implements) gränsnittet (interface) Calc ovan. [18 poäng] Obs. Denna uppgift handlar inte om grafiska användargränssnitt (swing). Kalkylator programmet är organiserat så att när användaren trycker på en av knapparna skickas texten som står på knappen till din implementation av gränssnittet Calc. Exempel: om man trycker C (dvs knappen som bör återställa kalkylatorn) då anropas presskey metoden med indata "C"; sen anropar programmet getdisplaytext metoden för att få texten som ska visas till användaren. (I bilden ovan har getdisplaytext returnerat 17). Se till att din kod klarar av enkla test som t.ex. public boolean calctest1(calc c) { c.presskey("1"); c.presskey("2"); c.presskey("+"); c.presskey("5"); c.presskey("="); return (c.getdisplaytext()).equals("17"); public boolean calctest2(calc c) { c.presskey("1"); c.presskey("2"); c.presskey("+"); c.presskey("5"); return (c.getdisplaytext()).equals("0"); public boolean calctest3(calc c) { c.presskey("1"); c.presskey("+"); c.presskey("2"); c.presskey("*"); c.presskey("3"); c.presskey("="); return (c.getdisplaytext()).equals("9");

Tips: Innan du skriver kod, tänk hur en enkel kalkylator fungerar. Vad händer när man trycker på "+" knappen? Ja, kalkylatorn kommer ju ihåg vad den skall göra när man senare trycker på "=" knappen. Men en enkel kalkylator kommer inte ihåg mera än det. Obs. Ni behöver inte hantera division med 0. public class CalcImpl implements Calc { int display = 0; int memory = 0; String op_key = "+"; public void computeresult() { if (op_key.equals("+")) { memory = memory + display; else if (op_key.equals("- ")) { memory = memory - display; else if (op_key.equals("*")) { memory = memory * display; else if (op_key.equals("/")) { memory = memory / display; public void presskey(string key) { if (key.equals("0") key.equals("1") key.equals("2") key.equals("3") key.equals("4") key.equals("5") key.equals("6") key.equals("7") key.equals("8") key.equals("9")) { display = display * 10 + Integer.parseInt(key); else if (key.equals("+") key.equals("- ") key.equals("*") key.equals("/")) { computeresult(); op_key = key; display = 0; else if (key.equals("=")) { computeresult(); op_key = "+"; display = memory; memory = 0; else if (key.equals("c")) { op_key = "+"; display = 0; memory = 0; public String getdisplaytext() { return display + "";

Uppgift 4: [16 poäng totalt] testning, array, slumptal, loopar Denna uppgift ber dig skriva testkod för en sorteringsfunktion. Sorteringsfunktionen, peterssort, tar in en array av int och arrangera om elementen i arrayn så att a[i] <= a[i+1], för varje index i. for (int i=0; i<1000; i++) { int[] a = generaterandomarray(); peterssort(a); if (isinorder(a)) { System.out.println("OK"); else { System.out.println("Fel!"); Din uppgift: a) Implementera funktionen generaterandomarray, så att den returnerar en array som är slumpmässig både i längd och innehål. [4 poäng] public int[] generaterandomarray() { Random r = new Random(); int[] a = new int[r.nextint(10000)]; for (int i=0; i<a.length; i++) { a[i] = r.nextint(); return a; b) Implementera funktionen isinorder, som returnerar true endast ifall alla element är i rätt ordning [4 poäng] public boolean isinorder(int[] a) { for (int i=0; i<a.length- 1; i++) { if (a[i] > a[i+1]) { return false; return true; c) Förklara varför följande felaktiga implementation av peterssort inte kommer att fångas av testkoden ovan. [3 poäng] public static void peterssort(int[] a) { for (int i=0; i<a.length; i++) { a[i] = i; Test koden testar bara att elementen i arrayn är i rätt ordning. Den testar inte om elementen är en om ordning av orginal arrayn. d) Beskriv (men inte nödvändigtvis med konkret kod) hur testkoden kan förbättras så att felaktiga implementationer som ovan inte kommer igenom testet. [5 poäng] Test koden kan förbättras genom att ta en kopia av arrayn innan den går in i peterssort. Efter att peterssort har kört kan man kolla om elementen stämmer med orginal arrayn. Ett bra sätt att göra detta på är att köra en enkel och säkert korrekt sortering implementation på kopian på orginal arrayn, och sedan jämföra resultaten. Här är exempel kod: for (int i=0; i<1000; i++) { int[] a = generaterandomarray(); int[] b = copyofarray(a); peterssort(a); bubblesort(b); boolean correct = true;

for (int j=0; j<a.length; j++) { if (a[j]!= b[j]) { correct = false; if (correct) { System.out.println("OK"); else { System.out.println("Fel!"); Uppgift 5: [15 poäng] swing, händelsehantering Skriv ett program som består av fönster. I varje fönster finns det endast en knapp. När man trycker på knappen försvinner fönstret med knappen som tryckts och samtidigt skapas två likadana fönster, som har samma beteende. När programmet startas bör det endast finnas ett fönster. Obs. Det viktiga är att få ovanstående beteende implementerat korrekt. Fönstrens positionen och storleken m.m. är inte viktigt. Exempel: När programmet körs bör det se ut ungefär så här: När program- met startar: Efter ett knapptryck: Efter ett till knapptryck: Efter det tredje knapptrycket: public class Click extends JFrame implements ActionListener { public static void main(string[] args) { Click c = new Click(); public Click() { JPanel p = new JPanel(); JButton b = new JButton("Knapp"); b.addactionlistener(this); p.add(b); this.add(p); this.setvisible(true); public void actionperformed(actionevent e) { Click c1 = new Click(); Click c2 = new Click(); this.setvisible(false);

Utdrag ur Javas API. Obs. Man behöver inte använda alla dessa klasser. Man får också använda annat från Javas API. Class AbstractButton extends JComponent extends Container extends Component extends Object public void addactionlistener(actionlistener l) Adds an ActionListener to the button. Interface ActionListener void actionperformed(actionevent e) Invoked when an action occurs. Class ActionEvent extends AWTEvent extends EventObject extends Object ActionEvent(Object source, int id, String command) Constructs an ActionEvent object. String getactioncommand() Returns the command string associated with this action. Class String extends Object int length() Returns the length of this string. Class Component extends Object int getheight() Returns the current height of this component. int getwidth() Returns the current width of this component. Class Container extends Component extends Object Component add(component comp) Appends the specified component to the end of this container. Class FlowLayout extends Object, implements LayoutManager FlowLayout() Constructs a new FlowLayout with a centered alignment and a default 5- unit horizontal and vertical gap. Class Graphics extends Object void drawrect(int x, int y, int width, int height) Draws the outline of the specified rectangle. abstract void fillrect(int x, int y, int width, int height) Fills the specified rectangle. Class JButton extends AbstractButton extends JComponent extends Container extends Component JButton(String text) Creates a button with text. Class JComponent extends Container extends Component extends Object protected void paintcomponent(graphics g) Calls the UI delegate's paint method, if the UI delegate is non- null. Class JFrame extends Frame extends Window extends Container extends Component extends Object Container getcontentpane() Returns the contentpane object for this frame. Class JPanel extends JComponent extends Container extends Component extends Object JPanel() Creates a new JPanel with a double buffer and a flow layout. Interface LayoutManager Class Object boolean equals(object obj) Indicates whether some other object is "equal to" this one. String tostring() Returns a string representation of the object. Class Random extends Object Random() Creates a new random number generator. int nextint() Returns the next pseudorandom, uniformly distributed int value from this random number generator's sequence. int nextint(int n) Returns a pseudorandom, uniformly distributed int value between 0 (inclusive) and the specified value (exclusive), drawn from this random number generator's sequence. Class Window extends Container extends Component extends Object void setvisible(boolean b) Shows or hides this Window depending on the value of parameter b.