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:

Relevanta dokument
Lösningsförslag till tentamen

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

Lösningsförslag till tentamen

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

Objektorienterad programutveckling, fk

Övning 5. TDA550 - Objektorienterad programvaruutveckling, fk

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

TENTAMEN: Objektorienterad programutveckling, fk. Läs detta! Uppgifterna är inte ordnade efter svårighetsgrad.

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

Lösningar till tentamen i EDAF25

Instuderingsuppgifter läsvecka 2

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

Tentamen i Objektorienterad modellering och design Helsingborg

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.

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

Tentamen i Objektorienterad modellering och diskreta strukturer

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

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

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

Tentamen Programmering fortsättningskurs DIT950

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

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

Tentamen. Lösningsförslag

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

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

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

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

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

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

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

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

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

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

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

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

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

Institutionen för TENTAMEN CTH VT-15 Datavetenskap TDA550 DAG: TID: 8:30 12:30

Institutionen för TENTAMEN CTH HT-13 Datavetenskap TDA550 DAG: TID: 8:30 12:30

Lösningsförslag övning 2.

Lösningar till tentamen i EDAF25

TENTAMEN OOP

CHALMERS TENTAMEN. 2012/2013, lp 1 DAT042. Uno Holmer. Java API (utdelas av skrivningsvakten) Erland Holmström tel besöker tentamen

Objektorienterad Programmering (TDDC77)

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

Konstruktion av klasser med klasser

LULEÅ TEKNISKA UNIVERSITET

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

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

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

Objektorienterad Programmering (TDDC77)

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

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

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

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

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Exempel på användning av arv: Geometriska figurer

TENTAMEN OOP

JUnit. Ska kompletteras med kodexempel på JUnit. DD2385 Programutvecklingsteknik Några bilder till föreläsning 12 21/5 2012

Tentamen i Objektorienterad modellering och design

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

Lösningsförslag till tentamen

Objektorienterad programvaruutveckling, fk, TDA550. Exempeltentamen

Institutionen för TENTAMEN CTH VT-12 Datavetenskap TDA550 DAG: TID: 8:30 12:30

Datatyper. Programmering. Att definiera datatyper i Java. Laddade partiklar. (x,y) (Rx,Ry) hh.se/db2004

Repetition av viktiga begrepp inom objektorienterad programmering

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Föreläsning 13 Innehåll

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

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

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

Lycka till! TENTAMEN: Objektorienterade applikationer. Läs detta! 7 (7) Tentamen

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

Dugga i Grundläggande programmering STS, åk

F4. programmeringsteknik och Matlab

1 Repetition av viktiga begrepp inom objektorienterad programmering

Objektorienterad programmering (OOP) Föreläsning 15 & 16. Klasser för olika slags fordon. Klasser och objekt

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

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

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

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

UML Objektdiagram. Objektorienterad modellering och design (EDAF25) Föreläsning 3. UML Sekvensdiagram. UML Objektdiagram. Agenda

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

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

Laboration 13, Arrayer och objekt

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

PROGRAMMERING-Java TENTAMINA

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

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

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

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

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

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

Tentamen. DD2385 Programutvecklingsteknik vt Tisdagen den 26 maj 2009 kl Inga hjälpmedel utom penna, sudd och linjal

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

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

Föreläsning 2, vecka 8: Repetition

Tentamen LÖSNINGSFÖRSLAG

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

Föreläsning 3. Stack

Transkript:

