Projekt 2 XL Schema designmöten

Relevanta dokument
Projekt 2 XL Klassen Gui

Projekt 2 XL. Observer-mönstret

Nej! Nej Nej Nej Nej Nej Nej Nej!

HT2 2015, FÖRELÄSNING 15 (XL-PROJEKTET)

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

HT1 2013, FÖRELÄSNING 6

Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061)

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

HT1 2015, FÖRELÄSNING

Lösningar till tentamen i EDAF25

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

Grammatik. BNF-grammatik

Definition. Mängden av reguljära uttryck på alfabetet Σ definieras av. om α och β är reguljära uttryck så är (α β) ett reguljärt uttryck

Lösningar till tentamen i EDAF25

Alfabeten, strängar och språk. String

Tentamen i Objektorienterad modellering och design Helsingborg

Lösningsförslag till tentamen

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

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

Tentamen i Objektorienterad modellering och diskreta strukturer

Föreläsning 3. Stack

Objektorienterad Programkonstruktion. Föreläsning 3 9 nov 2015

4.7 Observatörsmönstret

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

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

Information. Computer

Föreläsnings 11 - GUI, Händelsestyrda program, MVC

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016

Objektorienterad programutveckling, fk

Repetitionsföreläsning 2: Quiz & problemlösning med swing Inget nytt material.

Tentamen i Objektorienterad modellering och design Helsingborg

Föreläsning 3. Stack

Tentamen Programmeringsteknik II för STS Skrivtid: Inga hjälpmedel.

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

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

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Tentamen i Objektorienterad modellering och diskreta strukturer

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

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

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 18

Lösningsförslag till tentamen

Dagens program. Objektorienterad modellering och diskreta strukturer / design. Model/View/Control-implementering. Model/View/Control-arkitektur

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

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

Tentamen LÖSNINGSFÖRSLAG. c) Tilldelningen C x = new D() ger kompileringsfel eftersom klassen D är abstrakt.

Föreläsning 3: Händelsestyrda program och användargränssnitt

Laboration 15 Grafiskt användargränssnitt

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

Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

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

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

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

Integritetsprincipen. Objektorienterad modellering och diskreta strukturer / design

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

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

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

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

ITK:P1 Föreläsning 4. Grafiska gränssnitt i Java. AWT-komponenter

Lösningsförslag till tentamen

List.java. List.java. Printed by Tom Smedsaas

Lösningsförslag till tentamen

Monday, November 16, Senaste Labben

Lycka till! TENTAMEN: Objektorienterade applikationer. Läs detta! 1 (6) Tentamen

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

Swing. MER Java Foundation Classes (JFC) Hur lära sig? Vad är farorna. LayoutManagers. Exempel på några av komponenterna

Svaret kan ges i Javakod (eller i UML-klassdiagram). public class A { B minb;... } public class B { <B:s många variabler och metoder> } Lösning:

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Tentamen i Objektorienterad modellering och diskreta strukturer

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Swing. MER Java Foundation Classes (JFC) Vad är farorna. Hur lära sig? LayoutManagers. Exempel på några av komponenterna

lgammal2.txt // Lösningar till gammal tentamen // Uppgift 1 a

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

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

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

E02 "The Review" Föreläsning 2, HT2013 Grunderna, repetition. Johan Leitet. Kurs: 1dv403 Webbteknik I

Tentamen LÖSNINGSFÖRSLAG

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

Mer om grafiska komponenter. Händelsestyrda program

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

Tentamen i Objektorienterad modellering och design

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

TNSL05 Optimering, Modellering och Planering. Föreläsning 10

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Grafiska komponenter.

Lösningsförslag till tentamen FYTA11 Javaprogrammering

2I1049 Föreläsning 8. Grafiska gränssnitt i Java. AWT-komponenter. Grafiska gränssnitt, Java interface och händelsehantering

Lösningsförslag till tentamen

Objektorienterad Programmering (TDDC77)

LÖSNINGSFÖRSLAG

Föreläsning 13: Swing (GUI), händelser, timer

Omentamen FYTA11 Javaprogrammering

Föreläsning 15 (16) Historik (java.awt) Historik (javax.swing) Introduktion till Swing

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

Lösningsförslag till tentamen

Tentamen Programmering fortsättningskurs DIT950

