34
Föreläsningsbilder EDAF10/EDA061 ht 2015 Ulf Asklund 1 Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061) HT1 2015, FÖRELÄSNING 1 Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund EDAF10: Objektorienterad modellering och diskreta strukturer EDA061: Objektorienterad modellering och design HT1, 2015 Institutionen för Datavetenskap Ulf Asklund (modellering och design) Sven Gestegård Robertz (diskreta strukturer)

EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 1

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061) HT1 2015, FÖRELÄSNING 1

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

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

HT1, 2015 Institutionen för Datavetenskap

Ulf Asklund (modellering och design)

Sven Gestegård Robertz (diskreta strukturer)

Page 2: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 2

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Kursstruktur EDAF10: Objektorienterad modellering och diskreta strukturer

EDA061: Objektorienterad modellering och design

lv1 lv2 lv3 lv4 lv5 lv6 lv7 lv8 T lv1 lv2 lv3

Övningar OMD Övningar DS

Labbar DS

R Projekt1

R R Projekt2

R R Projekt2

Föreläsningar OMD Föreläsningar DS F F T

061 F10 Alla

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Diskreta strukturer

•  Logik: logiska uttryck och resonemang –  Satslogik (Boolesk algebra, digitalteknik) –  Predikatlogik –  Härledning / bevis

•  Mängdlära: funktioner och relationer –  "That is, a Datomic database is a relation where each tuple is a Datom.

(- - -) Queries and rules output relations with tuples of varying arity...” •  Formella språk: reguljära uttryck och grammatiker •  Beräkningsbarhet: uttryckskraften i formella språk

•  Introduktion (av teoretisk bakgrund) till fortsättningskurser i –  Artificiell intelligens –  Naturligt språkbehandling –  Kompilatorteknik –  Funktionsprogrammering –  Databaser

Page 3: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 3

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Vad är Objektorienterad modellering?

Modellering av verkligheten med intelligenta objekt och design av program som implementerar modellen. •  Vilka klasser skall finnas?

