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

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

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

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

HT1 2015, FÖRELÄSNING

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

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

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

Integritetsprincipen. Objektorienterad modellering och diskreta strukturer / design

Tentamen i Objektorienterad modellering och design Helsingborg

Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061)

Tentamen i Objektorienterad modellering och design

Tentamen i Objektorienterad modellering och diskreta strukturer

UML-syntax. Lennart Andersson Datavetenskap, LTH. 20 januari 2013

Tentamen i Objektorienterad modellering och diskreta strukturer

Föreläsning 13 Innehåll

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

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

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

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

Tentamen i Objektorienterad modellering och diskreta strukturer

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

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

Föreläsning 14 Innehåll

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

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

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

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

Grammatik. BNF-grammatik

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

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

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

UML: Exempel. Ett modelleringsspråk. UML: Ansvar. UML: tre huvudanvändningar. Exempel: En klass position storlek. UML Unified Modelling Language

Objektorienterad Programmering (TDDC77)

Objekt-orienterad utveckling. Objektorienterad analys och design. Objekt-orienterad programutveckling. Objekt-orienterad analys och design: Litteratur

HT1 2015, FÖRELÄSNING

The billion dollar mistake

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

Lösningar till tentamen i EDAF25

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

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

Objektorienterad analys och design

Projekt 2 XL. Observer-mönstret

The billion dollar mistake

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

Lösningsförslag till tentamen

Programmering för språkteknologer II, HT2014. Rum

Tentamen Programmering fortsättningskurs DIT950

Alfabeten, strängar och språk. String

LÖSNINGSFÖRSLAG

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

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

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

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

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

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

DAT043 Objektorienterad Programmering

Tentamen, EDAA10 Programmering i Java

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

Tentamen i Programmeringsteknik I, ES,

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

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

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

LULEÅ TEKNISKA UNIVERSITET

LÖSNINGSFÖRSLAG. Tentamen. Objektorienterad modellering och design. EDA665, 4 poäng

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

Övning 5. TDA550 - Objektorienterad programvaruutveckling, fk

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

Objektorienterad Programmering (TDDC77)

TDDD78 Viktiga begrepp, del 2

Objekt-orienterad programmering. Klassbegreppet och C++ UML. UMLs fördelar

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

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

Konstruktion av klasser med klasser

Obligatorisk uppgift 5

Objektorienterad Programmering (TDDC77)

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

Laboration 2: Designmönster

Programmering A. Johan Eliasson

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

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

10. Mängder och språk

Mål Förklaring av termer

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

Föreläsning 5-6 Innehåll

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

Objektorienterad programutveckling, fk

Outline. Objektorienterad Programmering (TDDC77) Laborationsserie del två. Vad händer under HT2. Introduktion HT2 UML.

Classes och Interfaces, Objects och References, Initialization

12. Relationer och funktioner

Mål Förklaring av termer

/* * * Lösningsförslag tentamen DIT950 * Datum * */ /* * -1 - */ För samtliga gäller,se föreläsningsanteckningar.

Föreläsning 9: Arv och UML

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

Transkript:

Kursstruktur Objektorienterad modellering och diskreta strukturer / design Mål och innehåll Lennart Andersson kurs HT1 v1-4 HT1 v4-7 TP 1 HT2 v1-3 EDAF10 Principer och mönster, Diskreta Tentamen Projekt XL Projekt Computer strukturer EDA061 Principer och mönster, Projekt Computer Projekt XL Tentamen Reviderad 2012 09 04 2012 OMD 2012 F1-1 Vad är Objektorienterad modellering? OMD 2012 F1-2 Programmering utan OMD 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? 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.savetoreg(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 ); OMD 2012 F1-3 OMD 2012 F1-4

