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

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?

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

HT1 2015, FÖRELÄSNING

Tentamen i Objektorienterad modellering och design Helsingborg

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

Algoritmer och datastrukturer, föreläsning 11

Datorlaborationer, Objektorienterad modellering och design (EDAF25)

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

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

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

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

Tentamen i Objektorienterad modellering och design Helsingborg

Föreläsning 13 Innehåll

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

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

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

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

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

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

Tentamen i Objektorienterad modellering och design

Information. Computer

Lösningar till tentamen i 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 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

Tentamen i Programmeringsteknik I, ES,

Föreläsning 5-6 Innehåll

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

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

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

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

Integritetsprincipen. Objektorienterad modellering och diskreta strukturer / design

Föreläsning 15: Repetition DVGA02

Objektorientering. Grunderna i OO

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

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

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

Seminarierna Instruktioner. Övningarna Viktiga relationer

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

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

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

Objektorienterad analys och design

Malmö högskola 2007/2008 Teknik och samhälle

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

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

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

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Övning 5. TDA550 - Objektorienterad programvaruutveckling, fk

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

FÖRELÄSNING 11 DATALOGI I

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

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

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

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

OCTOPUS utvecklingsmetod samt relaterade frågeställningar och diagram

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

Inlämningsuppgift MiniPlotter

Projektkaos. Chaos-rapporten. 34% av projekten avslutades i tid och enligt budget % misslyckades!

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

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

Malmö högskola 2007/2008 Teknik och samhälle

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

HT1 2015, FÖRELÄSNING

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

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

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

Lösningar till tentamen i EDAF25

Tentamen i Objektorienterad modellering och diskreta strukturer

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

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

Objektorienterad programmering D2

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Introduktion. Byggstenar TDBA

1 Egna klasser. 1.1 En punkt-klass

Tentamen Programmering fortsättningskurs DIT950

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

Grammatik. BNF-grammatik

Föreläsning Datastrukturer (DAT037)

Objektorienterad programmering Föreläsning 4

Föreläsning 9: Arv och UML

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

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

RUP - Rational Unified Process

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

Konstruktion av klasser med klasser

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

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Tentamen i Objektorienterad modellering och diskreta strukturer

Obs! Inget ur Javas standardbibliotek får användas i ett svar (om det inte står att man får det).

Objektorienterad Programmering (TDDC77)

Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser.

Obligatorisk uppgift 5

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 7/ Exempel: Implementation av Schackpjäser.

Transkript:

Objektorienterad modellering och design (EF25) Föreläsning 2 Traversering genda jupetförsttraversering Inför Lab 2 Objektorienterad modellering Övning modellering Introduktion till designprinciper tt jobba med denna och nästa vecka: Läs de 6 första kapitlen i Martins bok. Laboration 1 redovisas på fredag 20/1 Laboration 2 och Övning 1 redovisas nästa onsdag 25/1 jupet först Vid djupet-först-traversering av en graf utgår man från en startnod och följer varje väg så långt det går innan man backar tillbaka och följer nästa väg. Man använder rekursion för att gå igenom noderna. Man markerar noder som besökta när man har besökt dem, varje nod har ett booleskt attribut visited som används för detta. Man kan endast komma till noder som kan nås från startnoden. et betyder att om grafen har flera komponenter så kommer man bara att besöka alla noder i startnodens komponent. EF25 (F2) VT 2017 1 / 45 Traversering jupet först EF25 (F2) VT 2017 2 / 45 Traversering jupet först dfs(v) markera v som besökt för alla bågar e som utgår från noden v: w = noden i andra änden av e om inte w är besökt dfs(w); dfs(g) markera alla noder i grafen som obesökta for varje nod v i grafen om v inte är besökt dfs(v) B B I vilken ordning besöks noderna om startnoden är B? Vad behöver vi lägga till för att samtliga noder ska besökas? E Noder : B: : : E: Bågar För att besöka samtliga noder i en graf med djupet-först-teknik kan vi behöva göra upprepade anrop av metoden dfs(v) ovan tills alla noder är besökta. E Noder : B: : : E: Bågar EF25 (F2) VT 2017 3 / 45 EF25 (F2) VT 2017 4 / 45