•  Vilka metoder skall de tillhandahålla? •  Hur skall de paketeras?

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Programmering utan OMD public static void generateCode(Instruction c) { switch (c.opCode) { case 0: //MOV

if (!(c.arg1 instanceof Current || c.arg1 instanceof Next) && !(c.arg2 instanceof Current || c.arg2 instanceof Next)) {

out.writeBytes(”mov ” + code.convert(c.arg1) + ” , ” + code.convert(c.arg2) + ”\n”); } else if ((c.arg1 instanceof IntConst || c.arg1 instanceof BoolConst) && c.arg2 instanceof Current) {

out.writeBytes(”mov ” + code.convert(c.arg1)+”, ”+ code.saveTo Reg(c.arg1) +”\n”);

out.writeBytes(”set ” + code.convert(c.arg2,staticlevel−1) +” , ” + code.saveToReg(c.arg2) +”\n”); out.writeBytes(”st ” + code.saveToReg(c.arg1) + ” , ” +”[” + code.saveToReg(c.arg2) + ”]\n”); } else if((c.arg1 instanceof Temp) && c.arg2 instanceof Current) { out.writeBytes(”set ” + code.convert(c.arg2,staticlevel−1) + ” , ” + code.saveToReg(c.arg2) +”\n”); out.writeBytes(”st ” + code.saveToReg(c.arg1) + ” , ” + ”[” + code.saveToReg(c.arg2) +”]\n”); } else if(c.arg1 instanceof Current && c.arg2 instanceof Temp) { out.writeBytes(”set ” + code.convert(c.arg2) + ” , ” + code.saveToReg(c.arg2) +”\n”);

out.writeBytes(”ld ” + ”[”+ code.saveToReg(c.arg2) +”]” + ” , ” + code.saveToReg(c.arg1) +”\n”); } else if(c.arg1 instanceof Current && c.arg2 instanceof Current) { if(!(c.arg1.toString().equals(c.arg2.toString()))) { out.writeBytes(”set ” + code.convert(c.arg1,staticlevel−1) + ” , ”+ code.saveToReg(c.arg2) +”\n”);

Page 4: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 4

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

28 sidor senare case 20: //OR

if (c.arg1 instanceof BoolConst) { reg1 = code.saveToReg(c.arg1);

out.writeBytes(”mov ” + code.convert(c.arg1) + ” , ” + reg1 + ”\n”); } else if (c.arg1 instanceof Current) { reg1 = code.saveToReg(c.arg1);

out.writeBytes(”set ” + code.convert(c.arg1, staticlevel−1) + ” , ” + reg1 +”\n”);

out.writeBytes(”ld [” + reg1 +”] , ” + reg1 + ”\n”); } if(c.arg2 instanceof Current) { reg2 = code.saveToReg(c.arg2);

out.writeBytes(”set ” + code.convert(c.arg2, staticlevel−1) + ” , ” + reg2 +”\n”);

out.writeBytes(”ld [” + reg2 + ”] , ” + reg2 + ”\n”); } if(!(c.arg1 instanceof Temp)) { out.writeBytes(”or ” + reg1 +” , ”); } else { out.writeBytes(”or ” + code.convert(c.arg1) + ” , ”); } if(c.arg2 instanceof Current) {

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Designuppgift

Skånetrafiken har ett system för att ta betalt för resor i regionen, se www.skanetrafiken.se. Regionen är indelad i ett hundratal zoner och priset för en resa beror på hur många zoner resvägen passerar och framgår av en prislista.

En zon har både ett nummer och ett namn. Vanliga resenärer använder nästan alltid namnet medan en bussförare kanske föredrar numret när resvägen skall registreras. Ibland vill man inte åka närmaste vägen utan via en eller flera andra zoner.

Page 5: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 5

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Designuppgift, forts.

Skånetrafiken har ett system för att ta betalt för resor i regionen, se www.skanetrafiken.se. Regionen är indelad i ett hundratal zoner och priset för en resa beror på hur många zoner resvägen passerar och framgår av en prislista.

En zon har både ett nummer och ett namn. Vanliga resenärer använder nästan alltid namnet medan en bussförare kanske föredrar numret när resvägen skall registreras. Ibland vill man inte åka närmaste vägen utan via en eller flera andra zoner.

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Tänkbara klasser

Page 6: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 6

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Tänkbara klasser

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Tänkbara klasser

Page 7: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 7

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Tänkbara klasser

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Naturliga attribut

Page 8: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 8

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Naturliga attribut, forts.

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Naturliga attribut, forts.

Page 9: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 9

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Naturliga attribut, forts.

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Naturliga attribut, forts.

Page 10: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 10

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Naturliga attribut, forts.

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Naturliga attribut, forts.

Page 11: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 11

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Nödvändiga metoder

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Aktivitet Vid en motorcykeltävling registreras start- och sluttider på filer med följande format.

StartNr; Starttid StartNr; Sluttid 1; 12.00.00 3; 13.05.06 2; 12.01.00 2; 13.15.16 3; 12.02.00 1; 13.23.34

Ett sorteringsprogram läser filerna och producerar följande resultat.

StartNr; Totaltid; Starttid; Sluttid 1; 1.23.34; 12.00.00; 13.23.34 2; 1.14.16; 12.01.00; 13.15.16 3; 1.03.06; 12.02.00; 13.05.06

Konstruera en klass som kan användas för att representera tider i start- och resultatlistor.

Page 12: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 12

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Punkt med dålig design public class Point {

private double x, y; public Point(double x, double y) { this.x = x; this.y = y; }

public void setX(double x) {

this.x = x; } public double getX() {

return x; } // omissions

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

… och sträcka public class Segment {

private Point point0, point1; // Standard constructor omitted public double length() { double dx = point1.getX()−point0.getX(); double dy = point1.getY()−point0.getY(); return Math.sqrt(dx∗dx+dy∗dy); }

}

Page 13: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 13

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Aktivitet

Vad är det som är dåligt i detta program?

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Aktivitet

Vad är det som är dåligt i detta program? 1.  Point saknar intelligens. 2.  Point saknar integritet; lämnar ut attributen i onödan.

3.  Segment är onödigt beroende av Point; man kan inte byta till 3 dimensioner utan att ändra båda klasserna.

Page 14: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 14

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Kursens syfte

Kursen ger förmåga till hållbar och resursmedveten utveckling av program som kan återanvändas och modifieras med hänsyn till förändrade krav i ett industriellt sammanhang.

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Kursens mål Efter genomgången kurs ska studenten kunna

•  lokalisera och känna igen användning av gängse designprinciper och designmönster i givna program,

•  utforma och implementera objektorienterade program med många klasser och några paket,

•  välja och implementera lämpliga designmönster i typiska problem,

•  använda centrala delar av en integrerad utvecklingsmiljö för design, implementering och omstrukturering av program,

•  beskriva programdesign med UML (Unified Modeling Language),

•  utvärdera en programdesign med avseende på designprinciper samt

•  skriva program som är lätta att förstå för den som behöver göra modifieringar.

Page 15: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 15

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Du kan redan… •  det mesta i programspråket Java •  vanliga datastrukturer •  skriva fungerande program

Förkunskapskrav:

•  godkänd på EDA016, Programmeringsteknik (eller motsvarande grundkurs) samt

•  godkänd på samtliga obligatoriska moment eller på tentamen i antingen EDAA01 eller EDA027 Programmeringsteknik – fördjupningskurs.

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Du kan redan…

Klass

Objekt

Attribut

Metod Metodanrop

Arv Gränssnitt

Paket

Dynamisk bindning

Virtuella metoder, polymorfism

Abstrakt klass

Abstrakt metod

Statisk metod

Statiskt attribut

Eclipse

Förväntad förkunskap

Repeteras inte i denna kurs

Page 16: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 16

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Nu ska du lära dig…

Klass

Objekt

Attribut

Metod Metodanrop

Arv Gränssnitt

Paket

Dynamisk bindning Virtulla metoder, polyformism

Abstrakt klass

Abstrakt metod

Virtuell metod

Statisk metod

Statiskt attribut

Eclipse

UML Java

Mönster

Principer Design Arkitektur

(Metodik)

O-O

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Fortsätt tillämpa i…

Klass

Objekt

Attribut

Metod Metodanrop

Arv Gränssnitt

Paket

Dynamisk bindning Virtulla metoder, polyformism

Abstrakt klass

Abstrakt metod

Virtuell metod

Statisk metod

Statiskt attribut

Eclipse

UML Java

Mönster

Principer Design (Metodik)

•  PVG-kursen

•  Coachning av programvaruteam

•  Resten av livet J

Arkitektur

O-O

Page 17: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 17

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Kurslitteratur •  Robert C. Martin: Agile Software Development -

Principles, Patterns, and Practices, Prentice Hall, 2003, ISBN 0-13-597444-5. Ny upplaga 2011.

•  Lennart Andersson: UML-syntax, Datavetenskap LTH, 2012. Finns på kurshemsidan.

•  Lennart Andersson: Diskreta strukturer, Datavetenskap LTH, 2010. (EDAF10). Finns på hemsidan.

•  Övnings-, laborations- och projektuppgifter publiceras på hemsidan.

Utöver formell kurslitteratur: •  Föreläsningsbilder publiceras på hemsidan.

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Övningar •  På övningarna förväntas studenterna presentera

lösningar till uppgifterna. •  Det är frivilligt att presentera lösningar, men den som är

beredd att göra det får bonus vid första ordinarie tentamenstillfälle.

•  Samarbete rekommenderas!

Anmälan till schemapass sker via hemsidan.

Page 18: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 18

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Två projekt •  1 Computer (lv2-4) •  2 XL – kalkylprogram

(EDA061: lv4-7, EDAF10: vecka 1-3 HT2)

•  Grupper om 4 studenter

•  3 (1+2) obligatoriska designmöten med handledare •  Mailar in redovisningarna innan mötena.

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Föreläsningarna •  Ej obligatoriska •  Visar andra exempel än i boken •  Går igenom olika delar/moment som sedan återfinns i

projekten.

Page 19: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 19

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Tentamen Får medföras på tentamen: •  Läroboken (Martin) •  UML-häftet

•  Andersson, ”Diskreta strukturer” •  Java snabbreferens

Får EJ medföra •  Labbar, övningar eller projektuppgifter

•  Utdelade föreläsningsanteckningar •  Egna sammanfattningar och anteckningar

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Tidsbudget

Page 20: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 20

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Punkt med dålig design (Kommer ni ihåg…) public class Point {

private double x, y; public Point(double x, double y) { this.x = x; this.y = y; }

public void setX(double x) {

this.x = x; } public double getX() {

return x; } // omissions

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

… och sträcka public class Segment {

private Point point0, point1; // Standard constructor omitted public double length() { double dx = point1.getX()−point0.getX(); double dy = point1.getY()−point0.getY(); return Math.sqrt(dx∗dx+dy∗dy); }

}

Page 21: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 21

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Redesign public class Point {

private double x, y; public double distanceTo(Point other) { double dx = this.x − other.x; double dy = this.y − other.y; return Math.sqrt(dx ∗ dx + dy ∗ dy); }

}

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Redesign public class Segment {

private Point point0, point1;

public double length() { return point1.distanceTo(point0); }

}

Page 22: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 22

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

3D-punkter… public interface Point {

public double distanceTo(Point other); }

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

…2D-punkter… public class Point2d implements Point {

private double x, y; public double distanceTo(Point point) { Point2d other = (Point2d) point; double dx = this.x − other.x; double dy = this.y − other.y; return Math.sqrt(dx ∗ dx + dy ∗ dy); }

}

Page 23: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 23

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

…3D-punkter public class Point3d implements Point {

private double x, y, z; public double distanceTo(Point point) { Point3d other = (Point3d) point; double dx = this.x − other.x; double dy = this.y − other.y; double dz = this.z − other.z; return Math.sqrt(dx ∗ dx + dy ∗ dy + dz ∗ dz); }

}

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Oförändrad public class Segment {

private Point point0, point1; public double length() { return point1.distanceTo(point0); }

}

Page 24: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 24

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Anderssons lokalitetsprincip, ALP

Operationer skall implementeras där operanderna är lättast tillgängliga.

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Recept för ALP

Undvik getters!

Page 25: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 25

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Designprinciper för programmering

•  Abstraktion •  Modularisering

•  Integritet – skydda representationen •  Lokalisering – implementera operationer där

operanderna finns

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Dataabstraktion •  Memory memory •  int [] word = new int[size]

public class Memory { private int [] word = new int [1024]; public int getValue(int address) { return word[address]; } public void setValue(int address, int value) { word[address] = value; } }

Page 26: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 26

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Procedurell abstraktion

if (c.arg1 instanceof Current) { reg1 = code.saveToReg(c.arg1); out.writeBytes(”set ” + code.convert(c.arg1, staticlevel−1) ” , ” + reg1 +”\n”); out.writeBytes(”ld [” + reg1 +”] , ” + reg1 + ”\n”);

} if (c.arg2 instanceof Current) { reg2 = code.saveToReg(c.arg2); out.writeBytes(”set ” + code.convert(c.arg2, staticlevel−1) ” , ” + reg2 +”\n”);

c.arg1.generate(code, reg1); c.arg2.generate(code, reg2);

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Aktivitet - Aritmetiska uttryck Ett aritmetiskt uttryck är antingen ett tal eller en addition, multiplikation, subtraktion eller division av två uttryck.

Modellera aritmetiska uttryck med substantivmetoden och förse klasserna med en metod som beräknar uttryckets värde.

Page 27: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 27

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Expr och Num public interface Expr {

public int value(); } public class Num implements Expr {

private int value; public int value() { return value; }

}

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Num behöver en standardkonstruerare public class Num implements Expr {

private int value; public Num(int value) { this.value = value; } public int value() { return value; }

} Standardkonstruerare visas ej i fortsättningen.

Page 28: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 28

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Aktivitet

Implementera Add!

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Expr - Exempel

•  1 new Num(1) •  1+2 new Add(new Num(1), new Num(2)) •  1+2*3 new Add(

new Num(1), new Mul(new Num(2), new Num(3)))

•  1*2+3 new Add( new Mul(new Num(1), new Num(2)), new Num(3))

Page 29: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 29

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

UML •  Unified Modeling Language •  Booch, Rumbaugh, Jacobson, slutet av 90–talet •  Många läroböcker och verktyg

•  Industristandard

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Diagram

•  Funktionell modell — Användningsfall (Use cases) •  Statisk modell — Klassdiagram, Objektdiagram

•  Dynamisk modell — Sekvensdiagram, Tillståndsdiagram

Page 30: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 30

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Ett klassdiagram

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Klasser

Page 31: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 31

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Abstrakta klasser och gränssnitt

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Generalisering

Page 32: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 32

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Realisering

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Parametriserade klasser

Page 33: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 33

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Associationer

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Aggregering och sammansättning

Page 34: EDAF10: Objektorienterad modellering och diskreta ...fileadmin.cs.lth.se/cs/Education/EDAF10/2015/lectures/...Skånetrafiken har ett system för att ta betalt för resor i regionen,

Föreläsningsbilder EDAF10/EDA061 ht 2015

Ulf Asklund 34

Datavetenskap/LTH | EDAF10/EDA061 HT2015 | Ulf Asklund

Beroende interface Observer {

Object update(Observable observable, Object object); }