28 sidor senare Designuppgift 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) { 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. OMD 2012 F1-5 Tänkbara klasser OMD 2012 F1-7 Naturliga attribut SkåneTrafiken System Journey Region Zone Price Route Tariff Number Name Traveller Driver Region zonemap: ZoneMap tariff: Tariff Tariff tariff: float[] ArrayList<Zone> ZoneList Journey region: Region route: Route ZoneMap map: HashMap<String, Zone> Zone number: int name: String neighbours: ZoneList ZoneList Route Price price: float OMD 2012 F1-8 OMD 2012 F1-9

Nödvändiga metoder Region zonemap: ZoneMap tariff: Tariff price(route): Price Tariff tariff: float[] tariff(int): Price ZoneList zones: ArrayList<Zone> Journey region: Region route: Route price(): Price ZoneMap map: HashMap<String, Zone> Zone number: int name: String neighbours: ZoneList distanceto(zone): int Route distance(): int Price price: float Aktivitet Vid en motorcykeltävling registreras start- och sluttider på filer på 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. OMD 2012 F1-10 Punkt med dålig design... OMD 2012 F1-11... och sträcka public class Point { private double x, y; public Point(double x, double y) { this.x = x; this.y = y; public double getx() { return x; public void setx(double x) { this.x = x; // omissions OMD 2012 F1-13 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); OMD 2012 F1-14

Aktivitet Kursens syfte Vad är det som är dåligt i detta program? 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. OMD 2012 F1-15 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. OMD 2012 F1-17 OMD 2012 F1-16 Du kan redan... det mesta i programspråket Java vanliga datastrukturer skriva fungerande program OMD 2012 F1-18

Kurslitteratur Schema Modellering och design 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. v35 måndag 8.15 E:A föreläsning torsdag 10.15 E:A föreläsning v36 måndag 8.15 E:A föreläsning tisdag, onsdag eller fredag övning torsdag 10.15 E:A föreläsning laboration v37 måndag 8.15 E:A föreläsning tis-tor inst projektmöte tisdag, onsdag eller fredag övning torsdag 10.15 E:A föreläsning v38 tisdag, onsdag eller fredag övning v41 torsdag 10.15 E:A föreläsning OMD 2012 F1-19 Övningar vecka 37 39 OMD 2012 F1-20 Laboration med Eclipse På övningarna förväntas studenterna presentera lösningar till förelagda problem. Det är frivilligt att presentera lösningar, men den som är beredd att göra det får upp till 15% bonus vid första ordinarie tentamenstillfälle. Samarbete rekommenderas! Anmälan till schemapass sker via hemsidan. Innehåll refaktorisering UML-verktyget Utförande ej schemalagd utföres på egen hand redovisas ej OMD 2012 F1-21 OMD 2012 F1-22

Projekt Tentamen 1. Computer (vecka 37-38) 2. XL kalkylprogram (EDA061: vecka 39-42, EDAF10: vecka 44-46) Grupper om 4 studenter 3 obligatoriska designmöten med handledare Läroboken (Martin), UML-häftet och Diskreta strukturer får medföras på tentamen. OMD 2012 F1-23 Tidsbudget OMD 2012 F1-24 Redesign EDA061 antal moment tid 7 föreläsningar 28 3 övningar 24 2 projektuppgifter 46 1 laboration 2 tentamen 20 EDAF10 antal moment tid 15 föreläsningar 60 6 övningar 48 2 projektuppgifter 46 4 laborationer 14 tentamen 32 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); OMD 2012 F1-25 OMD 2012 F1-26

Redesign 3D-punkter... public class Segment { private Point point0, point1; public double length() { return point1.distanceto(point0); public interface Point { public double distanceto(point other); OMD 2012 F1-27... 2D-punkter... OMD 2012 F1-28... 3D-punkter public class Point2d implements Point { private double x, y; public class Point3d implements Point { private double x, y, z; 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); 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); OMD 2012 F1-29 OMD 2012 F1-30

Oförändrad Designprinciper för programmering public class Segment { private Point point0, point1; public double length() { return point1.distanceto(point0); Abstraktion Modularisering Integritet skydda representationen Lokalisering implementera operationer där operanderna finns OMD 2012 F1-31 Dataabstraktion OMD 2012 F1-32 Procedurell abstraktion 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; Före efter 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); OMD 2012 F1-33 OMD 2012 F1-34

Anderssons lokalitetsprincip, ALP Recept för ALP Operationer skall implementeras där operanderna är lättast tillgängliga. Undvik getters! OMD 2012 F1-35 Aktivitet OMD 2012 F1-36 Expr och Num Ett aritmetiskt uttryck är antingen ett tal eller en addition, en multiplikation, en subtraktion eller en division av två uttryck. Vilka klasser skall finnas? public interface Expr { public int value(); public class Num implements Expr { private int value; public int value() { return value; OMD 2012 F1-38 OMD 2012 F1-40

Num behöver en standardkonstruerare Aktivitet public class Num implements Expr { private int value; public Num(int value) { this.value = value; Implementera Add! public int value() { return value; Standardkonstruerare visas ej i fortsättningen. OMD 2012 F1-41 Expr Exempel UML OMD 2012 F1-42 1 1 + 2 1 + 2 3 1 2 + 3 new Num(1) new Add(new Num(1), new Num(2)) new Add( new Num(1), new Mul(new Num(2), new Num(3))) new Add( new Mul(new Num(1), new Num(2)), new Num(3)) Unified Modeling Language Booch, Rumbaugh, Jacobson, slutet av 90 talet många läroböcker och verktyg industristandard OMD 2012 F1-43 OMD 2012 F1-44

Diagram Ett klassdiagram Funktionell modell Användningsfall (Use cases) Statisk modell Klassdiagram Dynamisk modell Sekvensdiagram, tillståndsdiagram Segment + length(): double 2 Point2D - x: int - y: int + Point2D(int, int) + distanceto(point): double interface Point + distanceto(point): double Point3D - x: int - y: int - z: int + Point3(int, int, int) + distanceto(point): double OMD 2012 F1-45 Klasser OMD 2012 F1-46 Abstrakta klasser och gränssnitt Integer Integer compareto(object): int equals(object): boolean tostring(): String Integer {final + MAX INT: int = 0x7fffffff - value: int + Integer(int) + Integer(String) # clone(): Object + intvalue(): int + compareto(object): int + equals(object): boolean + hashcode(): int + tostring(): String + valueof(string): Integer Number {abstract intvalue(): int longvalue(): long floatvalue(): float doublevalue(): double interface Comparable compareto(object): int OMD 2012 F1-47 OMD 2012 F1-48

Generalisering Realisering Number Number interface Comparable Comparable Integer Integer Double Integer Integer OMD 2012 F1-49 Parametriserade klasser OMD 2012 F1-50 Associationer Company employs Person T List add(t) elementat(int): T List<String> Company company employee 1 * Person Company employs > Person OMD 2012 F1-51 OMD 2012 F1-52

Aggregering och sammansättning Beroende * * Course Student Union interface Observer { Object update(observable observable, Object object); Keyboard * Key interface Observer > Observable OMD 2012 F1-53 Aktivitet 11 OMD 2012 F1-54 Aktivitet 14 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) 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. OMD 2012 F1-55 OMD 2012 F1-56

Aktivitet 36 Aktivitet 39 Vilka klasser skall finnas? uttryck tal addition multiplikation subtraktion division interface Expr class Num implements Expr class Add implements Expr class Mul implements Expr class Sub implements Expr class Div implements Expr public class Add implements Expr { private Expr expr1, expr2; public int value() { return expr1.value() + expr2.value(); OMD 2012 F1-57 OMD 2012 F1-58