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



Relevanta dokument
Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser.

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

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

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

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 7/ Exempel: Implementation av Schackpjäser.

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

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

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

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

Objektorienterad Programmering (TDDC77)

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

OOP Objekt-orienterad programmering

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Konstruktion av klasser med klasser

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

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

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

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

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

Outline. Objektorienterad Programmering (TDDC77) Åsidosättning. Signatur. Åsidosättning. Abstrakta klasser. Ahmed Rezine.

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

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Lösningar till tentamen i EDAF25

Lösningsförslag till tentamen

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

Objektorienterad programmering i Java

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

Föreläsning 9: Arv och UML

TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 3 Erik Nilsson, Institutionen för Datavetenskap, LiU

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

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

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

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

Tentamen. Lösningsförslag

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

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

Övning 4. I denna övning ska vi titta på icke-muterbarhet kontra muterbarhet, samt metoderna equals, hashcode och clone.

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

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

Malmö högskola 2008/2009 CTS

TENTAMEN OOP

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

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

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

Lösningsförslag till exempeltenta 2

Lösningsförslag till tentamen

Klasshierarkier. Klasser kan byggas på redan definierade klasser

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

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

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

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

Svaret kan ges i Javakod (eller i UML-klassdiagram). public class A { B minb;... } public class B { <B:s många variabler och metoder> } Lösning:

Tentamen. Grundläggande programmering i Java A 5p, DTAA

Lösningsförslag. 1 Lösningsförslag. Uppgift 1

Designmönster. Kapitel Kommandomönstret

OOP Objekt-orienterad programmering

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

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

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

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

DAT043 - Föreläsning 7

Tentamen, EDAA20/EDA501 Programmering

Tentamen LÖSNINGSFÖRSLAG. c) Tilldelningen C x = new D() ger kompileringsfel eftersom klassen D är abstrakt.

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

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

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

Integritetsprincipen. Objektorienterad modellering och diskreta strukturer / design

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

Repetition av OOP- och Javabegrepp

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

Föreläsning 6. Mer om klasser och objekt. Enkla variabler kontra referensvariabel. Omslagsklassen Integer. Referensvariabler

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

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

Repetition av OOP- och Javabegrepp

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Lösningar för tenta 2 DAT043,

Föreläsning 13 Innehåll

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Lösningsförslag till exempeltenta 1

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

Programmering A. Johan Eliasson

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

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

DAT043 Objektorienterad Programmering

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

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

Tentamen Programmering fortsättningskurs DIT950

Enkla variabler kontra referensvariabel

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

Språkkonventioner och redigering av tal.

Föreläsning 12. Länkade listor

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

Lösningsförslag till tentamen

Lektion Händelsehanterare

Instuderingsuppgifter läsvecka 2

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Transkript:

SI-pass 4 Johan Brook och Jesper Persson 25 september 2012 1. Sant eller falskt? Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner. Interfaces i Java kan innehålla privata instansvariabler Man kan instansiera abstrakta klasser Abstrakta metoder i en klass måste implementeras av subklasser En klass kan ärva från två andra klasser Ett interface kan ärva från ett annat interface Ett interface kan ärva från flera interface 2. Modellera mera! Att diskutera: När är det läge att använda: en vanlig klass? en abstrakt klass? arv? ett interface? en inre klass? Ge gärna exempel för varandra. Att göra: Utgå från specifikationen nedan och modellera ett vapensystem (kanske kan användas i ett spel). Använd UML för att visualisera sambanden samt ev. arv. Ni får gärna skriva ner kod om ni vill, kanske för att förklara för varandra. Implementera korrekta equals-metoder där det behövs. Vad blir utskriften i testprogrammet längst ner i uppgiften? (enligt er implementation) Följande modeller ska finnas med, och ha instansvariabler och metoder (nästlade listorna): Sword istwohanded:boolean RocketLauncher - ammo:int - range:int - caliber:int - splasharea:int + getammo:int + setammo(ammo:int):void + fire():void ShotGun - ammo:int - range:int - caliber:int - bulletspread:int + getammo:int + setammo(ammo:int):void 1

+ fire():void Ni har tillgång till följande interface: /** * An equippable object. */ interface Equippable { /** * Characters can call this method to invoke an action * on the equippable object. */ public void use(); Testprogrammet Equippable sword = new Sword(); Equippable rocket = new RocketLauncher(4, 20, 200, 10); Equippable rocket2 = new RocketLauncher(4, 20, 200, 11); // Test different weapons System.out.println("Comparing a sword with a rocket. Should be false"); System.out.println(sword.equals(rocket)); // Test the same weapon System.out.println("Comparing two rockets. Should be false"); System.out.println(rocket.equals(rocket2)); Player p = new Player(); p.setthing(rocket); p.thing.use(); p.setthing(sword); p.thing.use(); 2

3. Interface, arv, equals I alla system och programmeringsspråk vill man kunna jämföra om värden och objekt är likadana. För primitiva datatyper har man operatorn ( == ) som jämför på likhet, men den fungerar inte alltid som man tänkt för klasstyper. Se gärna närmre på koden hemma om ni inte hinner klart här. Det är ett schysst exempel på hur man kan bygga ett system av lyssnare, och användning av abstrakta klasser och interfaces. Att göra: Betrakta systemet nedan (bli inte avskräckta av mängden kod :)). 1. Fyll i de tomma metoderna (märkt med Implement this! ). 2. Vad skrivs ut när man kör klassen ButtonSystem? 3. Beskriv flödet av koden med egna ord och förklara för varandra om det behövs. Se till att ni har grepp om vad som händer. Varför används abstrakta klasser och interface som de gör? public class ButtonSystem { public static void main(string[] args) { new ButtonSystem(); // Main program public ButtonSystem() { Button addbutton = new Button("Add", 20, 20); Button deletebutton = new Button("Delete", 40, 40); deletebutton.setlistener(new DeleteListener()); addbutton.setlistener(new AddListener()); // Simulate clicks deletebutton.click(); System.out.println("********"); addbutton.click(); System.out.println("********"); System.out.println("Are the buttons equal?"); System.out.println(addButton.equals(deleteButton)); private class AddListener implements Listener { public void fire(event evt) { System.out.println("Added thing to system with event " + evt); System.out.println("The event came from " + evt.getsource()); evt); private class DeleteListener implements Listener { public void fire(event evt) { System.out.println("Delete thing from system with event " + System.out.println("The event came from " + evt.getsource()); abstract class AbstractButton { 3

private Listener listener = null; private String label; private int width; private int height; private static int CLICKS = 0; public AbstractButton(String label) { this(label, 20, 10); public AbstractButton(String label, int width, int height) { this.label = label; this.width = width; this.height = height; public void setlistener(listener l) { this.listener = l; public String tostring() { // **************** return "<RETURN NICE STRING HERE YES>"; public void click() { if(this.listener!= null) { int newid = ++CLICKS; Event event = new Event(newID, this); this.listener.fire(event); public boolean equals(object obj) { // *************** return true; class Button extends AbstractButton { public Button(String label) { super(label); public Button(String label, int width, int height) { super(label, width, height); class Event { private Object source; private int id; public Event(int id, Object source) { 4

this.id = id; this.source = source; public Object getsource() { return this.source; public String tostring() { // **************** return "<RETURN NICE STRING HERE YES>"; interface Listener { public void fire(event evt); 5