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

Relevanta dokument
Föreläsning 1, vecka 6: Abstraktion genom objektorientering

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

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

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

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

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

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

Monday, November 16, Senaste Labben

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

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

Föreläsning 2, vecka 8: Repetition

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

Tentamen i Objektorienterad programmering

Tentamen i Objektorienterad programmering

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

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

Exempel på användning av arv: Geometriska figurer

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

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

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

Föreläsning 1, vecka 7: Rekursion

Lektion Händelsehanterare

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

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

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

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

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

Laboration 4: Game of Life

Lab5 för prgmedcl04 Grafik

Föreläsning 6. Top-Down Design Parameteröverföring

Exempel på spelprogrammering i java.

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

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

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

Top-Down Design Parameteröverföring

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

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

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

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

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.

DAT043 - föreläsning 8

OOP Objekt-orienterad programmering

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

Parallellism, återblick

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

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

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

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

Lösningsförslag tentamen FYTA11 Java

Objektorienterad Programmering (OOP) Murach s: kap 12-16

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

Tentamen FYTA11 Javaprogrammering

Laboration 3, uppgift En klass för en räknare

PROGRAMMERINGSTEKNIK TIN212

Objektorienterad Programmering (TDDC77)

Laboration 15 Grafiskt användargränssnitt

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

DAT043 - Föreläsning 7

Föreläsning 15: Repetition DVGA02

Classes och Interfaces, Objects och References, Initialization

The Last Adventure. Innehåll. Objektorientering. Språket Java. Java - Paket. Java - synlighet. Den sista lektionen. Repetition.

Objektorienterad Programmering DAT043. Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Lösningar för tenta 3 DAT043,

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

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

Objektorienterad programvaruutveckling, fk, TDA550. Exempeltentamen

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

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

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

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

Kopiering av objekt i Java

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

EDAF10: Objektorienterad modellering och diskreta strukturer EDA061: Objektorienterad modellering och design

LiTHehack? Här? lithehack se koma Tisdagar och torsdagar

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

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

EDAF10: Objektorienterad modellering och diskreta strukturer EDA061: Objektorienterad modellering och design. Vad är Objektorienterad modellering?

Länkade strukturer, parametriserade typer och undantag

Tentamen i Objektorienterad programmering E

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

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)

Föreläsning 2. Länkad lista och iterator

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

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

Lösningsförslag till tentamen

tentaplugg.nu av studenter för studenter

Projekt 2 XL. Observer-mönstret

Grafiskt användargränssnitt (GUI-Graphical User Interface) intro Komponenter

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

Arv och Grafiska Användargränssnitt

DEL 1 För att få godkänt på tentan (betyg 3) måste du lösa minst fem av sju uppgifter i denna del.

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

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

Transkript:

TDA 548: Grundläggande Programvaruutveckling Föreläsning 2, vecka 6: Tillstånd i objektorienterade program (och mera interface) Magnus Myréen Chalmers, läsperiod 1, 2016-2017

Terminologi Vad är en klass? Vad är en instans? Vad är ett objekt? Vad är en klassvariabel? Vad är en instansvariabel?

Från förra föreläsningen

Black box tänkande add Rationellt tal sub mul tostring Användaren behöver inte veta vad som finns inuti.

