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

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. Vad är Objektorienterad modellering? Programmering utan OMD

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

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

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

Information. Computer

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

Tentamen i Objektorienterad modellering och design Helsingborg

Seminarierna Instruktioner. Övningarna Viktiga relationer

Tentamen i Objektorienterad modellering och design Helsingborg

Tentamen i Objektorienterad modellering och design

Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061)

Integritetsprincipen. Objektorienterad modellering och diskreta strukturer / design

Tentamen i Objektorienterad modellering och diskreta strukturer

Föreläsning 13 Innehåll

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

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

Tentamen i Objektorienterad modellering och diskreta strukturer

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 14 (INFÖR TENTAN)

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

Tentamen i Objektorienterad modellering och diskreta strukturer

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

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

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

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

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

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

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

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

Objektorienterad analys och design

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

Objektorienterad Programmering (TDDC77)

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

Grammatik. BNF-grammatik

HT1 2015, FÖRELÄSNING

Projekt 2 XL. Observer-mönstret

The billion dollar mistake

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

Alfabeten, strängar och språk. String

Programmering A. Johan Eliasson

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

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

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

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

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77)

The billion dollar mistake

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

Tentamen i Programmeringsteknik I, ES,

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

OOP Objekt-orienterad programmering

Tentamen Programmering fortsättningskurs DIT950

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

LULEÅ TEKNISKA UNIVERSITET

TDDD78 Viktiga begrepp, del 2

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

Föreläsning 9: Arv och UML

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

Tentamen, EDAA10 Programmering i Java

Hisspresentation av programdesign Projektplan: Kommunikation i teknisk utbildning,

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

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

Föreläsning 15: Repetition DVGA02

Konstruktion av klasser med klasser

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

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

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

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

Mål Förklaring av termer

Mål Förklaring av termer

Lösningsförslag till tentamen i EDAF25 Objektorienterad modellering och design Helsingborg

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

Tentamen, EDAA20/EDA501 Programmering

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

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

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

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

DELPROV 1 I DATAVETENSKAP

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 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

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

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

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

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Föreläsning 10. ADT:er och datastrukturer

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

Föreläsning 14 Innehåll

TDP005. Föreläsning 3 - UML. Filip Strömbäck

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

Lösning till tentamen EDAA45 Programmering, grundkurs