Lös koppling mellan programdelar (klasser) eftersträvas ofta i objektorienterad programmering. Om klassen A beror av klassen B, hur kan man lösa upp detta beroende och åstadkomma en lösare koppling mellan klasserna A och B? Svaret kan ges i Javakod (eller i UML-klassdiagram). public class A { B minb;... public class B { <B:s många variabler och metoder> Enklaste lösningen (men flera alternativ finns) är att införa ett interface som A är beroende av och som B får implementera. Det är "lösare" att bero av ett interface än en klass med implementerade metoder. public class A { BI minb;... public interface BI { // skriv huvuden för alla metoder som B ska ha public class B implements BI { // implementera alla metoder som står i BI

Antag att klasserna AException och BException är relaterade enligt UML-diagrammet till höger. Vad skrivs ut i nedanstående program? public class ExceptionTester { public static void main (String[] args) { Catcher thecatcher = new Catcher(); for( int val = -10; val <= 10; val += 10 ) { try { thecatcher.catchit(val); catch( BException e ) { System.out.println( "main caught an exception" ); public class Catcher { public void catchit(int send) throws BException { Pitcher apitcher = new Pitcher(); try { apitcher.throwit (send); catch (AException e) { System.out.println( "catchit caught an exception" ); public class Pitcher { public void throwit(int a) throws AException, BException { if( a < 0 ) throw new AException(); else if (a == 0) throw new BException(); else System.out.println( "In throwit a is: " + a ); catchit caught an exception catchit caught an exception In throwit a is: 10 Exception AException BException

Förklara varför nedanstående klasser bryter mot Liskov Substitution Principle. public abstract class Payment { /** @pre amt >= 0 **/ public void setpaymentamount(int amt) {... public class CreditCardPayment extends Payment { /** @pre amt > = 250 **/ public void setpaymentamount(int amt) {... public class CashPayment extends Payment {... Payment p = new CashPayment(); p.setpaymentamount(5); p. = new CrediteCardPayment(); p.setpaymentamount(5); //oops! Strider mot förvillkoret!!

Betrakta nedanstående klasser: public class FamilyTester { public static void main(string[] args) { Grandparent person = new Grandparent(); person.whoami(); person = new Parent(); person.whoami(); person = new Child(); person.whoami(); public class Grandparent { public void whoami() { System.out.println("I'm a Grandparent"); public class Parent extends Grandparent { public String tostring() { return "I'm a Parent"; public class Child extends Parent { public void whoami() { System.out.println("I'm a Child"); Vad blir utskriften när main-metoden exekveras? I m a Grandparent I m a Grandparent I m a Child

Antag att klassen B är intresserad av alla tillståndsförändringar som sker i A. När instansvariabeln i A ändras skall B skriva ut det nya värdet på konsolen. Komplettera koden så att designmönstret Observer realiseras. public class A { private int value = 0; public void compute(int x) { value += x; //Some code that you have to write public int getvalue() { return value; public class B { private A theaobject; public B(A anaobject) { theaobject = anaobject; //Some code that you have to write //Some method you have to write public class A extends Observable { private int value = 0; public void compute(int x) { value += x; setchanged(); notifyobservers(); public int getvalue() { return value; public class B implements Observer { private A theaobject; public B(A anaobject) { theaobject = anaobject; theaobject.addobserver(this); public void update(observable o, Object arg) { System.out.println(theAObject.getValue());

Antag att man har tillgång till följande klasser för att representera geometriska figurer <<interface>> Shape Point {abstract #x: double #y: double -width:double -height: double Retangle -xradius:double -yradius: double Ellipse Klasserna är givna och får inte ändras. Antag att man vill kunna addera en tredje dimension till retangel- och ellipsobjekt så att de får en volym. De skall alltså även ha en höjd. Inför klassen Volume. Klassen skall bl.a ha metoden public double getvolume() För att göra detta skall du använda designmönstret Decorator enligt figuren nedan: <<interface>> Shape Point {abstract #x: double #y: double. -height:double Volume +getvolume(): double -width:double -height: double Retangle -xradius:double -yradius: double Ellipse a) Implementera klassen Volume i Java. b) Ge ett kodexempel som skapar en kub och skriver ut dess volym.

a) b) public class Volume implements Shape { private Shape obj; private double height; public Volume(Shape object, double height) { this.obj = obj; this.height = height; public double getwith() {return obj.getwith(); public double getlength() {return obj.getlength(); public double getarea() {return obj.getarea(); public void draw() { obj.draw(); public void erase() { obj.erase(); public void move(double dx, double dy) { obj.move(dx, dy); public void resize(double factor) { height = heigth*factor; obj.resize(factor); public double getvolume() { return obj.getarea()*height; Volume cub = new Volume( new Rectangle(0,0,10, 10), 10); System.out.println(cube.getVolume());