Laboration 2 Laboration 2 5. Generalisering Sammanhängande graf En oriktad graf är sammanhängade om det för varje par av noder gäller att det finns en väg (en serie bågar) mellan noderna. 1 Undersök om en oriktad graf är sammanhängande. 2 Räkna antalet komponenter i en graf. 3 vgör om det finns en väg mellan två noder. 4 Hitta en väg mellan två noder. 5 Generalisering B E En klass med följande metoder införs: public class VertexVisitor<V,E> { public boolean isone() { return false; public void previsit(graph.vertex<v,e> v) { public void postvisit(graph.vertex<v,e> v){ EF25 (F2) VT 2017 5 / 45 Laboration 2 5. Generalisering EF25 (F2) VT 2017 6 / 45 Laboration 2 5. Generalisering en generella varianten av djupetförstgenomgång utgående från en nod v får en extra parameter av typen VertexVisitor: public static <V,E> void dfs(graph.vertex<v,e> v, VertexVisitor<V,E> visitor) { if (visitor.isone()) { return; visitor.previsit(v); v.visit(); for (Graph.Edge<V,E> e : v) { Graph.Vertex<V,E> w = e.destination(); if (!w.isvisited()) { dfs(w,visitor); visitor.postvisit(v); FS + dfs(vertex, VertexVisitor) PathVisitor - done: boolean - destination: Vertex + isone(): boolean + previsit(vertex) VertexVisitor + isone(): boolean + previsit(vertex) + postvisit(vertex) ountingvisitor - count: int + previsit(vertex) EF25 (F2) VT 2017 7 / 45 EF25 (F2) VT 2017 8 / 45

Introduktion till objektorienterad modellering 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 Introduktion till objektorienterad modellering Ett förslag... public class Time implements omparable<time> { private int sec; public Time(String time) public Time difference(time other) public int compareto(time other) public String tostring() Konstruera en klass, Time, som kan användas för att representera tider i start- och resultatlistor. Vilka attribut och metoder behövs? EF25 (F2) VT 2017 9 / 45 Introduktion till objektorienterad modellering EF25 (F2) VT 2017 10 / 45 Introduktion till objektorienterad modellering 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); EF25 (F2) VT 2017 11 / 45 EF25 (F2) VT 2017 12 / 45

OM esignprinciper OM esignprinciper 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); EF25 (F2) VT 2017 13 / 45 OM esignprinciper EF25 (F2) VT 2017 14 / 45 OM esignprinciper Nytt krav: Vi vill kunna implementera 3-punkter också. Vi skapar ett interface. public interface Point { public double distanceto(point other); 2-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); EF25 (F2) VT 2017 15 / 45 EF25 (F2) VT 2017 16 / 45

OM esignprinciper OM esignprinciper 3-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); Övergripande designprinciper bstraktion Modularisering Inkapsling Integritet skydda representationen Lokalisering implementera operationer där operanderna finns delegation Tips: Undvik getters! EF25 (F2) VT 2017 17 / 45 God praxis enligt Martin EF25 (F2) VT 2017 18 / 45 Utvecklingsmodellen gile esigna ej på spekulation, dvs för saker som kanske inte kommer att användas. Gör om designen när den inte längre är bra. Refaktorisering. Optimera inte programmet förrän du konstaterat att det är nödvändigt. Producera ingen dokumentation om den inte behövs genast och är betydelsefull. (Martin) gile Software evelopment gile betyder vig, rörlig, kvick eller anpasslig. På svenska vanligen: lättrörlig EF25 (F2) VT 2017 19 / 45 EF25 (F2) VT 2017 20 / 45

Utvecklingsmodellen Traditionell vs iterativ Utvecklingsmodellen Extreme Programming, XP Traditionell Krav esign Implemen tation Iterativ Test Krav esign Implementation Test Berättelser (stories) Korta iterationer kontinuerlig integrering Testa först (T) Parprogrammering Enkel design Ständig refaktorisering XP Ett exempel på en gil praxis. et finns många! EF25 (F2) VT 2017 21 / 45 Utvecklingsmodellen T EF25 (F2) VT 2017 22 / 45 ktivitet Test på olika nivåer (enhetstest, acceptanstest) T -> testsvit för regressionstest T -> designperspektiv på utvecklingen public void testmove() { WumpusGame g = new WumpusGame; g.connect(4,5,"e"); g.setplayerroom(4); T g.east(); assertequals(5, g.getplayerroom()); Refaktorisering Röd ritmetiska 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. Grön Martin s.24 EF25 (F2) VT 2017 23 / 45 EF25 (F2) VT 2017 24 / 45

ktivitet ktivitet ritmetiska uttryck - lösning Ett aritmetiskt uttryck är antingen ett tal eller en addition, multiplikation, subtraktion eller division av två uttryck. ritmetiska uttryck - lösning Ett aritmetiskt uttryck är antingen ett tal eller en addition, multiplikation, subtraktion eller division av två uttryck. Expr Num dd Expr Sub Mul iv Num dd Sub Mul iv EF25 (F2) VT 2017 25 / 45 ktivitet EF25 (F2) VT 2017 26 / 45 ktivitet ritmetiska uttryck - lösning Ett aritmetiskt uttryck är antingen ett tal eller en addition, multiplikation, subtraktion eller division av två uttryck. ritmetiska uttryck - lösning Ett aritmetiskt uttryck är antingen ett tal eller en addition, multiplikation, subtraktion eller division av två uttryck. <<interface>> Expr <<interface>> Expr +value():int Num dd Sub Mul iv Num dd Sub Mul iv EF25 (F2) VT 2017 27 / 45 EF25 (F2) VT 2017 28 / 45

ktivitet ktivitet Expr och Num ritmetiska uttryck - lösning Ett aritmetiskt uttryck är antingen ett tal eller en addition, multiplikation, subtraktion eller division av två uttryck. public interface Expr { public int value(); public class Num implements Expr { private int value; public int value() { return value; «interface» Expr + value(): int Num - value: int EF25 (F2) VT 2017 29 / 45 ktivitet Num EF25 (F2) VT 2017 30 / 45 ktivitet Implementera dd 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. «interface» Expr + value(): int Num - value: int + Num(int) public class dd implements Expr { private Expr expr1, expr2; public int value() { return expr1.value() + expr2.value(); - expr1: Expr - expr2: Expr ktivitet: nvänd konstruerarna i de olika implementationerna av Expr för att skapa en instans av uttrycket 1*2+3 (T) dd EF25 (F2) VT 2017 31 / 45 EF25 (F2) VT 2017 32 / 45

ktivitet Expr Exempel UML Uttryck Instans av Expr 1 new Num(1); 1+2 new dd(new Num(1),new Num(2)); 1+2*3 new dd(new Num(1), new Mul(new Num(2), new Num(3)); 1*2+3 new dd(new Mul(new Num(1), new Num(2)), new Num(3)); Unified Modeling Language Visuell representation av ett system under utveckling Booch, Rumbaugh, Jacobson, slutet av 90 talet Många läroböcker och verktyg Industristandard Olika användning - olika detaljnivå Skiss Specifikation Programmeringsspråk EF25 (F2) VT 2017 33 / 45 UML EF25 (F2) VT 2017 34 / 45 iagram Funktionell modell nvändningsfall (Use cases) Statisk modell Klassdiagram, Objektdiagram ynamisk modell Sekvensdiagram, Tillståndsdiagram EF25 (F2) VT 2017 35 / 45 EF25 (F2) VT 2017 36 / 45

Klasser bstrakta klasser och gränssnitt EF25 (F2) VT 2017 37 / 45 Generalisering EF25 (F2) VT 2017 38 / 45 Realisering EF25 (F2) VT 2017 39 / 45 EF25 (F2) VT 2017 40 / 45

Parametriserade klasser ssociationer EF25 (F2) VT 2017 41 / 45 ggregering och sammansättning EF25 (F2) VT 2017 42 / 45 ggregering och sammansättning Kommer ni ihåg... «interface» Expr 2 + value():int public class dd implements Expr { private Expr expr1, expr2; public int value() { return expr1.value() + expr2.value(); dd - expr1: Expr - expr2: Expr EF25 (F2) VT 2017 43 / 45 EF25 (F2) VT 2017 44 / 45

Beroende EF25 (F2) VT 2017 45 / 45