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

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

Kursstruktur. Objektorienterad modellering och diskreta strukturer / design. Programmering utan OMD. Vad är Objektorienterad modellering?

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

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

Kursstruktur. Objektorienterad modellering och diskreta strukturer / design. Vad är Objektorienterad modellering? Programmering utan OMD

Grafer. Objektorienterad modellering och design (EDAF25) Föreläsning 2. Grafer. Grafer Traversering Djupet först. Agenda. Grafer

HT1 2015, FÖRELÄSNING

HT1 2013, FÖRELÄSNING 14 (INFÖR TENTAN)

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

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

Kursombud. Objektorienterad modellering och diskreta strukturer / design. Agile? Designprinciper EDAF10 EDA061. Lennart Andersson. Grupper för projekt

Seminarierna Instruktioner. Övningarna Viktiga relationer

Information. Computer

Tentamen i Objektorienterad modellering och design Helsingborg

Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061)

Tentamen i Objektorienterad modellering och design Helsingborg

Tentamen i Objektorienterad modellering och design

Tentamen i Objektorienterad modellering och diskreta strukturer

HT1 2015, FÖRELÄSNING 14 (INFÖR TENTAN)

Tentamen i Programmeringsteknik I, ES,

Computer projekttid. Objektorienterad modellering och diskreta strukturer / design. Rapporter från verkligheten. EDAF10 i HT2

Tentamen i Objektorienterad modellering och diskreta strukturer

Tentamen i Objektorienterad modellering och diskreta strukturer

Integritetsprincipen. Objektorienterad modellering och diskreta strukturer / design

Introduktionsmöte Innehåll

Föreläsning 13 Innehåll

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

Föreläsning 17 UTBLICK: FORTSÄTTNINGSKURSER I DATAVETENSKAP + ANDROID

Grammatik. BNF-grammatik

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

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

Tentamen i EDAF oktober Skrivtid: Skriv bara på ena sidan av pappret tentorna kommer att scannas in, och endast framsidorna rättas.

HT1 2015, FÖRELÄSNING

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

EDAA01 Programmeringsteknik - fördjupningskurs

Alfabeten, strängar och språk. String

Förra föreläsningen. Dagens agenda. Command Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061)

Hisspresentation av programdesign Projektplan: Kommunikation i teknisk utbildning,

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

Tentamen, EDAA10 Programmering i Java

Övningsuppgifter i Objektorienterad modellering och design (OMD) Helsingborg EDAF25

Föreläsning 14 Innehåll

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

Objektorienterad modellering och diskreta strukturer. 13. Problem. Sven Gestegård Robertz. Datavetenskap, LTH

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

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

Programmering A. Johan Eliasson

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

Mål Förklaring av termer

Föreläsningsbilder EDAF10/EDA061 Ht 2015 HT1 2015, FÖRELÄSNING 3

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

Mål Förklaring av termer

DAT043 Objektorienterad Programmering

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

10. Mängder och språk

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

Tentamen, EDAA20/EDA501 Programmering

Översikt. Programmering tillämpningar och datastrukturer. Vad kursen täcker. Lärare. Rekommenderad litteratur. Kursmål 729G58 (HKGBB7)

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

12. Relationer och funktioner

Projekt 2 XL. Observer-mönstret

EDAA30 Programmering i Java - fortsättningskurs

12. Relationer och funktioner

Föreläsning 1 Innehåll

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

Obligatorisk uppgift 5

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

Arv (Inheritance) Multipelt arv finns i verkligheten. Överskuggning, metodbindning. Läsanvisning: ! Arv! Object, instanceof! Relationer!

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

Tentamen i Programmeringsteknik I,, KandMa/Fy,

Lösningsförslag till tentamen i EDA011 Programmeringsteknik för F, E, I, π och N

Tentamen, EDA501 Programmering M L TM W K V

Föreläsning 15: Repetition DVGA02

Inlämningsuppgift MiniPlotter

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

Objektorienterad Programmering (TDDC77)

Programmeringsteknik II

Kurs-PM HI2011, Programutveckling i funktionella och objektorienterande spra k, P3 VT17

Förra föreläsningen. Dagens agenda. Dagens agenda. Föreläsningsbilder EDAF10/EDA Ulf Asklund, Datavetenskap/LTH 1

LÖSNINGSFÖRSLAG

