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



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

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

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

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

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

TDA550 - Objektorienterad programvaruutveckling, fk

OOP Objekt-orienterad programmering

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

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

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

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

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

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

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

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

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

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

Objektorienterad Programmering (TDDC77)

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

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

Classes och Interfaces, Objects och References, Initialization

SMD 134 Objektorienterad programmering

TENTAMEN OOP

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

Lösningsförslag tentamen FYTA11 Java

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

Malmö högskola 2008/2009 CTS

Institutionen för TENTAMEN CTH VT-15 Datavetenskap TDA540. Tentamen för TDA540 Objektorienterad programmering

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Värde och typ? Problem. Vad skrivs ut? Referenssematik (1) Joachim von Hacht. Förklara (i detalj)! int x; int y; x = y = 1; out.println(x + ":" + y);

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

Objektorienterad Programmering (TDDC77)

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

Institutionen för TENTAMEN CTH HT-15 Datavetenskap TDA540. Tentamen för TDA540 Objektorienterad programmering

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

Subtyping och variance. Objekt-orienterad programmering och design Alex Gerdes, 2018

Objektorienterad programmering i Java

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

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

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

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

Tentamen i Programmeringsteknik I, ES,

Tentamen. Lösningsförslag

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

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

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Övning 5. TDA550 - Objektorienterad programvaruutveckling, fk

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

TENTAMEN OOP

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

Anteckningar 1: Grundläggande saker

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Påminnelse: en datatyp för bilder. Programmering. En datatyp för bilder. Spegelbild. hh.se/db2004

OMTENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13: 15

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

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

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

F4. programmeringsteknik och Matlab

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

Laboration A Objektsamlingar

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

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 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Föreläsning 5-6 Innehåll

Föreläsning 11: Rekursion

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

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

OOP Objekt-orienterad programmering

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

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

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

Lektion 1 - Programmeringsteknik F1, ht 2003

Objektorienterad programmering D2

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

Tentamen, EDAA20/EDA501 Programmering