Föreläsning 14: Grafik & mera händelsehantering

Inlämningsuppgift MiniPlotter

F4. programmeringsteknik och Matlab

Transkript:

Objektorienterad modellering och design (EDAF5) Föreläsning Agenda Introduktion till projekt XL UML Tillståndsdiagram Grafer Nätverk Ford Fulkersons algorim Återstår av kursen Föreläsningar: F9 må april Övning och frågestund F (flyttad till) on maj Repetition och övning inför tentan Projekt: Computer Skicka in design imorgon! Redovisning på fredag april! Slutinlämning nästa freadg 7 april! XL Börja jobba med detta projekt så snart som möjligt. Redovisning 9:e april och :a maj! Slutinlämning 9:e maj! Övning 3 redovisas on april Lab 5 redovisas fr april Tenta to juni EDAF5 (F) VT 5 / 53 EDAF5 (F) VT 5 / 53 Schema designmöten Möte : användningsfall, paketindelning, klassdiagram onsdag 9:e april Möte : klassdiagram, källkod (fungerande program) fredag :a maj Slutinlämning 9:e maj EDAF5 (F) VT 5 3 / 53 EDAF5 (F) VT 5 / 53

Observer-mönstret GUI-modellering public interface Observer { public void update(observable observable, Object object); public abstract class Observable { public void addobserver(observer observer) public void notifyobservers() Den oerfarne gör allt i en stor klass. Den agile gör lite i många klasser med beaktande av principen om enkelt ansvar. EDAF5 (F) VT 5 5 / 53 Paket EDAF5 (F) VT 5 / 53 Paketet expr expr aritmetiska uttryck (modifieras ej) gui användargränssnittet (modifieras) menu menyer (modifieras)... egna paket util avvecklingspaket Expr ExprParser Num Add... AddressExpr EDAF5 (F) VT 5 7 / 53 EDAF5 (F) VT 5 / 53

Paketet gui Varför inte javax.swing.jtable? JTable tillhandahåller mycket som skulle göra projektet lättare, men döljer mycket av det som projektet vill lära ut javadoc omfattar + sidor XL (med main) XLList CurrentLabel StatusPanel Editor RowLabels SheetPanel SlotLabel EDAF5 (F) VT 5 9 / 53 Paketet menu menyerna EDAF5 (F) VT 5 / 53 Paketet util Adjustment NumberAdjustment XLException XLBufferedReader XLPrintStream En del av dessa klasser bör flyttas till andra paket. EDAF5 (F) VT 5 / 53 EDAF5 (F) VT 5 / 53

Klassen Gui BorderLayout JFrame ger ett eget fönster på skärmen. import javax.swing.jframe; import java.awt.borderlayout; public class Gui extends JFrame { public Gui(int count) { super("untitled-" + count); setlayout(new BorderLayout()); // omissions pack(); setvisible(true); EDAF5 (F) VT 5 3 / 53 Layout EDAF5 (F) VT 5 / 53 Layout Status area: EDAF5 (F) VT 5 5 / 53 EDAF5 (F) VT 5 / 53

Editor WindowMenu JTextField används för textinmatning. public class Editor extends JTextField implements ActionListener { public Editor() { setbackground(color.white); addactionlistener(this); public void actionperformed(actionevent event) { // activated by Return key // contents returned by gettext() EDAF5 (F) VT 5 7 / 53 WindowMenuItem EDAF5 (F) VT 5 / 53 JMenu class WindowMenuItem extends JMenuItem implements ActionListener { private XL xl; public WindowMenuItem(XL xl) { super(xl.gettitle()); this.xl = xl; addactionlistener(this); public void actionperformed(actionevent event) { xl.tofront(); public class WindowMenu extends JMenu implements Observer { private XLList xllist; public WindowMenu(XLList xllist) { super("window"); this.xllist = xllist; xllist.addobserver(this); update(null, null); public void update(observable observable, Object object) { removeall(); for (XL xl : xllist) { add(new WindowMenuItem(xl)); EDAF5 (F) VT 5 9 / 53 EDAF5 (F) VT 5 / 53

GuiList MouseListener public class XLList extends Observable implements Iterable<XL> { private List<XL> list = new ArrayList<XL>(); public void add(xl xl) { list.add(xl); setchanged(); notifyobservers(); public boolean isempty() { return list.isempty(); public Iterator<XL> iterator() { return list.iterator(); Några swing-komponenter kan ha en ActionListener, t ex: JButton, JMenuItem, JTextField. Alla komponenter kan ha en MouseListener. Den läggs till med: public void addmouselistener(mouselistener listener); public interface MouseListener { void mouseclicked(mouseevent event); void mouseentered(mouseevent event); void mouseexited(mouseevent event); void mousepressed(mouseevent event); void mousereleased(mouseevent event); EDAF5 (F) VT 5 / 53 MouseAdapter EDAF5 (F) VT 5 / 53 MouseListenerLabel I regel vill man bara reagera på en av händelserna. Då är det bekvämt med: public abstract class MouseAdapter { public void mouseclicked(mouseevent event){ public void mouseentered(mouseevent event){ public void mouseexited(mouseevent event){ public void mousepressed(mouseevent event){ public void mousereleased(mouseevent event){ public class MouseListenerLabel extends JLabel { private class ClickListener extends MouseAdapter { public void mouseclicked(mouseevent event) { setbackground(color.yellow); public MouseListenerLabel() { setbackground(color.white); addmouselistener(new ClickListener()); EDAF5 (F) VT 5 3 / 53 EDAF5 (F) VT 5 / 53

Felhantering Felhantering public class XLException extends RuntimeException { public XLException(String message) { super(message); EDAF5 (F) VT 5 5 / 53 Feldetektering EDAF5 (F) VT 5 / 53 Syntaxanalys class Div extends BinaryExpr { Div(Expr expr, Expr expr) { super(expr, expr); precedence = ; precedence = ; public double op(double op, double op) { if (op!= ) return op / op; else throw new XLException("division by zero"); Syntax för aritmetiska uttryck: Ett uttryck består av en eller flera termer separerade av enkla pluseller minus-tecken. En term består i sin tur av en eller flera faktorer separerade av enkla multiplikations- eller divisionstecken. En faktor är ett tal, en variabel eller ett uttryck inom parenteser. Ett tal består av en eller flera siffror och får inledas med ett minustecken. En variabel består av en eller flera bokstäver bland a z. EDAF5 (F) VT 5 7 / 53 EDAF5 (F) VT 5 / 53

Syntaxanalys Syntaxanalys Konkret grammatik BNF: Expr ::= term (addop term)* Term ::= factor (mulop factor)* Factor ::= number name ( expr ) Addop::= + - Mulop ::= * / number ::= unsignednumber - unsignednumber unsignednumber ::= digit (digit)* digit ::= 3 5 7 9 name ::= letter (letter)* letter ::= a b... z Abstrakt representation abstrakt grammatik «interface» Expr Variable Int BinOp Add Sub Mul EDAF5 (F) VT 5 9 / 53 Syntaxanalys EDAF5 (F) VT 5 3 / 53 Syntaxanalys Java.io.StreamTokenizer: public class StreamTokenizer { public double nval; public String sval; public int ttype = -; public static final int TT_EOF = -, TT_EOL =, TT_NUMBER = -, TT_WORD = -3 public StreamTokenizer(Reader r) public int nexttoken() throws IOException public void ordinarychar(int ch) \\ omissions Java.io.StreamTokenizer: public class ExprParser { private int token; private StreamTokenizer tokenizer; public Expr build(reader reader) throws IOException { tokenizer = new StreamTokenizer(reader); tokenizer.ordinarychar( - ); tokenizer.ordinarychar( / ); token = tokenizer.nexttoken(); Expr e = expr(); if (token == StreamTokenizer.TT_EOF) return e; else throw new XLException("trailing garbage"); EDAF5 (F) VT 5 3 / 53 EDAF5 (F) VT 5 3 / 53

Syntaxanalys Syntaxanalys Analys av faktorer: private Expr factor() { Expr e; switch (token) { case ( : token = nexttoken(); e = expr(); token = nexttoken(); return e; case TT NUMBER: double x = nval; token = nexttoken(); return new Num(x); case TT WORD: String s = sval; token = nexttoken(); return new Variable(s); Analys av termer: private Expr term() { Expr result, factor; result = factor(); while (token == * token == / ) { int op = token; token = nexttoken(); factor = factor(); switch (op) { case * : result = new Mul(result, factor); break; case / : result = new Div(result, factor); break; return result; EDAF5 (F) VT 5 33 / 53 UML Tillståndsdiagram EDAF5 (F) VT 5 3 / 53 UML Tillståndsdiagram EDAF5 (F) VT 5 35 / 53 EDAF5 (F) VT 5 3 / 53

Grafer Grafer Source 3 3 Sink Ett flödesnätverk är en riktad graf där varje båge har en kapacitet och kan ta emot ett flöde. En nod i nätverket är en källa d.v.s. har bara utgående bågar. En nod i nätverket är en sänka d.v.s. har bara inkommande bågar. EDAF5 (F) VT 5 37 / 53 Snitt EDAF5 (F) VT 5 3 / 53 Snitt Snitt Ett snitt i ett flödesnätverk är en uppdelning av mängden noder i två mängder sådant att källan ingår i den ena mängden och sänkan i den andra. Kapaciteten för ett snitt är summan av kapaciteten för de bågar som går från källans mängd till sänkas mängd. 3 Minsta snittet: Hitta ett snitt med minimal kapacitet. Source 3 Sink EDAF5 (F) VT 5 39 / 53 EDAF5 (F) VT 5 / 53

Grafer Flöde Flödet via en båge kan inte överstiga dess kapacitet. Alla noder utom källan och sänkan har lika stort inflöde som utflöde. : Sök ett flöde med maximalt värde. / f= / / / / / / / 3/3 / /9 / Source / /3 Sink / EDAF5 (F) VT 5 / 53 EDAF5 (F) VT 5 / 53 Girig algoritm / f= : Sök ett flöde med maximalt värde. / / / / / Girig algoritm: Sätt flödet = för alla bågar Sök en väg p där varje båge har en resterande kapacitet större än flödet f Öka med flödet f längs vägen p Upprepa tills du inte hittar fler sådana vägar / / / /9 / / / / / f=+ / /9 / EDAF5 (F) VT 5 3 / 53 EDAF5 (F) VT 5 / 53

Girig algoritm Girig algoritm Den giriga algoritmen hittar inte maximalt flöde / f=++ / totalt flöde = / / / / / / / / / / / /9 / / /9 / / f=+++ Vi behöver en bättre algoritm +/ / / / / / 3/ 9/ maximalt flöde = 9 / +/9 +/ / 7/ / 9/ 9/9 / EDAF5 (F) VT 5 5 / 53 Ford-Fulkersons algoritm EDAF5 (F) VT 5 / 53 Ford-Fulkersons algoritm Vi definierar en ny graf som hjälper oss att hålla reda på möjligheten att ändra flödet. Residualgraf Givet grafen G med ett flöde f definierar vi residualgrafen Gf så att: Gf har samma noder som G. Alla bågar som finns i G finns även i Gf. Kapaciteten för en båge i Gf motsvarar resterande kapacitet för motsvarande båge i G. För alla bågar i G som har ett flöde fe större än noll finns också motsvarande bågar i omvänd riktning i Gf. Kapaciteten för dessa bågar är lika stort som fe. EDAF5 (F) VT 5 7 / 53 EDAF5 (F) VT 5 / 53

Ford-Fulkersons algoritm Ford-Fulkersons algoritm Utökande väg Ford-Fulkersons algoritm Sätt startflödet till för alla bågar. Sök en utökande väg i residualgrafen. Utöka flödet längs den vägen. Upprepa tills det inte går att hitta en utökande väg. EDAF5 (F) VT 5 9 / 53 Ford-Fulkersons algoritm EDAF5 (F) VT 5 5 / 53 Ford-Fulkersons algoritm / +/ / -/ totalt flöde = + +/ / +/ totalt flöde = +=9 + +/ /9 / / +/ - - + / -/ / + - - + +/ +/9 / EDAF5 (F) VT 5 5 / 53 EDAF5 (F) VT 5 5 / 53

Flöde och snitt Flödet är lika stort i varje snitt i grafen. Ett flöde är maximalt om det inte finns någon utökande väg. Värdet av ett maximalt flöde = Kapaciteten för det minsta snittet. EDAF5 (F) VT 5 53 / 53