DELPROV 1 I DATAVETENSKAP

Objektorienterad Programmering (TDDC77)

Tentamen i Objektorienterad modellering och design Helsingborg

Institutionen för TENTAMEN CTH HT-14 Datavetenskap TDA550 DAG: TID: 14:00 18:00

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

TDDD78 Viktiga begrepp, del 2

The billion dollar mistake

TDIU01 (725G67) - Programmering i C++, grundkurs

Föreläsning 9: Arv och UML

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

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

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

Objektorienterad Programmering (TDDC77)

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)

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT / 33

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

Transkript:

Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061) HT1 2013, FÖRELÄSNING 1 EDAF10: Objektorienterad modellering och diskreta strukturer EDA061: Objektorienterad modellering och design HT1, 2013 Institutionen för Datavetenskap Ulf Asklund (modellering och design) Sven Gestegård Robertz (diskreta strukturer) Asklund 1

Kursstruktur 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? Asklund 2

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 ); 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) { Asklund 3

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. 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. Asklund 4

Tänkbara klasser Tänkbara klasser Asklund 5

Tänkbara klasser Tänkbara klasser Asklund 6

Naturliga attribut Naturliga attribut, forts. Asklund 7

Naturliga attribut, forts. Naturliga attribut, forts. Asklund 8

Naturliga attribut, forts. Naturliga attribut, forts. Asklund 9

Naturliga attribut, forts. Nödvändiga metoder Asklund 10

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. Lösning public class Time implements Comparable<Time> { private int sec; public Time difference(time other) public int compareto(time other) public String tostring() public Time(String time) Asklund 11

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 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); Asklund 12

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. 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. Asklund 13

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. Du kan redan det mesta i programspråket Java vanliga datastrukturer skriva fungerande program Förkunskapskrav: D&C: godkänd på EDA016 Programmeringsteknik samt godkänd på samtliga obligatoriska moment eller på tentamen i antingen EDAA01 eller EDA027 Övriga: godkänd i EDAA01 eller EDA027 Asklund 14

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. Ö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 upp till 10% bonus vid första ordinarie tentamenstillfälle. Samarbete rekommenderas! Anmälan till schemapass sker via hemsidan. Asklund 15

Laboration med Eclipse Innehåll refaktorisering UML-verktyget Utförande ej schemalagd utföres på egen hand redovisas ej Projekt 1 Computer (vecka 38-39) 2 XL kalkylprogram (EDA061: vecka 40-43, EDAF10: vecka 45-47) Grupper om 4 studenter 3 (1+2) obligatoriska designmöten med handledare Mailar in redovisningarna innan mötena. Asklund 16

Föreläsningarna Ej obligatoriska Visar andra exempel än i boken Går igenom olika delar/moment som sedan återfinns i projekten. Tentamen Läroboken (Martin), UML-häftet och Diskreta strukturer får medföras på tentamen. Asklund 17

Tidsbudget 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 Asklund 18

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); 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); Asklund 19

Redesign public class Segment { private Point point0, point1; public double length() { return point1.distanceto(point0); 3D-punkter public interface Point { public double distanceto(point other); Asklund 20

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); 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); Asklund 21

Oförändrad public class Segment { private Point point0, point1; public double length() { return point1.distanceto(point0); Anderssons lokalitetsprincip, ALP Operationer skall implementeras där operanderna är lättast tillgängliga. Asklund 22

Recept för ALP Undvik getters! Designprinciper för programmering Abstraktion Modularisering Integritet skydda representationen Lokalisering implementera operationer där operanderna finns Asklund 23

Dataabstraktion 00001001 01010010 00000000 int [] word = new int[size] Memory memory 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; 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); Asklund 24

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. Aktivitet Ett aritmetiskt uttryck är antingen ett tal eller en addition, multiplikation, subtraktion eller division av två uttryck. Vilka klasser skall finnas? uttryck interface Expr tal class Num implements Expr addition class Add implements Expr multiplikation class Mul implements Expr subtraktion class Sub implements Expr division class Div implements Expr Asklund 25

Expr och Num public interface Expr { public int value(); public class Num implements Expr { private int value; public int value() { return value; 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. Asklund 26

Aktivitet Implementera Add! public class Add implements Expr { private Expr expr1, expr2; public int value() { return expr1.value() + expr2.value(); 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)) Asklund 27

Asklund 28