2 b) Bodega bodegan = new Bodega(); double moms = 0.235; String namn = "Vargtass"; System.out.println(namn + " " + moms + bodegan.ändra(moms, namn); S

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

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

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

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

Högskolan Dalarna sid 1 av 5 Data-avdelningen Hans-Edy Mårtensson

OOP F1:1. Föreläsning 1. Introduktion till kursen OOP Vad är Java? Ett första Java-program Variabler Tilldelning. Marie Olsson

Programmering A. Johan Eliasson

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

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

Saker du ska kunna Föreläsning 13 & 14

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

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

Lite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output

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

Namn: Personnr: 1 2D1310 Programmeringsteknik i Java för B,V (1p) 13 januari 2001, kl Hjälpmedel: En Javabok. För betyget godkänt krävs at

Tentamen FYTA11 Javaprogrammering

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Transkript:

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 1 Pelle Evensen, Daniel Wetterbro 28 oktober 2009 Sammanfattning Denna vecka ska vi titta på skillnader mellan primitiva typer och referenstyper, typomvandling mellan primitiva typer samt referenser kontra kopior av referenser samt aliasing. Övningarna är graderade (något subjektivt) från lätt ( ) till svår ( ). Svårighetsgraden hos en övning behöver inte ha någonting med lösningens storlek att göra. 1 Referenser 1.1 Anropssemantik & alias Vad borde utdata bli när man kör main i klassen Vektor 1 på sidan 2? Skilj på primitiva typer, referenstyper och alias. Tänk på alias och om ni har call-by-value semantik eller (nästan) call-by-reference 2. Med lån från övningar av Joachim von Hacht. 1 Mer eller mindre tagen från tenta för Objektorienterad Programmering IT LP 1 2009 2 Java har egentligen inte call-by-reference-semantik alls; Det som förekommer är call by sharing. Se gärna http://en.wikipedia.org/wiki/call_by_value. Call by sharing kan man också kalla call by value of reference. 1

public class Vektor { private int x; private int y; private int z; public Vektor(int x, int y, int z) { this.x = x; this.y = y; this.z = z; public double norm() { return Math.sqrt(x * x + y * y + z * z); public void add(vektor v) { x += v.x; y += v.y; z += v.z; public void dumt(int x, int y, int z) { this.x = ++x; this.y = y + 1; this.z += z; public int getx() { return x; public int gety() { return y; public int getz() { return z; public String tostring() { return "Vektor, <x = " + x + ", y = " + y + ", z = " + z + ">"; Vektor a = new Vektor(1, 0, 0); Vektor b = new Vektor(0, 1, 0); Vektor c = a; int x = 1; int y = 2; int z = 3; a.add(b); b.add(b); c.add(c); c.dumt(x, y, z); System.out.println("a: " + a); System.out.println("b: " + b); System.out.println("c: " + c); System.out.println("x: " + x + "\ty: " + y + "\tz: " + z); Figur 1: Klassen Vektor. 2

1.2 Samma kontra lika... Avgör för klassen Referenser1 vad utskriften blir. Kör sedan programmet och se om svaret blev vad du trodde det skulle bli. Förklara varför det blev eller inte blev vad du trodde. För att få en tydlig(?) bild av vad svaren borde bli kan man slå i [GJSB05] 3. Specifikationen är bitvis ganska svårläst men den enda källa man i slutändan egentligen kan lita på. public class Referenser1 { stringrefs(); integerrefs(); private static void print(string exp, boolean b) { System.out.println(exp + " -> " + b); private static void printideq(object a, Object b, String aname, String bname) { System.out.println(aName + " == " + bname + " -> " + (a == b) + "\t" + aname + ".equals(" + bname + ") -> " + a.equals(b)); private static void integerrefs() { Integer i = new Integer(2); Integer j = new Integer(2); print("i >= j", i >= j); print("i == j", i == j); // Hmmm... print("i == 2", i == 2); private static void stringrefs() { String s3 = new String("False"); String s4 = new String("False"); printideq(s3, s4, "s3", "s4"); String s5 = "True"; String s6 = "Tr" + "ue"; printideq(s5, s6, "s5", "s6"); String s7 = "False"; String sx = "F"; String s8 = sx + "alse"; printideq(s7, s8, "s7", "s8"); Figur 2: Klassen Referenser1. 3 Finns gratis här: http://java.sun.com/docs/books/jls/ 3

1.3 Referens eller kopia? Betrakta klasserna SimpleSwapper, ValueHolder, ValueHolderSwapper2 och ValueHolderSwapper. Avgör vad utskriften blir då main körs i klassen Refval- Main. class SimpleSwapper { public void swap(integer x, Integer y) { Integer temp = x; x = y; y = temp; class ValueHolderSwapper { public void swap(valueholder v1, ValueHolder v2) { Integer tmp = v1.i; v1.i = v2.i; v2.i = tmp; Figur 3: Klassen SimpleSwapper. Figur 4: Klassen ValueHolderSwapper. class ValueHolderSwapper2 { public void swap(valueholder v1, ValueHolder v2) { v1 = new ValueHolder(v2.i); v2 = new ValueHolder(v1.i); Figur 5: Klassen ValueHolderSwapper. public class ValueHolder { public Integer i; public ValueHolder(Integer i) { this.i = i; Figur 6: Klassen ValueHolder. 4

public class RefvalMain { SimpleSwapper ss = new SimpleSwapper(); ValueHolderSwapper vhs = new ValueHolderSwapper(); ValueHolderSwapper2 vhs2 = new ValueHolderSwapper2(); int a = 1; int b = 2; ss.swap(a, b); System.out.println("a= " + a + " b= " + b); Integer c = new Integer(1); Integer d = new Integer(2); ss.swap(c, d); System.out.println("c= " + c + " d= " + d); ValueHolder v1 = new ValueHolder(a); ValueHolder v2 = new ValueHolder(b); vhs.swap(v1, v2); System.out.println("a= " + v1.i + " b= " + v2.i); vhs2.swap(v1, v2); System.out.println("a= " + v1.i + " b= " + v2.i); Figur 7: Klassen RefvalMain. 2 Typomvandling Dessa problem är lånade från [BG05]. 2.1 Widening och narrowing I Avgör vad som skrivs ut när man kör main i klassen Casting1. Om det inte blev vad du trodde, härled vilken typ varje deluttryck har. Antag att a, b, c är av samma typ, att a + b är av typen int och att a + b + c är samma sak som (a + b) + c vilket bör få samma typ som a + b... Vilken precision har (de primitiva) typerna 4 i Java? Vilka intervall kan de representera? public class Casting1 { final long PARSEC = 30587 * 1000000000 * 1000; final long M PER KM = 1000; System.out.println(PARSEC / M PER KM); Figur 8: Klassen Casting1. 4 Se 4.2.1 i http://java.sun.com/docs/books/jls/third_edition/html/typesvalues.html 5

2.2 Widening och narrowing II Försök lista ut vad utskriften blir då man kör main i Casting2. Om det inte blev som ni trodde, klura igen på vilka intervall de primitiva typerna i Java kan representera. Här kan också kunskap om 2-komplementform vara bra att ha. public class Casting2 { System.out.println(cast(minusOne())); private static char minusone() { return (char) 1; private static int cast(char v) { return v; Figur 9: Klassen Casting2. Referenser [BG05] Joshua Bloch and Neal Gafter. Java puzzlers: traps, pitfalls, and corner cases. Addison-Wesley, Boston, Mass., 2005. [GJSB05] James Gosling, Bill Joy, Guy Steele, and Gilad Bracha. The Java Language Specification, Third Edition. The Java Series. Addison-Wesley, Boston, Mass., 2005. 6