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

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

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

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?

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 2013, FÖRELÄSNING 14 (INFÖR TENTAN)

HT1 2015, FÖRELÄSNING

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

Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061)

Information. Computer

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

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

Tentamen i Objektorienterad modellering och design Helsingborg

Tentamen i Objektorienterad modellering och diskreta strukturer

Tentamen i Objektorienterad modellering och diskreta strukturer

Seminarierna Instruktioner. Övningarna Viktiga relationer

Tentamen i Objektorienterad modellering och design

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

Tentamen i Objektorienterad modellering och design Helsingborg

Tentamen i Objektorienterad modellering och diskreta strukturer

Introduktionsmöte Innehåll

Grammatik. BNF-grammatik

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

Objektorienterad analys och design

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

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

Föreläsning 13 Innehåll

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

EDAA01 Programmeringsteknik - fördjupningskurs

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

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

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

Integritetsprincipen. Objektorienterad modellering och diskreta strukturer / design

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

10. Mängder och språk

Alfabeten, strängar och språk. String

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

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

Tentamen i Programmeringsteknik I, ES,

12. Relationer och funktioner

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

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

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

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

Lösningar till tentamen i EDAF25

Föreläsning 15: Repetition DVGA02

Programmering A. Johan Eliasson

Mer OOP. Variation i typ. Medlen repetition. Generiska klasser. Gränssnitt - Interface. Mer om klasser Några exempel UML

Introduktion. Byggstenar TDBA

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

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

12. Relationer och funktioner

Föreläsning 5-6 Innehåll

OCTOPUS utvecklingsmetod samt relaterade frågeställningar och diagram

Objektorienterad Programmering (TDDC77)

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

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

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

Projekt 2 XL. Observer-mönstret

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

Kursplanering Objektorienterad programmering

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

Programmeringsteknik II

Objektorienterad Systemutveckling Period 3

Tentamen i Objektorienterad modellering och design Helsingborg

Hisspresentation av programdesign Projektplan: Kommunikation i teknisk utbildning,

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

Objekt-orienterad Programmering och Design. TDA551 Alex Gerdes, HT-2016

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

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

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

HT1 2015, FÖRELÄSNING

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

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

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

Objektorienterad analys och design

Inkapsling (encapsulation)

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

Tentamen i Objektorienterad modellering och design

Mål Förklaring av termer

Imperativ programmering. Föreläsning 2

Objektorienterad Programmering (TDDC77)

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

Föreläsning 14 Innehåll

Objektorientering. Grunderna i OO

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

Lösningar till tentamen i EDAF25

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

The billion dollar mistake

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

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

Föreläsning 1 Innehåll

Objekt-orienterad programmering och design. DIT953 Niklas Broberg, 2018

EDAA30 Programmering i Java - fortsättningskurs

HT1 2013, FÖRELÄSNING 6

Kurs-PM fo r HI1027, Objektorienterad programmering, period 1 HT15

1 Egna klasser. 1.1 En punkt-klass

Transkript:

Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061) HT1 2015, FÖRELÄSNING 1 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) Ulf Asklund 1

Kursstruktur EDAF10: Objektorienterad modellering och diskreta strukturer EDA061: Objektorienterad modellering och design lv1 lv2 lv3 lv4 lv5 lv6 lv7 lv8 T lv1 lv2 lv3 Föreläsningar OMD Föreläsningar DS F T F Övningar OMD Övningar DS Labbar DS Projekt1 R Projekt2 R R Projekt2 R R Alla 061 F10 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 Ulf Asklund 2

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

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) { 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. Ulf Asklund 4

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. Tänkbara klasser Ulf Asklund 5

Tänkbara klasser Tänkbara klasser Ulf Asklund 6

Tänkbara klasser Naturliga attribut Ulf Asklund 7

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

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

Naturliga attribut, forts. Naturliga attribut, forts. Ulf Asklund 10

Nödvändiga metoder 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. Ulf 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); Ulf Asklund 12

Aktivitet Vad är det som är dåligt i detta program? 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. Ulf Asklund 13

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. 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. Ulf Asklund 14

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. Du kan redan Eclipse Klass Abstrakt klass Arv Paket Gränssnitt Förväntad förkunskap Objekt Repeteras inte i denna kurs Statisk metod Metodanrop Abstrakt metod Metod Dynamisk bindning Virtuella metoder, polymorfism Attribut Statiskt attribut Ulf Asklund 15

Nu ska du lära dig Design Principer Mönster Arkitektur (Metodik) UML O-O Eclipse Paket Klass Abstrakt klass Arv Gränssnitt Java Statisk metod Abstrakt metod Objekt Metod Virtuell metod Attribut Statiskt attribut Metodanrop Dynamisk bindning Virtulla metoder, polyformism Fortsätt tillämpa i PVG-kursen Design Principer Mönster Arkitektur (Metodik) Coachning av programvaruteam Resten av livet J UML O-O Eclipse Paket Klass Abstrakt klass Arv Gränssnitt Java Statisk metod Abstrakt metod Objekt Metod Virtuell metod Attribut Statiskt attribut Metodanrop Dynamisk bindning Virtulla metoder, polyformism Ulf Asklund 16

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. Ö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. Ulf Asklund 17

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. Föreläsningarna Ej obligatoriska Visar andra exempel än i boken Går igenom olika delar/moment som sedan återfinns i projekten. Ulf Asklund 18

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 Tidsbudget Ulf Asklund 19

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 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); Ulf Asklund 20

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); Redesign public class Segment { private Point point0, point1; public double length() { return point1.distanceto(point0); Ulf Asklund 21

3D-punkter public interface Point { public double distanceto(point other); 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); Ulf Asklund 22

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); Oförändrad public class Segment { private Point point0, point1; public double length() { return point1.distanceto(point0); Ulf Asklund 23

Anderssons lokalitetsprincip, ALP Operationer skall implementeras där operanderna är lättast tillgängliga. Recept för ALP Undvik getters! Ulf Asklund 24

Designprinciper för programmering Abstraktion Modularisering Integritet skydda representationen Lokalisering implementera operationer där operanderna finns 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; Ulf Asklund 25

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); 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. Ulf Asklund 26

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. Ulf Asklund 27

Aktivitet Implementera Add! 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)) Ulf Asklund 28

UML Unified Modeling Language Booch, Rumbaugh, Jacobson, slutet av 90 talet Många läroböcker och verktyg Industristandard Diagram Funktionell modell Användningsfall (Use cases) Statisk modell Klassdiagram, Objektdiagram Dynamisk modell Sekvensdiagram, Tillståndsdiagram Ulf Asklund 29

Ett klassdiagram Klasser Ulf Asklund 30

Abstrakta klasser och gränssnitt Generalisering Ulf Asklund 31

Realisering Parametriserade klasser Ulf Asklund 32

Associationer Aggregering och sammansättning Ulf Asklund 33

Beroende interface Observer { Object update(observable observable, Object object); Ulf Asklund 34