Obligatorisk uppgift 5

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

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 2010 08 27 2010 OMD 2010 F1-1 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? OMD 2010 F1-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.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 2010 F1-3 OMD 2010 F1-4

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) { 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 Gör en objektorienterad modell för tider med angivande av attribut och metoder! OMD 2010 F1-5 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 double getx() { return x; public void setx(double x) { this.x = x; // omissions OMD 2010 F1-7 OMD 2010 F1-6... Dålig design 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 2010 F1-8

Aktivitet Kursens syfte 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. 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 2010 F1-9 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 2010 F1-11 OMD 2010 F1-10 Du kan redan... det mesta i programspråket Java vanliga datastrukturer skriva fungerande program OMD 2010 F1-12

Kurslitteratur Schema Modellering och design Robert C. Martin: Agile Software Development - Principles, Patterns, and Practices, Prentice Hall, 2003, ISBN 0-13-597444-5. Lennart Andersson: UML Syntax, Datavetenskap LTH, 2006. Lennart Andersson: Diskreta strukturer, Datavetenskap LTH, 2009. (EDAF10) Övnings-, laborations- och projektuppgifter publiceras på hemsidan. v36 måndag 8.15 Kårhör föreläsning torsdag 10.15 E:A föreläsning v37 måndag 8.15 Kårhör föreläsning onsdag eller fredag övning torsdag 10.15 E:A föreläsning laboration v38 måndag 8.15 Kårhör föreläsning tis-tor inst projektmöte onsdag eller fredag övning torsdag 10.15 E:A föreläsning v39 onsdag eller fredag övning v42 torsdag 10.15 E:A föreläsning OMD 2010 F1-13 Övningar vecka 37 39 Bonus OMD 2010 F1-14 Det finns två sorters övningspass: pass där studenterna förväntas presentera lösningar till förelagda problem. pass där en lärare presenterar lösningar till de förelagda problemen. Anmälan till schemapass sker via hemsidan. Deltagande på övningarna är frivilligt, men de som är beredda att presentera sina lösningar inför övningsgruppen har möjlighet att få upp till 15% bonus för detta vid första ordinarie tentamenstillfälle. Samarbete rekommenderas! OMD 2010 F1-15 OMD 2010 F1-16

Laboration med Eclipse Projekt Innehåll refaktorisering UML-verktyget Utförande ej schemalagd utföres på egen hand redovisas ej 1. Computer (ingår i Principer och mönster) 2. XL kalkylprogram (EDA061: HT1, EDAF10: HT2) Grupper om 4 studenter 3 designmöten med handledare OMD 2010 F1-17 Tentamen OMD 2010 F1-18 Tidsbudget Läroboken (Martin), UML-häftet och Diskreta strukturer får medföras på tentamen. 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 OMD 2010 F1-19 OMD 2010 F1-20

Redesign 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); public class Segment { private Point point0, point1; public double length() { return point1.distanceto(point0); OMD 2010 F1-21 3D-punkter... OMD 2010 F1-22... 2D-punkter... public class Point2d implements Point { private double x, y; public interface Point { public double distanceto(point other); 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); OMD 2010 F1-23 OMD 2010 F1-24

... 3D-punkter Oförändrad public class Point3d implements Point { private double x, y, z; public class Segment { private Point point0, point1; 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); public Segment(Point point0, Point point1) { this.point0 = point0; this.point1 = point1; public double length() { return point1.distanceto(point0); OMD 2010 F1-25 Aktivitet OMD 2010 F1-26 Designprinciper för programmering I en motorcykeltävling anges start- och målgångstider med klockslag med timmar, minuter och sekunder. Definiera en klass som kan användas för att representera tider i start- och resultatlistor. Abstraktion Modularisering Integritet skydda representationen Lokalisering implementera operationer där operanderna finns OMD 2010 F1-27 OMD 2010 F1-28

Dataabstraktion 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 2010 F1-29 Anderssons lokalitetsprincip, ALP OMD 2010 F1-30 Recept för ALP Operationer skall implementeras där operanderna är lättast tillgängliga. Undvik getters! OMD 2010 F1-31 OMD 2010 F1-32

Nim Nim substantiv Nim är ett tvåmansspel som spelas med att antal högar av tändstickor. Spelarna turas om att göra drag. I varje drag skall spelaren minska antalet stickor i exakt en hög. Den spelare som eliminerar den sista högen vinner. Designa ett objektorienterat program som spelar Nim med en människa vid tangentbordet. Nim är ett tvåmansspel som spelas med ett antal högar av tändstickor. Spelarna turas om att göra drag. I varje drag skall spelaren minska antalet stickor i exakt en hög. Den spelare som eliminerar den sista högen vinner. Designa ett objektorienterat program som spelar Nim med en människa vid tangentbordet. OMD 2010 F1-33 Nim klasser OMD 2010 F1-34 Metoder Nim spel antal tändsticka spelare drag högar antalet hög program människa tangentbordet class Nim synonym till Nim ges av size() i PileList saknar tillstånd och operationer abstract class Player operation class PileList extends ArrayList<Pile> attribut i Pile class Pile class Computer extends Player class Human extends Player tillhör användargränssnittet Nim PileList Pile Player void play() void reset() boolean isempty() void remove(int index, int count) String tostring() void remove(int count) String tostring() void move() OMD 2010 F1-35 OMD 2010 F1-36

Användningsfall (Use cases) Aritmetiska uttryck skapa högarna människan gör ett drag datorn gör ett drag avgör om någon vunnit Ett aritmetiskt uttryck är antingen ett tal eller en addition, multiplikation, en subtraktion eller en division av två uttryck. Modellera aritmetiska uttryck med substantivmetoden och förse klasserna med en metod som beräknar uttryckets värde. OMD 2010 F1-37 Aktivitet OMD 2010 F1-38 Expr klasser Ett aritmetiskt uttryck är antingen ett tal eller en addition, en multiplikation, en subtraktion eller en division av två uttryck. Vilka klasser skall finnas? Modellera aritmetiska uttryck med substantivmetoden och förse klasserna med en metod som beräknar uttryckets värde. OMD 2010 F1-39 OMD 2010 F1-40

Expr och Num Num behöver en standardkonstruerare public interface Expr { public int value(); public class Num implements Expr { private int value; public int value() { return value; 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. Add OMD 2010 F1-41 OMD 2010 F1-42 Expr Exempel 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(x1), new Num(2)), new Num(3)) OMD 2010 F1-43 OMD 2010 F1-44

UML Diagram Unified Modeling Language Booch, Rumbaugh, Jacobson, slutet av 90 talet många läroböcker och verktyg industristandard Funktionell modell Användningsfall (Use cases) Statisk modell Klassdiagram Dynamisk modell Sekvensdiagram, tillståndsdiagram OMD 2010 F1-45 OMD 2010 F1-46 Ett klassdiagram OMD 2010 F1-47