Nej! Nej Nej Nej Nej Nej Nej Nej!

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

Projekt 2 XL. Observer-mönstret

HT1 2013, FÖRELÄSNING 6

Projekt 2 XL Klassen Gui

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

Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061)

Projekt 2 XL Schema designmöten

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

HT1 2015, FÖRELÄSNING

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

Alfabeten, strängar och språk. String

Lösningsförslag till tentamen

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.

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

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

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

Objektorienterad programutveckling, fk

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

Föreläsning 3. Stack

Föreläsning 12. Föreläsning 12. Rörliga figurer Klassen Timer Undantag Något om applets. Rörliga appletsfigurer Klassen Timer Undantag

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

Lösningar till tentamen i EDAF25

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

Tentamen i Objektorienterad modellering och diskreta strukturer

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

4.7 Observatörsmönstret

F4. programmeringsteknik och Matlab

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

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

Information. Computer

Föreläsning 3. Stack

Laboration 15 Grafiskt användargränssnitt

Programmering A. Johan Eliasson

12. Relationer och funktioner

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

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

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?

Förra föreläsningen. Dagens agenda. Dagens agenda. Föreläsningsbilder EDAF10/EDA Ulf Asklund, Datavetenskap/LTH 1

Mer om grafiska komponenter. Händelsestyrda program

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

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

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

Upplägg. Introduktion. Examination. Mål. Konsekvenser. Java. Kursen heter konstruktion, ej design eller formgivning.

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

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

Inlämningsuppgift MiniPlotter

12. Relationer och funktioner

Properties. Användbara metoder som kan anropas i propertychanged:

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

Lösningsförslag till tentamen

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

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

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

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

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

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

Tentamen LÖSNINGSFÖRSLAG

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

Tentamen i Objektorienterad modellering och design Helsingborg

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

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

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

ITK:P1 Lektion 4. Lektion 4. Lektion 4. Att implementera en spelidé i Java. DSV Peter Mozelius

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

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

Lösningsförslag till tentamen

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

LÖSNINGSFÖRSLAG

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

Lösningsförslag till tentamen

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

Integritetsprincipen. Objektorienterad modellering och diskreta strukturer / design

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

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

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

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

Grafiska komponenter.

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

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

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

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

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

MVC-mönstret. model-view-control i Swing

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

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

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

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

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Omentamen FYTA11 Javaprogrammering

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

The Last Adventure. Innehåll. Objektorientering. Språket Java. Java - Paket. Java - synlighet. Den sista lektionen. Repetition.

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

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

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

Föreläsning 10. Mer om grafiska komponenter Händelsestyrda program. Layout Managers

Grafiska användargränsnitt i Java. Föreläsning 7 Innehåll. Använda klasspaketet Swing. Klasspaket i Java. Grafiska användargränsnitt i Java

Transkript:

LongWord Objektorienterad modellering och diskreta strukturer / design Inför nästa projekt Lennart Andersson Reviderad 2010 09 16 2010 I vilken klass skall man beräkna summan av de värden som finns i två LongWord-objekt? Är det så här man skall göra? public class Add implements Instruction { private LongWord word1, word2; public void execute{ { long value1 = word1.getvalue{; long value2 = word2.getvalue{; LongWord word = new LongWord(value1 + value2); // omissions OMD 2010 F6-1 Nej! Nej Nej Nej Nej Nej Nej Nej! OMD 2010 F6-2 Dagens program Det skall göras i den klass där man har tillgång till representationen av värdena. public class LongWord { private long value; public void add(longword word1, LongWord word2) { value = word1.value. + word2.value; Felhantering Syntaxanalys Tillståndsdiagram Introduktion av projekt 2 Swing-komponenter och GUI-design OMD 2010 F6-3 OMD 2010 F6-4

Vecka 4-6 Vecka 7 vecka ed061 edaf10 4 föreläsning DS avsluta Computer XL design föreläsning DS övning OMD 5 föreläsning DS laboration DS designmöte föreläsning DS övning DS 6 föreläsning DS laboration DS XL impl föreläsning DS övning DS vecka ed061 edaf10 7 föreläsning DS XL designmöte laboration DS föreläsning OMD övning DS OMD 2010 F6-5 Diskreta strukturer OMD 2010 F6-6 Felhantering Logik: satslogik, naturlig härledning, predikatlogik Språk, reguljära uttryck, grammatik Mängder, relationer och funktioner Turing-maskiner, svåra och olösbara problem OMD 2010 F6-7 OMD 2010 F6-8

Felhantering Feldetektering public class XLException extends RuntimeException { private Object object; public XLException(String message, Object object) { super(message); this.object = object; public Object getobject() { return object; class Div extends BinExpr { Div(Expr expr1, Expr expr2) { super(expr1, expr2); public double op(double op1, double op2) { if (op2!= 0) return op1 / op2; else throw new XLException("division by zero", this); OMD 2010 F6-9 Felhantering OMD 2010 F6-10 Factory method mönstret try { expr.value(); catch (XLException e) { report(e.getmessage(), e.getobject()); catch (RuntimeException e) { recompute(); throw e; Factory method används när man måste avgöra vilken sorts objekt som skall skapas vid exekveringen vill undvika beroende av konkreta klasser OMD 2010 F6-11 OMD 2010 F6-12

Factory method i Computer Operandfabriken I Computer skapas operander och instruktioner direkt med konstruerare. Man skulle kunna skapa dessa från den externa representation. Vi gör en fabrik för operander och en för instruktioner. public class OperandFactory { public Operand build(string string) { if(string.charat(0)== [ ) { return new Word(Integer.parseInt( string.substring(1,string.length()-1))); else { return new Address(Integer.parseInt(string)); OMD 2010 F6-13 Instruktionsfabriken... OMD 2010 F6-14... Instruktionsfabriken... public class InstructionFactory { private OperandFactory opfactory = new OperandFactory(); public Instruction build(string string) { StringTokenizer tokenizer = new StringTokenizer(string); Operand op1, op2, op3; String opcode = tokenizer.nexttoken(); if (opcode.equals("add")) { op1 = opfactory.build(tokenizer.nexttoken()); op2 = opfactory.build(tokenizer.nexttoken()); op3 = opfactory.build(tokenizer.nexttoken()); return new Add(op1, op2, (Address) op3);... else if (opcode.equals("cpy")) { op1 = opfactory.build(tokenizer.nexttoken()); op2 = opfactory.build(tokenizer.nexttoken()); return new Copy(op1, (Address) op2);... OMD 2010 F6-15 OMD 2010 F6-16

... Instruktionsfabriken Aritmetiska uttryck Konkret syntax else if (opcode.equals("hlt")) { return new Halt(); else { throw new RuntimeException("syntax error"); Ett uttryck består av en eller flera termer separerade av enkla plus- eller minus-tecken. En term består i sin tur av en eller flera faktorer separerade av enkla multiplikations- eller divisions- tecken. 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. OMD 2010 F6-17 Konkret grammatik BNF OMD 2010 F6-18 Tal BNF expr ::= term (addop term)* term ::= factor (mulop factor)* factor ::= number name ( expr ) addop ::= + - mulop ::= * / Operatorer * upprepa 0 eller flera gånger eller literalt number ::= unsignednumber - unsignednumber unsignednumber ::= digit (digit)* digit ::= 0 1 2 3 4 5 6 7 8 9 name ::= letter (letter)* letter ::= a b... z OMD 2010 F6-19 OMD 2010 F6-20

Abstrakt representation abstrakt grammatik java.io.streamtokenizer public class public class StreamTokenizer { public double nval; public String sval; public int ttype = -4; public static final int TT_EOF = -1, TT_EOL = 10, TT_NUMBER = -2, TT_WORD = -3; public StreamTokenizer(Reader r) public int nexttoken() throws IOException public void ordinarychar(int ch) \\ omissions OMD 2010 F6-21 java.io.streamtokenizer OMD 2010 F6-22 Analys av faktorer public class ExprParser extends StreamTokenizer { private int token; public ExprParser(String string) throws IOException { super(new StringReader(string)); ordinarychar( - ); ordinarychar( / ); token = nexttoken(); private Expr factor() throws IOException { 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); OMD 2010 F6-23 OMD 2010 F6-24

Analys av termer Tillståndsdiagram private Expr term() throws IOException { 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; OMD 2010 F6-25 Projekt 2 XL OMD 2010 F6-26 XL Gui 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); // omissions pack(); setvisible(true); OMD 2010 F6-27 OMD 2010 F6-28

BorderLayout JPanel statuspanel editor storagepanel OMD 2010 F6-29 BorderLayout OMD 2010 F6-30 BorderPanel import java.awt.borderlayout; import javax.swing.jpanel; public class Gui extends JFrame { public Gui(int count) {... setlayout(new BorderLayout()); JPanel statuspanel = new BorderPanel(); JPanel storagepanel = new BorderPanel();... Editor editor = new Editor(this); add(borderlayout.north, statuspanel); add(borderlayout.center, editor); add(borderlayout.south, storagepanel);... OMD 2010 F6-31 import java.awt.borderlayout; import java.awt.color; import javax.swing.jpanel; public class BorderPanel extends JPanel { public BorderPanel() { super(new BorderLayout(2, 2)); setbackground(color.black); OMD 2010 F6-32

statuspanel statusarea JPanel statuspanel = new BorderPanel(); CurrentView currentview = new CurrentView(); StatusArea statusarea = new StatusArea(); statuspanel.add(borderlayout.west, currentview); statuspanel.add(borderlayout.center, statusarea); public class CurrentView extends JLabel { public CurrentView() { super("a1"); setbackground(color.white); setopaque(true); OMD 2010 F6-33 storagepanel OMD 2010 F6-34 JTextField JTextField används för textinmatning. GridLayout(11, 1, 2, 2) GridLayout(11, 8, 2, 2) public class Editor extends JTextField implements ActionListener { public Editor() { setbackground(color.white); addactionlistener(this); public void actionperformed(actionevent event) { // called by Return key // contents returned by gettext() OMD 2010 F6-35 OMD 2010 F6-36

WindowMenu JMenuItem class WindowMenuItem extends JMenuItem implements ActionListener { private Gui gui; public WindowMenuItem(Gui gui) { super(gui.gettitle()); this.gui = gui; addactionlistener(this); public void actionperformed(actionevent event) { gui.tofront(); JMenu OMD 2010 F6-37 OMD 2010 F6-38 GuiList public class WindowMenu extends JMenu implements Observer { private GuiList guilist; public WindowMenu(GuiList guilist) { super("window"); this.guilist = guilist; guilist.addobserver(this); update(null, null); public void update(observable observable, Object object) { removeall(); for (Gui gui : guilist) { add(new WindowMenuItem(gui)); OMD 2010 F6-39 public class GuiList extends Observable implements Iterable<Gui> { private List<Gui> list = new ArrayList<Gui>(); public void add(gui gui) { list.add(gui); setchanged(); notifyobservers(); public Iterator<Gui> iterator() { return list.iterator(); //omissions OMD 2010 F6-40

MouseListener 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); MouseAdapter 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){ OMD 2010 F6-41 MouseListenerLabel OMD 2010 F6-42 ExprVisitor 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()); public interface ExprVisitor { public Object visit(num node, Object object); public Object visit(add node, Object object); public Object visit(sub node, Object object); public Object visit(mul node, Object object); public Object visit(div node, Object object); OMD 2010 F6-43 OMD 2010 F6-44

AddCounterVisitor AddCounterVisitor public class AddCounterVisitor implements ExprVisitor { private int count = 0; public Object visit(add node, Object object) { count++; node.expr1.accept(this, object); node.expr2.accept(this, object); return null; public Object visit(sub node, Object object) { node.expr1.accept(this, object); node.expr2.accept(this, object); return null; // etc. OMD 2010 F6-45 Behövs accept? Kan man inte anropa visit direkt? public class AddCounterVisitor implements ExprVisitor { private int count = 0; public Object visit(add node, Object object) { count++; visit(node.expr1, object); visit(node.expr2, object); return null; public class AddCounterVisitor implements ExprVisitor { accept private int count = 0; public static int addcount(expr expr) { AddCountVisitor visitor = new AddCountVisitor(); expr.accept(visitor); return visitor.count; OMD 2010 F6-46 Varje Expr-klass skall ha en accept-metod som bara anropar besökaren. public class Add implements Expr { public Object accept(visitor visitor, Object object) { return visitor.visit(this, object); Kompilatorn kommer att efterlysa metoden public Object visit(expr expr, Object object) OMD 2010 F6-47 OMD 2010 F6-48