public class Rational { Vad syns utifrån? private int n; private int d; // alltid d > 0 private int gcd(int a, int b) { if (b == 0) { return a; return gcd(b, a % b); public Rational(int n, int d) { if (d < 1) { n = - n; d = - d; else if (d == 0) { d = d / d; // intentionally divide by zero int g = 1; if (n > 0) { g = gcd(n,d); if (n < 0) { g = gcd(- n,d); this.n = n / g; this.d = d / g; public Rational add(rational r) {...

public class Rational { Vad syns utifrån? private int n; private int d; // alltid d > 0 private int gcd(int a, int b) { if (b == 0) { return a; return gcd(b, a % b); public Rational(int n, int d) { if (d < 1) { n = - n; d = - d; else if (d == 0) { d = d / d; // intentionally divide by zero int g = 1; if (n > 0) { g = gcd(n,d); if (n < 0) { g = gcd(- n,d); this.n = n / g; this.d = d / g; public Rational add(rational r) {...

public class Rational { vi kan förbättra lokalt! private BigInteger n; private BigInteger d; public Rational(int n, int d) { this.n = new BigInteger(String.valueOf(n)); this.d = new BigInteger(String.valueOf(d)); BigInteger g = this.n.gcd(this.d); this.n = this.n.divide(g); this.d = this.d.divide(g); private Rational(BigInteger n, BigInteger d) { BigInteger g = n.gcd(d); this.n = n.divide(g); this.d = d.divide(g); ny intern representation ny gömd constructor public Rational add(rational r) { // n1 = this.n * r.d + r.n * this.d BigInteger n1 = this.n.multiply(r.d).add(r.n.multiply(this.d)); BigInteger d1 = this.d.multiply(r.d); return new Rational(n1,d1);

Objektorientering Var passar funktionaliteten? Var implementerar man hur linjer ritas? Main DrawProg DrawableStack Drawable Line Rectangle Oval Kom ihåg: varje objekt ska vara bra på en sak.

Resten av föreläsningen Tillstånd i objektorienterade program Enumerate Mera om interface, flera exempel, mm. och quiz?

Ovanliga klasser Point3D, Line3D, Many3D, osv public Point3D rotate(double xy_angle, double yz_angle) { double x1 = Rotate2D.getX(x,y,xy_angle); double y1 = Rotate2D.getY(x,y,xy_angle); double y2 = Rotate2D.getX(y1,z,yz_angle); double z2 = Rotate2D.getY(y1,z,yz_angle); return new Point3D(x1,y2,z2); Skapar ny instans. Varför inte ändra på instansvariablerna?

Immutable = går ej att ändra public class Point3D { private double x, y, z; Efter att det har skapats går det inte att ändra. public Point3D(double x, double y, double z) { this.x = x; this.y = y; this.z = z; public double getx() { return x; public double gety() { return y; public double getz() { return z; public Point3D rotate(double xy_angle, double yz_angle) { double x1 = Rotate2D.getX(x,y,xy_angle); double y1 = Rotate2D.getY(x,y,xy_angle); double y2 = Rotate2D.getX(y1,z,yz_angle); double z2 = Rotate2D.getY(y1,z,yz_angle); return new Point3D(x1,y2,z2);

Varför immutable? Svar: med immutable objekt kan man glömma allt vi lärt oss om referensvärden! Man kan tänka att immutable objekt är primitiva typer. med undantaget att man bör använda equals istället för ==

Man kan tänka att immutable objekt är primitiva typer. Primitiva: int a = 1; int b = 4; a = 800; b = a; a = 400; System.out.println(b); Referensvärden: int[] a = { 1, 2, 3 ; int[] b = { 4, 5, 6 ; a[0] = 800; b = a; a[0] = 400; System.out.println(b[0]); Immutable: Point3D a = new Point3D(1,2,3); Point3D b = new Point3D(5,6,7); a = a.rotate(0.5,0); b = a; a = a.rotate(0.5,0); System.out.println(b);

vad går fel om man inte gör dem immutable? Genomgång av övningen

vad går fel om man inte gör dem immutable? Svar: man uppdaterar i mistag fel saker Dellösning: att använda clone Varför är det här en lösning? De pekar inte längre på samma objekt. Genomgång av övningen

Mutable eller immutable? Line String Exception Rational Drawable Scanner BigInteger DrawableStack

Google: ett viktigt ord att komma ihåg.

Resten av föreläsningen Tillstånd i objektorienterade program Enumerate Mera om interface, flera exempel, mm. och quiz?

klasser, interface, mm. Vi har sett: public class MyClass {... public interface MyInterface {... Det finns också: public enum MyEnum {... som behövs i nästa lab (vecka 7). En enum definierar en enumerated type. public enum Direction { RIGHT, LEFT, UP, DOWN

enum En enum definierar en enumerated type. public enum Direction { RIGHT, LEFT, UP, DOWN En enum definierar en ny typ. Typen har endast värdena: RIGHT, LEFT, UP och DOWN Dessa är inte referensvärden (referenstyper). Man kan programmera vanligt med dem: Direction d = RIGHT; d = LEFT; if (d == LEFT) {...

Resten av föreläsningen Tillstånd i objektorienterade program Enumerate Mera om interface, flera exempel, mm. och quiz?

Vad är interface? Interface är en lista av metodsignaturer. Interface är en typ precis some klasser är typer. public interface MyInterface { public void dosomething(); Interface används för att abstrahera över objekt. För att bära metoder runt.

Hur skapar man en instans? Man typkonverterar från objekt som implementerar interfacet. Demo. DoStuff d = new DoStuff(); MyInterface m = d; d.dosomething(); public class DoStuff implements MyInterface { public void dosomething() { System.out.println("I'm doing stuff");

det finns ett annat sätt också! Man kan skapa en anonym (namnlös) klass på följande sätt. MyInterface other = new MyInterface() { @Override public void dosomething() { System.out.println("Doing something else."); ;

och ett till! MyInterface other = (() -> System.out.println("Doing something new!")); Det här Javas version av Lambda uttryck. Lambda uttryck = namnlösa funktioner

Hur använder man interface? Från tidigare: Interface används för att abstrahera klasser. För att bära metoder runt. Javas API använder sig av interface: Knappar mm har lyssnare Datastrukturer är abstraherade med interface Iteration: Javas version av foreach mm. Mera om dessa i följande exempel

Exempel: en knapp klass Vi ska skriva ett objekt som representerar knappar i ett grafiskt användargränssnitt. ( Javas grafiska användargränssnittsverktyg är mera ) komplicerade, men vårt exempel visar principerna. Design: vad ska ett Knapp-objekt göra?

public class MyButton { int x, y; int w, h; String l; MyInterface listener; public MyButton(String l, int x, int y, int w, int h, MyInterface listener) { this.listener = listener; this.l = l; this.x = x; this.y = y; this.w = w; this.h = h; public void draw(graphics g) { g.setcolor(color.yellow); g.fillrect(x,y,w,h); g.setcolor(color.black); g.drawrect(x,y,w,h); g.drawstring(l,x + 5,y + 15); public void click(int xi, int yi) { if ( x <= xi && xi <= x+w && y <= yi && yi <= y+h) { listener.buttonclicked(); Knapp klassen tar in en instans av MyInterface. På det här sättet behöver inte knapp programmeraren veta vad som ska hända när man trycker på knappen. Viktigare: knappen kan användas för flera olika program. Återanvändning! Vi anropar metoden i denna instans vid click.

private class MainPanel extends JPanel implements MouseListener { private MyButton b1; private MyButton b2; Två knappar skapas. private Color bg_color; public MainPanel() { this.addmouselistener(this); b1 = new MyButton("Click",40,40,100,30, () -> bg_color = Color.RED); b2 = new MyButton("Clock",40,80,100,30, () -> bg_color = Color.BLUE); public void paintcomponent(graphics g) { super.paintcomponent(g); g.setcolor(bg_color); g.fillrect(0,0,this.getwidth(),this.getheight()); b1.draw(g); b2.draw(g); public void mousepressed(mouseevent e) { b1.click(e.getx(),e.gety()); b2.click(e.getx(),e.gety()); repaint(); public void mousereleased(mouseevent e) { public void mouseclicked(mouseevent e) { public void mouseentered(mouseevent e) { public void mouseexited(mouseevent e) { De byter färgen på bakgrunden. Knapparna ritas. När panelen clickas skickar vi klicket till knapparna.

En lyssnare Knappar och andra user-interface delar har lyssnare. Se Javas API för JButton och titta på ActionListener. Läs koden som kom med övningarna / labbarna.

Javas listor Idé: listor kan implementeras på flera sätt varför binda sig till en viss klass? Google: Java API List Implementationen kan bytas till LinkedList eller Stack utan ändringar till resten av koden! List<MyInterface> l = new ArrayList(); l.add(m); l.add(() -> System.out.println("Hi!")); l.add(m); l.add(() -> System.out.println("Ho!")); l.add(() -> System.out.println("Hu?"));