Grafiske brugergrænseflader II!

Størrelse: px
Starte visningen fra side:

Download "Grafiske brugergrænseflader II!"

Transkript

1 Grafiske brugergrænseflader II! Plan! MVC (Model View Controller)!!!- designmønsteret Observer! Iterativ udvikling af et tegneprogram!!- muselyttere!!!!!- applet/applikation-idiomet!!!- designmønsteret State!!!!- designmønsteret Factory Method! 1! 2! En grafisk brugergrænseflade til beregning! af kvadratet på et tal! public class SquareFrame extends JFrame implements ActionListener {!!private Label numberlabel, squarelabel;!!!!!private TextField numberfield, squarefield;!!public SquareFrame() {!!!!!numberlabel = new Label("Number:");!!!!!!numberField = new TextField();!!!!squareLabel = new Label("Square:");!!!!!!squareField = new TextField();!!!!!!squareField.setEditable(false);!!!!!!Container pane = getcontentpane();!!!!!pane.setlayout(new GridLayout(4, 1));!!!!pane.add(numberLabel);!!!!!!!pane.add(numberField);!!!!!!!!pane.add(squareLabel);!!!!!!!pane.add(squareField);!!!numberField.addActionListener(this);!!!!!!public void actionperformed(actionevent e) {!!!!!int number = Integer.parseInt(numberField.getText());!!!squareField.setText(Integer.toString(number * number));!!!!!!!! 3! 4!

2 Model-View-Controller (MVC)! - et arkitektonisk mønster! MVC-arkitekturen! For at gøre udskiftning af en brugergrænseflade simpel, bør brugergrænsefladen have en løs kobling med de øvrige dele af programmet.! View! Hændelser! Opdater udseende! Den fundamentale ide i MVC er at adskille data (model) fra deres grafiske præsentation (view).! Tilstandsinformation! Opdater tilstand! Controller! En brugergrænseflades controller tager sig af brugerens input (hændelser). Typisk omfatter dette ændringer i modellen.! Model! Informationsstrøm! Kommando! 5! 6! Eksempel på anvendelse af MVC! (et GUI-program, der beregner kvadratet på et tal)! Model! public class Model {! int getnumber() {! return number;! int getsquare() {! return number * number;!!!metoder:! Model:!!getNumber(), getsquare(), setnumber()! View:!!getNumber(), update()! Controller:!actionPerformed()! void setnumber(int number) {! this.number = number;! private int number;! Lav model først. Kan testes uafhængigt af brugergrænsefladen.! 7! 8!

3 View! public class View extends JFrame {! public View(Model model) {! this.model = model;! numberlabel = new Label("Number:");! numberfield = new JTextField();!...! numberfield.addactionlistener(new Controller(model, this));! Controller! public class Controller implements ActionListener {! public Controller(Model model, View view) {! this.model = model;! this.view = view;! public int getnumber() {! return Integer.parseInt(numberField.getText());! public void update() {! squarefield.settext(integer.tostring(model.getsquare()));! private Model model;!! private JTextField numberfield, squarefield;! private JLabel numberlabel, squarelabel;!! 9! public void actionperformed(actionevent e) {! model.setnumber(view.getnumber());! view.update();! private Model model;! private View view;! 10! Et hovedprogram! Observer og Observable! public class MVC {! public static void main(string args[]) {! Model model = new Model();! View view = new View(model);! view.setsize(150, 150);! view.setvisible(true);! view.setdefaultcloseoperation(view.exit_on_close);! Java understøtter brugen af MVC-konceptet igennem grænsefladen Observer og klassen Observable.! Et Observable-objekt har en metode, addobserver, som benyttes til at registrere dets Observer-objekter.! Observer-objekterne kan underrettes om ændringer ved kald af metoden notifyobservers. Disse Observerobjekter vil da få kaldt deres update-metode.! 11! 12!

4 Observer og Observable! java.util.*! Anvendelse af! Observer/Observable! public interface Observer {! void update(observable obj, Object arg);! public class Observable {! public void addobserver(observer obj);! public void setchanged();! public void notifyobservers();! public void notifyobservers(object arg);! Model:! View:! Controller:!extends Observable!!implements Observer!!implements ActionListener! 13! 14! Programstruktur! Model! JFrame! Observer! update! Observable! ActionListener! public class Model extends Observable {! public int getnumber() {! return number;! View! update! model! observer! Model! model! Controller! public int getsquare() {! return number * number;! public int setnumber(int number) {! this.number = number;! setchanged();! notifyobservers();! private int number;! 15! 16!

5 View! public class View extends JFrame implements Observer {! public View(Model model) {! this.model = model;! model.addobserver(this);! numberfield = new JTextField();!...! numberfield.addactionlistener(new Controller(model));! public void update(observable obj, Object arg) {! squarefield.settext(integer.tostring(model.getsquare()));! private Model model;! private TextField numberfield, squarefield;! private Label numberlabel, squarelabel;! Controller! public class Controller implements ActionListener {! private Model model;! public Controller(Model model) {! this.model = model;! public void actionperformed(actionevent e) {! JTextField numberfield = (JTextField) e.getsource();! model.setnumber(integer.parseint(numberfield.gettext()));! 17! 18! View og Controller i en og samme klasse! (model-delegate arkitektur)! Eksempel på anvendelse af model-delegate! (visning af et heltal med to views)! public class View extends JFrame implements Observer, ActionListener {! public View(Model model) {!...! numberfield.addactionlistener(this);! public void actionperformed(actionevent e) {! model.setnumber(integer.parseint(numberfield.gettext());! public void update(observable obj, Object arg) {! squarefield.settext(integer.tostring(model.getsquare()));! private Model model;! private TextField numberfield, squarefield;! private Label numberlabel, squarelabel;! ValueModel!extends Observable! TextDelegate!implements Observer, ActionListener SliderDelegate!implements Observer, ChangeListener! 19! 20!

6 class ValueModel extends Observable {! private int value;! ValueModel! public void setvalue(int value) {! this.value = value;! setchanged();! notifyobservers();! public int getvalue() {! return value;! 21! class TextDelegate extends JTextField! implements Observer, ActionListener {! private ValueModel model;! TextDelegate! public TextDelegate(ValueModel model) {! this.model = model;! model.addobserver(this);! addactionlistener(this);! public void actionperformed(actionevent evt) {! model.setvalue(integer.parseint(gettext()));! public void update(observable obj, Object arg) {! if (obj == model)! settext(integer.tostring(model.getvalue()));! 22! class SliderDelegate extends JSlider! implements Observer, ChangeListener {! private ValueModel model;! SliderDelegate! public SliderDelegate(ValueModel model) {! super(0, 100, model.getvalue());! this.model = model;! model.addobserver(this);! addchangelistener(this);! public void statechanged(changeevent evt) {! model.setvalue(getvalue());! public void update(observable obj, Object arg) {! if (obj == model)! setvalue(model.getvalue());! 23! public class MDFrame extends JFrame {! public MDFrame() {! ValueModel model = new ValueModel();!! Container pane = getcontentpane();! pane.add(new TextDelegate(model), BorderLayout.NORTH);! pane.add(new SliderDelegate(model), BorderLayout.SOUTH);! setsize(200, 80);! setvisible(true);! setdefaultcloseoperation(exit_on_close);! MDFrame! public static void main(string[] args) {! new MDFrame();! 24!

7 Designmønsteret Observer! Kategori:!!!!!!!!Adfærdsmæssigt designmønster! Struktur:! Designmønsteret Observer! (fortsat)! Hensigt:!!!!!!!!At definere en en-til-mange-relation imellem objekter, således at når!et objekt ændrer tilstand, vil alle dets afhængige objekter blive notificeret!og opdateret automatisk! Anvendelse:!!Når en abstraktion har to sider, hvoraf den ene er afhængig af den anden!!når en ændring i et objekt kræver ændringer i andre objekter, og deres!antal er ukendt!!når et objekt skal kunne notificere andre objekter uden at kende dem! Andre navne:!!!!!!!!publish-subscribe! Subject! attach(observer)! detach(observer)! notify()! ConcreteSubject! getstate()! setstate()! subjectstate! observers! for all o in observers! o.update()! return subjectstate! subject! Observer! update()! ConcreteObserver! update()! observerstate! observerstate =! subject.getstate()! 25! 26! Designmønsteret Observer! (fortsat)! Lyttere og kilder! Deltagere:!!!!!!!!!!!!!!!!!!Subject, der kender sine Observer-objekter og definerer en grænseflade for!tilknytning og løsrivelse af Observer-objekter!!!!!!!!!!!Observer, der definerer en grænseflade for objekter, der skal underrettes om!ændringer i et Subject!!!!!!!!!!!!ConcreteSubject, der indeholder den tilstand, der har interesse for!!concreteobserver-objekter, og som sender besked til sine Observer-!objekter, når dets tilstand ændres!!!!!!!!!!!!!concreteobserver, der har en reference til et ConcreteSubject-objekt og!implementerer en update-metode! Swings hændelsesmodel benytter Observer-designmønsteret! med typificerede notifikations-objekter (Event-objekter).! Lytterne er observers.! Kilderne er observable.! 27! 28!

8 Brug af MVC! Iterativ udvikling!!giver stor fleksibilitet, men på bekostning af!!større kodemængde!!ofte slås controller og view sammen!!!(model-delegate arkitektur)! En Swing-komponent:! Model! Component! View! Controller! UI-delegate! Udviklingsprocessen foregår i iterationer.! Hver iteration er baseret på resultatet af den forrige iteration.! Hver iteration resulterer i et fuldt funktionelt mellemprodukt.! 29! 30! Iterativ udvikling af et tegneprogram! Iteration 1! 1. Et simpelt program til skitsetegning i et givet tegneområde.! 2. Muliggør intern og ekstern lagring af tegninger! samt valg af penfarve.! 3. Faktorisering med henblik på udvidelse.! 4. Muliggør tegning af linjestykker, rektangler og ovaler.! 5. Muliggør tegning af udfyldte rektangler og ovaler.! 6. Muliggør tilføjelse af tekst via tastaturet.! 31! 32!

9 Programstruktur! (iteration 1)! Klassen ScribbleCanvas! JApplet! Scribble! JPanel! ScribbleCanvas! EventListener! MouseListener! MouseMotionListener! import java.awt.*;! import java.awt.event.*;! import java.util.eventlistener;! import javax.swing.*;! public class ScribbleCanvas extends JPanel {! public ScribbleCanvas() {! listener = new ScribbleCanvasListener(this);! addmouselistener((mouselistener) listener);! addmousemotionlistener((mousemotionlistener) listener);! ScribbleCanvasListener! protected EventListener listener;! protected boolean mousebuttondown = false;! protected int x, y;! 33! 34! public class ScribbleCanvasListener! implements MouseListener, MouseMotionListener {! public ScribbleCanvasListener(ScribbleCanvas canvas) {! this.canvas = canvas;! Klassen ScribbleCanvasListener! //... mousepressed, mousedragged, mousereleased! public void mouseclicked(mouseevent e) { public void mouseentered(mouseevent e) { public void mouseexited(mouseevent e) { public void mousemoved(mouseevent e) { protected ScribbleCanvas canvas;! public void mousepressed(mouseevent e) {!!Point p = e.getpoint();!!!!canvas.x = p.x;!!! mousepressed!!!canvas.y = p.y;!!!!!canvas.mousebuttondown = true;! mousedragged! public void mousedragged(mouseevent e) {!!if (canvas.mousebuttondown) {!!! Point p = e.getpoint();!!! canvas.getgraphics().!!!! drawline(canvas.x, canvas.y, p.x, p.y);!! canvas.x = p.x;!!!! canvas.y = p.y;!!!!!!!!!! public void mousereleased(mouseevent e) {!!canvas.mousebuttondown = false;!! mousereleased! Alternativ: brug klassen MouseInputAdapter fra Swing! fortsættes! 35! Brug af mousebuttondown er overflødig! 36!

10 Klassen Scribble! (applet)! Klassen Scribble! (applet/application)! public class Scribble extends JApplet {! public Scribble() {! canvas = new ScribbleCanvas();! canvas.setbackground(color.white);!!!! getcontentpane().setlayout(new BorderLayout());! getcontentpane().add(canvas, BorderLayout.CENTER);! protected ScribbleCanvas canvas;! public class Scribble extends JApplet {! public Scribble() {! canvas = new ScribbleCanvas()! canvas.setbackground(color.white);!!!! getcontentpane().setlayout(new BorderLayout());! getcontentpane().add(canvas, BorderLayout.CENTER);!! public static void main(string[] args) {... protected ScribbleCanvas canvas;! fortsættes! 37! 38! Metoden main i Scribble! Idiom til at gøre et program til både en applet og en applikation! public static void main(string[] args) {!!!!int width = 600, height = 400;! JFrame frame = new JFrame("Scribble Pad");! frame.getcontentpane().add(new Scribble());! frame.setsize(width, height);!!dimension screensize = Toolkit.getDefaultToolkit().!! getscreensize();!!frame.setlocation(screensize.width / 2 - width / 2,!! screensize.height / 2 - height / 2);!! frame.setvisible(true);! public class DualAppletApp extends JApplet {! protected boolean isapplet;! public DualAppletApp() {! this(true);! private DualAppletApp(boolean isapplet) {! this.isapplet = isapplet;! //... general constructor stuff goes here! if (!isapplet) {! init();! start();! public static void main(string[] args) {... fortsættes! 39! 40!

11 public static void main(string[] args) {! JFrame frame = new JFrame();! frame.settitle(title);! frame.getcontentpane().setlayout(new BorderLayout());! frame.getcontentpane().add(! new DualAppletApp(false), BorderLayout.CENTER);! frame.addwindowlistener(new FrameListener);! frame.setsize(width, height);! frame.pack();! frame.setvisible(true);! FrameListener kan f.eks. være!!windowadapter() {!! public void windowclosing(windowevent e) {!! System.exit(0);!!! Iteration 2! (menuer, dialoger og filer)! Tilføjer følgende funktionalitet:! Intern lagring af tegninger (så de kan gentegnes, f.eks. hvis vinduesstørrelsen ændres)! Ekstern lagring af tegninger (i filer)! Mulighed for valg af penfarve! Valg foretages ved hjælp af menuer og dialoger.! 41! 42! Iteration 2! Pennestrøg! En tegning lagres i følgende struktur:! 2 strøg!!hver tegning består af en liste af pennestrøg (strokes)!!hvert pennestrøg består af en liste af punkter og!!den anvendte penfarve! 43! 44!

12 Programstruktur! (iteration 2)! Klassen Stroke! JFrame! Scribble! Serializable! JPanel! ScribbleCanvas! EventListener! *! Stroke! MouseListener! MouseMotionListener! public class Stroke implements Serializable {! public Stroke() { public Stroke(Color color) { this.color = color; public void setcolor(color color) { this.color = color; public Color getcolor() { return color; public List<Point> getpoints() { return points; public void addpoint(point p) { points.add(p); *! Point! ScribbleCanvasListener! protected List<Point> points = new ArrayList<Point>();! protected Color color = Color.black;! 45! 46! Klassen ScribbleCanvas! public class ScribbleCanvas extends JPanel {! public ScribbleCanvas() {... public void setcurcolor(color curcolor) {... public Color getcurcolor(); {... public void startstroke(point p) {... public void addpointtostroke(point p) {... public void endstroke(point p) {... public void paint(graphics g) {... public void savefile(string filename) {... public void openfile(string filename) {... public void newfile() {... public void setcurcolor(color curcolor) {!!this.curcolor = curcolor;!!!!!!!!!!!!! public Color getcurcolor() { return curcolor; public void startstroke(point p) {!!!curstroke = new Stroke(curColor);!!!curStroke.addPoint(p);! public void addpointtostroke(point p) {!!if (curstroke!= null)!!!! curstroke.addpoint(p);! protected EventListener listener;! protected int x, y;! protected List<Stroke> Strokes = new ArrayList<Stroke>();! protected Stroke curstroke = null;! protected Color curcolor = Color.black;! public void endstroke(point p) {!!!if (curstroke!= null) {!!!! curstroke.addpoint(p);!!! strokes.add(curstroke);!!! curstroke = null;!!!!!!! 47! 48!

13 public void paint(graphics g) {! Dimension dim = getsize();! g.setcolor(color.white);! g.fillrect(0, 0, dim.width, dim.height);! for (Stroke stroke : strokes) {! g.setcolor(stroke.getcolor());! Point prev = null;! for (Point cur : stroke.getpoints()) {! if (prev!= null)! g.drawline(prev.x, prev.y, cur.x, cur.y);! prev = cur;! public void savefile(string filename) {! try {! ObjectOutputStream out = new ObjectOutputStream(! new FileOutputStream(filename));! out.writeobject(strokes);! out.close();! System.out.println("Save drawing to " + filename);! } catch (IOException e) {! System.out.println("Unable to write file: " + filename);! 49! 50! public void openfile(string filename) {! try {! ObjectInputStream in = new ObjectInputStream(! new FileInputStream(filename));! strokes = (List) in.readobject();! in.close();! repaint();! } catch (IOException e1) {! System.out.println("Unable to open file: " + filename);! } catch (ClassNotFoundException e2) {! System.out.println(e2);! Klassen ScribbleCanvasListener! public class ScribbleCanvasListener extends MouseInputAdapter {! public ScribbleCanvasListener(ScribbleCanvas canvas) {! this.canvas = canvas;! // mousepressed, mousedragged, mousereleased! protected ScribbleCanvas canvas;! public void newfile() {! strokes.clear();! repaint();! 51! 52!

14 public void mousepressed(mouseevent e) {!!Point p = e.getpoint();!! mousepressed!!!canvas.x = p.x;!!!!!canvas.y = p.y;!!!! mousedragged!!canvas.startstroke(p);! public void mousedragged(mouseevent e) {!!Point p = e.getpoint();!!!canvas.getgraphics().!!!!drawline(canvas.x, canvas.y, p.x, p.y);!!canvas.x = p.x;!!!!!canvas.y = p.y;!!!!canvas.addpointtostroke(p);!! public void mousereleased(mouseevent e) {!!Point p = e.getpoint();!!!!canvas.endstroke(p);!!!! mousereleased! public class Scribble extends JFrame {! public Scribble() {! settitle("scribble Pad");!!!! getcontentpane().setlayout(new BorderLayout());! getcontentpane().add(createmenubar(), BorderLayout.NORTH);! canvas = new ScribbleCanvas();! getcontentpane().add(canvas, BorderLayout.CENTER);! addwindowlister(new WindowAdapter() {! public void windowclosing(windowevent e) {! exitaction.actionperformed(! new ActionEvent(Scribble.this, 0, null));! });!!... // methods (including main) and inner classes! protected ScribbleCanvas canvas;! protected String currentfilename;! protected ActionListener exitaction;! protected JFileChooser chooser = new JFileChooser(".");! 53! 54! Ændringer i applikationen! Nye metoder:!!createmenubar()!!newfile()!!openfile()!!savefile()!!savefileas()! Indlejrede lytterklasser:!!newfilelistener!!openfilelistener!!savefilelistener!!saveasfilelistener!!exitlistener!!colorlistener!!aboutlistener! protected JMenuBar createmenubar() {! JMenuBar menubar = new JMenuBar();! JMenu menu;! JMenuItem mi;! // File menu! menu = new JMenu("File");! menubar.add(menu);! mi = new JMenuItem("New");! menu.add(mi);! mi.addactionlistener(new NewFileListener());! mi = new JMenuItem("Open");! menu.add(mi);! mi.addactionlistener(new OpenFileListener());! mi = new JMenuItem("Save");! menu.add(mi);! mi.addactionlistener(new SaveFileListener());! 55! mi = new JMenuItem("Save As");! menu.add(mi);! mi.addactionlistener(new SaveAsFileListener());! menu.add(new JSeparator());! 56!

15 exitaction = new ExitListener();! mi = new JMenuItem("Exit");! menu.add(mi);! mi.addactionlistener(exitaction);! // option menu! menu = new JMenu("Option");! menubar.add(menu);! mi = new JMenuItem("Color");! menu.add(mi);! mi.addactionlistener(new ColorListener());! // horizontal space! menubar.add(box.createhorizontalglue());! // Help menu! menu = new JMenu("Help");! menubar.add(menu);! mi = new JMenuItem("About");! menu.add(mi);! mi.addactionlistener(new AboutListener());! return menubar;! 57! protected void newfile() {! currentfilename = null;! canvas.newfile();! settitle("scribble Pad");! protected void openfile(string filename) {! currentfilename = filename;! canvas.openfile(filename);! settitle("scribble Pad [" + currentfilename + "]");! protected void savefile() {! if (currentfilename == null)! currentfilename = "Untitled";! canvas.savefile(currentfilename);! settitle("scribble Pad [" + currentfilename + "]");! protected void savefileas(string filename) {! currentfilename = filename;! canvas.savefile(filename);! settitle("scribble Pad [" + currentfilename + "]");! 58! class ExitListener implements ActionListener {! public void actionperformed(actionevent e) {! int result = JOptionPane.showConfirmDialog(null,! "Do you want to exit Scribble Pad?",! "Exit Scribble Pad?",! JOptionPane.YES_NO_OPTION);! if (result == JOptionPane.YES_OPTION) {! savefile();! System.exit(0);! class AboutListener implements ActionListener {! public void actionperformed(actionevent e) {! JOptionPane.showMessageDialog(null,! "DrawingPad version 1.0\nCopyright (c) Xiaoping Jia 2002",! "About",! JOptionPane.INFORMATION_MESSAGE);! 59! 60!

16 class OpenFileListener implements ActionListener {! public void actionperformed(actionevent e) {! int retval = chooser.showdialog(null, "Open");! if (retval == JFileChooser.APPROVE_OPTION) {! File thefile = chooser.getselectedfile();! if (thefile!= null && thefile.isfile())! String filename = thefile.getabsolutepath();! openfile(filename);! 61! class SaveAsFileListener implements ActionListener {! public void actionperformed(actionevent e) {! int result = chooser.showdialog(null, "Save As");! if (result == JFileChooser.APPROVE_OPTION) {! File thefile = chooser.getselectedfile();! if (thefile!= null &&!thefile.isdirectory()) {! String filename = thefile.getabsolutepath();! savefileas(filename);!! 62! class NewFileListener implements ActionListener {! public void actionperformed(actionevent e) {! newfile();! class SaveFileListener implements ActionListener {! public void actionperformed(actionevent e) {! savefile();! class ColorListener implements ActionListener {! public void actionperformed(actionevent e) {! Color result = dialog.showdialog();! if (result!= null)! canvas.setcurcolor(result);! protected ColorDialog dialog =! new ColorDialog(Scribble.this,! "Choose color",! canvas.getcurcolor());! 63! 64!

17 public class ColorDialog extends JDialog implements ActionListener {! public ColorDialog(JFrame owner, String title, Color color) {... public Color showdialog() {... public void actionperformed(actionevent e) {... protected JButton okbutton;! protected JButton cancelbutton;! protected JButton morecolorbutton;! protected ColorPanel colorpanel;! protected JColorChooser chooser = new JColorChooser();! protected Color color, result;! class ColorPanel extends JPanel {... Implementation: se bogen! 65! 66! En simpel ColorListener! class ColorListener implements ActionListener {! public void actionperformed(actionevent e) {! Color result = JColorChooser.showDialog(! Scribble.this, "Choose color", Color.BLACK);! if (result!= null)! canvas.setcurcolor(result);! 67! 68!

18 Iteration 3! faktorisering for at opnå udvidelighed! Programstruktur! (iteration 3)! Scribble! ScribbleCanvas! ScribbleCanvasListener! (1) Indførelse af en form (Shape), hvor et strøg er et særtilfælde.! Serializable! *! Shape! 1! Tool! (2) Indførelse af et værktøj (Tool), der for hver mulig form reagerer på brugerhandlinger med musen.! Stroke! AbstractTool! *! Funktionaliteten er den samme som for iteration 2! Point! ScribbleTool! 69! 70! public class Stroke extends Shape {! public Stroke() { public Stroke(Color color) { super(color); public abstract class Shape implements Serializable {! public Shape() { public Shape(Color color) { this.color = color; public void setcolor(color color) { this.color = color; public Color getcolor() { return color; public abstract void draw(graphics g);! protected Color color = Color.black;! Bemærk brugen af designmønsteret Strategy.! Shape er en abstrakt strategi, Stroke en konkret strategi.! public List<Point> getpoints() { return points; public void addpoint(point p) { points.add(p); public void draw(graphics g) {! if (color!= null)! g.setcolor(color);! Point prev = null;! for (Point cur : points) {! if (prev!= null)! g.drawline(prev.x, prev.y, cur.x, cur.y);! prev = cur;! protected List<Point> points = new ArrayList<Point>();! // color and associate methods moved to the superclass Shape! 71! 72!

19 Hvorledes håndteres flere værktøjer?! En mulighed er at vedligeholde en heltalsvariabel, currenttool, der kan antage en af følgende værdier:! public static final int SCRIBBLE_TOOL = 0;! public static final int LINE_TOOL = 1;! public static final int RECTANGLE_TOOL = 2;!! public static final int OVAL_TOOL = 3;! Alternativt benytte Java 5.0 s typesikre enum-konstruktion:! public enum ToolType { SCRIBBLE_TOOL, LINE_TOOL,! RECTANGLE_TOOL, OVAL_TOOL };! mousepressed, mousedragged og mousereleased i klassen ScribbleCanvasListener ændres, så de får følgende struktur:! Point p = e.getpoint();! switch (ScribbleCanvas.getCurrentTool()) {! case ScribbleCanvas.SCRIBBLE_TOOL:! //...! break;! case ScribbleCanvas.LINE_TOOL:! //...! break;! case ScribbleCanvas.RECTANGLE_TOOL:! //...! break;! case ScribbleCanvas.OVAL_TOOL:! //...! break;! java.sun.com/j2se/1.5.0/docs/guide/language/enums.html! 73! 74! En bedre løsning! Førnævnte løsning er ufleksibel.! En bedre løsning er at indkapsle adfærden for hvert værktøj i en særskilt klasse.! Som fælles grænseflade for værktøjerne defineres!!!!!!!!!!!!public interface Tool {!!!!!! String getname();!!!!!!! void startshape(point p);!!!!! void addpointtoshape(point p);!!!!! void endshape(point p);!! 75! public abstract class AbstractTool implements Tool {! protected AbstractTool(ScribbleCanvas canvas, String name) {! this.canvas = canvas;! this.name = name;! public String getname() {! return name;! protected ScribbleCanvas canvas;! protected String name;! Bemærk brugen af designmønsteret Strategy.! AbstractTool er en abstrakt strategi, ScribbleTool en konkret strategi.! 76!

20 public class ScribbleTool extends AbstractTool {! public ScribbleTool(ScribbleCanvas canvas, String name) {! super(canvas, name);! public void startshape(point p) {! curstroke = new Stroke(canvas.getCurColor());! curstroke.addpoint(p);! public void addpointtoshape(point p) {! if (curstroke!= null) {! curstroke.addpoint(p);! Graphics g = canvas.getgraphics();! g.setcolor(canvas.getcurcolor());! g.drawline(canvas.x, canvas.y, p.x, p.y);! public void endshape(point p) {! if (curstroke!= null) {! curstroke.addpoint(p);! canvas.addshape(curstroke);! curstroke = null;! protected Stroke curstroke;! 77! Ændringer i ScribbleCanvasListener! public void mousepressed(mouseevent e) {!!! Point p = e.getpoint();!!!! canvas.x = p.x; canvas.y = p.y;!! tool.startshape(p);!!! public void mousedragged(mouseevent e) {!!!!! Point p = e.getpoint();!!canvas.getgraphics().drawline(canvas.x, canvas.y, p.x, p.y);!!canvas.x = p.x; canvas.y = p.y;!!tool.addpointtoshape(p);!!!!!!! public void mousereleased(mouseevent e) {! Point p = e.getpoint();!!tool.endshape(p);!! protected Tool tool;! 78! Ændringer i Scribble! public class Scribble extends JFrame {! public Scribble(String title) {! super(title);! // calling the factory method! canvas = makecanvas();!...!!! // the factory method! protected ScribbleCanvas makecanvas() {! return new ScribbleCanvas();! Ændringer i ScribbleCanvas! public class ScribbleCanvas extends JPanel {! public ScribbleCanvas() {! // calling factory method! listener = makecanvaslistener();!...! // factory method! protected EventListener makecanvaslistener() {! return new ScribbleCanvasListener(this);! public void paint(graphics g) {!...! for (Shape shape : shapes)!! shape.draw(g);!...! List<Shape> shapes = new ArrayList<Shape>();!...! 79! 80!

21 Iteration 4! Programstruktur! (iteration 4, formerne)! Serializable! ScribbleCanvas! *! Shape! DrawingCanvas! Stroke! TwoEndsShape! LineShape! RectangleShape! OvalShape! 81! 82! (x2, y2)! (x2, y2)! (x1, y1)! public abstract class TwoEndsShape extends Shape! implements Cloneable {! public TwoEndsShape() { public TwoEndsShape(Color color) { super(color); public void setends(int x1, int y1, int x2, int y2) {! this.x1 = x1; this.y1 = y1;! this.x2 = x2; this.y2 = y2;! public class LineShape extends TwoEndsShape {! public void draw(graphics g) {! g.setcolor(color);! g.drawline(x1, y1, x2, y2);! (x1, y1)! public Object clone() throws CloneNotSupportedException {! return super.clone();! abstract public void drawoutline(graphics g,! int x1, int y1,! int x2, int y2);! public void drawoutline(graphics g,! int x1, int y1, int x2, int y2) {! g.drawline(x1, y1, x2, y2);! protected int x1, y1, x2, y2;! 83! 84!

22 (x2, y2)! (x2, y2)! public class RectangleShape extends TwoEndsShape {! public void draw(graphics g) {! int x = Math.min(x1, x2);! int y = Math.min(y1, y2);! int w = Math.abs(x2 - x1) + 1;! int h = Math.abs(y2 - y1) + 1;! g.setcolor(color);! g.drawrect(x, y, w, h);! public void drawoutline(graphics g,! int x1, int y1,! int x2, int y2) {! int x = Math.min(x1, x2);! int y = Math.min(y1, y2);! int w = Math.abs(x2 - x1) + 1;! int h = Math.abs(y2 - y1) + 1;! g.drawrect(x, y, w, h);! x1! (x1, y1)! w = x2 - x1 + 1! x2! public class OvalShape extends TwoEndsShape {! public void draw(graphics g) {! int x = Math.min(x1, x2);! int y = Math.min(y1, y2);! int w = Math.abs(x1 - x2) + 1;! int h = Math.abs(y1 - y2) + 1;! g.setcolor(color);! g.drawoval(x, y, w, h);! public void drawoutline(graphics g,! int x1, int y1,! int x2, int y2) {! int x = Math.min(x1, x2);! int y = Math.min(y1, y2);! int w = Math.abs(x1 - x2) + 1;! int h = Math.abs(y1 - y2) + 1;! g.drawoval(x, y, w, h);! (x1, y1)! 85! 86! Programstruktur! (iteration 4, værktøjerne)! public class ToolKit {! protected List<Tool> tools = new ArrayList<Tool>();! protected Tool selectedtool;! Scrible! public void addtool(tool tool) { tools.add(tool); public int gettoolcount() { return tools.size(); DrawingPad1! 1! Toolkit! tools! *! Tool! public Tool gettool(int i) { return tools.get(i); 1! selectedtool! AbstractTool! TwoEndsTool! ScribbleTool! public Tool getselectedtool() { return selectedtool; public void setselectedtool(tool tool) { selectedtool = tool; public void setselectedtool(int i) {! Tool tool = gettool(i);! if (tool!= null)! selectedtool = tool;! fortsættes! 87! 88!

23 Designmønsteret State! public Tool findtool(string name) {! for (Tool tool : tools)! if (tool.getname().equals(name)))! return tool;! return null;! public Tool setselectedtool(string name) {! Tool tool = findtool(name);! if (tool!= null)! selectedtool = tool;! return tool;! Kategori:!!!!!!!!Adfærdsmæssigt designmønster! Hensigt:!!!!!!!!At gøre det muligt, at et objekt kan ændre adfærd, når dets interne!!tilstand ændres.! Anvendelse:!!Når et objekts adfærd afhænger at dets tilstand, og det må ændre!!adfærd på kørselstidspunktet, når dets tilstand ændres (f.eks. når et!!nyt værktøj vælges)!!metoder har betingede flervejssætninger, der afhænger af objektets!tilstand (f.eks. switch-sætninger i ScribbleCanvasListener).! 89! Andre navne:!!!!!!!!objects for states! 90! Struktur:! Context! request()! Designmønsteret State! (fortsat)! state! 1! State! handle()! Deltagere:! Designmønsteret State! (fortsat)! Context (f.eks. Toolkit), der har en instans af ConcreteState, der! definerer den aktuelle tilstand (f.eks. selectedtool-feltet i Toolkit)! state.handle()! ConcreteStateA! handle()! ConcreteStateB! handle()! State (f.eks. Tool), der definerer en grænseflade til indkapsling af adfærden knyttet til en given tilstand for Context! ConcreteState (f.eks. ScribbleTool), hvor hver underklasse implementerer en adfærd (f.eks. startshape)! 91! 92!

24 public class TwoEndsTool extends AbstractTool {! public static final int LINE = 0, OVAL = 1, RECT = 2;! public TwoEndsTool(ScribbleCanvas canvas, String name, int shape) {! super(canvas, name);! this.shape = shape;! public void startshape(point p) {... public void addpointtoshape(point p) {... public void endshape(point p) {... protected int shape = LINE;! protected int xstart, ystart;! // helper methods! private static void drawline(graphics g,! int x1, int y1, int x2, int y2) {... private static void drawrect(graphics g,! int x, int y, int w, int h) {... private static void drawoval(graphics g,! int x, int y, int w, int h) {... public void startshape(point p) {! xstart = canvas.x = p.x;! ystart = canvas.y = p.y;! Graphics g = canvas.getgraphics();!!! g.setcolor(color.lightgray);! switch (shape) {! case LINE:! drawline(g, xstart, ystart, xstart, ystart);!! break;! case OVAL:! drawoval(g, xstart, ystart, 1, 1);!! break;! case RECT:! drawrect(g, xstart, ystart, 1, 1);! 93! 94! public void addpointtoshape(point p) {! Graphics g = canvas.getgraphics();! g.setxormode(color.white);! g.setcolor(color.lightgray);! switch (shape) {! case LINE:! drawline(g, xstart, ystart, canvas.x, canvas.y);! drawline(g, xstart, ystart, p.x, p.y);! break;! case OVAL:! drawoval(g, xstart, ystart,! canvas.x - xstart + 1, canvas.y - ystart + 1);! drawoval(g, xstart, ystart,! p.x - xstart + 1, p.y - ystart + 1);! break;! case RECT:! drawrect(g, xstart, ystart,! canvas.x - xstart + 1, canvas.y - ystart + 1);! drawrect(g, xstart, ystart,! p.x - xstart + 1, p.y - ystart + 1);! canvas.x = p.x;! canvas.y = p.y;! public void endshape(point p) {! TwoEndsShape newshape = null;! switch (shape) {! case LINE:! newshape = new LineShape();! break;! case OVAL:! newshape = new OvalShape();! break;! case RECT:! newshape = new RectangleShape();! newshape.setcolor(canvas.getcurcolor());! newshape.setends(xstart, ystart, p.x, p.y);! canvas.addshape(newshape);! Graphics g = canvas.getgraphics();! g.setpaintmode();! canvas.repaint();! 95! 96!

25 h! w! (x,y)! Programstruktur! (iteration 4, overordnet)! private static void drawline(graphics g,! int x1, int y1, int x2, int y2) {! g.drawline(x1, y1, x2, y2);! private static void drawrect(graphics g,! int x, int y, int w, int h) {! if (w < 0) { x = x + w; w = -w; if (h < 0) { y = y + h; h = -h; g.drawrect(x, y, w, h);! private static void drawoval(graphics g,! int x, int y, int w, int h) {! if (w < 0) { x = x + w; w = -w; if (h < 0) { y = y + h; h = -h; g.drawoval(x, y, w, h);! Scribble! Scrible()!...! makecanvas()!...! ScribbleCanvas! ScribbleCanvas()!...! makecanvaslistener()!...! ScribbleCanvasListener! DrawingPad1! makecanvas()! DrawingCanvas! makecanvaslistener()! DrawingCanvasListener! 97! Nedarvning! 98! Designmønsteret Factory Method! Kategori:!!!!!!!Konstruerende designmønster! Struktur:! Designmønsteret Factory Method! (fortsat)! Hensigt:!!!!!!!At definere en grænseflade til skabelse af et objekt, men lade!underklasserne bestemme fra hvilken klasse, det skal skabes! Anvendelse:!!Når en klasse ikke kan forudse, hvilken type objekt, den skal skabe!!!når en klasse ønsker, at dens underklasser skal afgøre, hvilke!!!objekter, der skal skabes! Product! ConcreteProduct! Creator! factorymethod()! anoperation()! ConcreteCreator! factorymethod()!...! product = factorymethod()!...! Andre navne:!!!!!!!virtual constructor! return new ConcreteProduct()! 99! 100!

26 Designmønsteret Factory Method! (fortsat)! Deltagere:!!!!!!!!!! Product (f.eks. EventListener), der definerer en grænseflade for de! objekter, factory-metoden skaber! ConcreteProduct (f.eks. DrawingCanvasListener), der implementerer Product-grænsefladen!!!!!!!!!! Creator (f.eks. Scribble), som erklærer en eller flere factory-metoder! (f.eks. makecanvaslistener), som returnerer et objekt af typen Product.!!!!!!!!! ConcreteCreator (f.eks. DrawingPad1), der implementerer factory-metoden, så den returnerer et objekt af typen ConcreteProduct.! public class DrawingCanvasListener extends ScribbleCanvasListener {! public DrawingCanvasListener(DrawingCanvas canvas) {! super(canvas);! Klassen DrawingCanvasListener! tillader brug af flere værktøjer! public Tool gettool() { return tool; public void settool(tool tool) { this.tool = tool; 101! 102! public class DrawingCanvas extends ScribbleCanvas {! public void settool(tool tool) {! drawingcanvaslistener.settool(tool);! Klassen DrawingCanvas! tillader brug af flere værktøjer! public Tool gettool() {! return drawingcanvaslistener.gettool();! protected EventListener makecanvaslistener() {! return (drawingcanvaslistener = new DrawingCanvasListener(this));! protected DrawingCanvasListener drawingcanvaslistener;! 103! public class DrawingPad1 extends Scribble {! public DrawingPad1(String title) {! super(title);! inittools();! ActionListener toollistener = new ActionListener() {! public void actionperformed(actionevent event) {! Object source = event.getsource();! if (source instanceof AbstractButton) {!! AbstractButton button = (AbstractButton) source;!! Tool tool = toolkit.setselectedtool(button.gettext());!! drawingcanvas.settool(tool);!!! };! JComponent toolbar = createtoolbar(toollistener);! getcontentpane().add(toolbar, BorderLayout.WEST);! JMenu menu = createtoolmenu(toollistener);! menubar.add(menu, 1); // insert at index position 1! fortsættes! 104!

27 protected ToolKit toolkit;! protected DrawingCanvas drawingcanvas;! public Tool getselectedtool() {! return toolkit.getselectedtool();! protected void inittools() {! toolkit = new ToolKit();! toolkit.addtool(new ScribbleTool(canvas,! "Scribble"));! toolkit.addtool(new TwoEndsTool(canvas,! "Line", TwoEndsTool.LINE));! toolkit.addtool(new TwoEndsTool(canvas,! "Oval", TwoEndsTool.OVAL));! toolkit.addtool(new TwoEndsTool(canvas,! "Rectangle", TwoEndsTool.RECT));! drawingcanvas.settool(toolkit.gettool(0));! protected ScribbleCanvas makecanvas() {! return (drawingcanvas = new DrawingCanvas());! fortsættes! 105! protected JComponent createtoolbar(actionlistener toollistener) {! JPanel toolbar = new JPanel(new GridLayout(0, 1));! int n = toolkit.gettoolcount();! for (int i = 0; i < n; i++) {! Tool tool = toolkit.gettool(i);! JButton button = new JButton(tool.getName());! button.addactionlistener(toollistener);! toolbar.add(button);! return toolbar;! protected JMenu createtoolmenu(actionlistener toollistener) {! JMenu menu = new JMenu("Tools");! int n = toolkit.gettoolcount();! for (int i = 0; i < n; i++) {! Tool tool = toolkit.gettool(i);! JMenuItem menuitem = new JMenuItem(tool.getName());! menuitem.addactionlistener(toollistener);! menu.add(menuitem);! return menu;! 106! Iteration 5! Programstruktur! (iteration 5, værktøjer)! DrawingPad1! DrawingPad2! 1! Toolkit! tools! *! Tool! selectedtool! 0..1! AbstractTool! TwoEndsShape! 1! TwoEndsShapeTool! Ny klasse. Erstatter TwoEndsTool! ScribbleTool! 107! 108!

28 Programstruktur! (iteration 5, former)! Shape! Stroke! TwoEndsShape! 1! TwoEndsShapeTool! LineShape! RectangleShape! OvalShape! public class FilledOvalShape extends OvalShape {! public void draw(graphics g) {! int x = Math.min(x1, x2);! int y = Math.min(y1, y2);! int w = Math.abs(x1 - x2) + 1;! int h = Math.abs(y1 - y2) + 1;! g.setcolor(color);! g.filloval(x, y, w, h);! FilledRectangleShape! FilledOvalShape! 109! 110! public class TwoEndsShapeTool extends AbstractTool {! public TwoEndsShapeTool(ScribbleCanvas canvas, String name,! TwoEndsShape prototype) {! super(canvas, name);! this.prototype = prototype;! public class FilledRectangleShape extends RectangleShape {! public void draw(graphics g) {! int x = Math.min(x1, x2);! int y = Math.min(y1, y2);! int w = Math.abs(x1 - x2) + 1;! int h = Math.abs(y1 - y2) + 1;! g.setcolor(color);! g.fillrect(x, y, w, h);! protected int xstart, ystart;! protected TwoEndsShape prototype;! public void startshape(point p) {! xstart = canvas.x = p.x;! ystart = canvas.y = p.y;! Graphics g = canvas.getgraphics();! g.setxormode(color.white);! g.setcolor(color.lightgray);! prototype.drawoutline(g, xstart, ystart, xstart, ystart);! fortsættes! 111! 112!

29 Iteration 6! public void addpointtoshape(point p) {! Graphics g = canvas.getgraphics();! g.setxormode(color.white);! g.setcolor(color.lightgray);! prototype.drawoutline(g, xstart, ystart, canvas.x, canvas.y);! prototype.drawoutline(g, xstart, ystart, p.x, p.y);! public void endshape(point p) {! try {! TwoEndsShape newshape = (TwoEndsShape) prototype.clone();! newshape.setcolor(canvas.getcurcolor());! newshape.setends(xstart, ystart, p.x, p.y);! canvas.addshape(newshape);! } catch (CloneNotSupportedException e) { Graphics g = canvas.getgraphics();! g.setpaintmode();! canvas.repaint();! 113! 114! Programstruktur! (iteration 6)! Input fra tastatur! DrawingPad2! 1. Kun én komponent ad gangen kan modtage input fra tastaturet.! DrawingPad3! Shape! 1! tools! *! Toolkit! Tool! 0..1! selectedtool! 3. For at modtage input fra tastaturet, må en komponent have tastaturfokus.! Stroke! TwoEndsShape! Text! AbstractTool! 4. En komponent kan opnå tastaturfokus ved hjælp af metoden requestfocus().! 1! TextTool! TwoEndsShapeTool! ScribbleTool! I DrawingPad3 kaldes canvas.requestfocus(), når brugeren efter valg af TextTool klikker med musen på tegneområdet (canvas)! 115! 116!

30 Valg af Tool! Et værktøj kan vælges såvel ved tryk på en knap på værktøjslinjen som ved valg af et menuemne (som også er en knap).! I begge tilfælde er aktionen den samme.! Grænsefladen Action er en udvidelse af ActionListener, som med fordel kan benyttes i tilfælde, hvor funktionaliteten er den samme for flere kontroller.! Konkrete klasser er ofte underklasser af den abstrakte klasse AbstractAction, som implementerer alle metoder i Action, med undtagelse af actionperformed.! Java 2D! Tilbyder avancerede faciliteter til grafiske manipulationer.!!klassen Graphics2D er en underklasse af klassen Graphics, som!tilføjer yderligere grafiske primitiver og attributter.!!!public void paint(graphics g) {!! Grapichs2D g2d = (Graphics2D) g;!! // use g2d!!...!!!!grænsefladerne Shape, Stroke, Paint og Composite.!!Klassen java.awt.geom.affinetransform gør det muligt!at parallelforskyde, skalere, rotere og klippe figurer.!! 117! 118! Ugeseddel 7" 12. oktober oktober! Ekstraopgave 5!!Læs kapitel 11 i lærebogen (side )!!Løs opgave 9.1 (a), dog kun for diamanter.!!de nødvendige koordinatberegninger er angivet på!!figuren nedenfor.! (x 1, y 1 )! ((x 1 +x 2 +y 1 -y 2 )/2, (y 1 +y 2 -x 1 +x 2 )/2)! (x 2, y 2 )! ((x 1 +x 2 -y 1 +y 2 )/2, (y 1 +y 2 +x 1 -x 2 )/2)! Skriv en grafisk applet, der kan blande et spil kort.!! En mulig brugergrænseflade er vist på næste side.! Til brug for programmeringen kan klasserne Card og Deck benyttes. Disse kan sammen med de nødvendige billedfiler (gifs) hentes fra adressen! opgaven på de næste sider.! 119! 120!

31 121!

Grafiske brugergrænseflader II

Grafiske brugergrænseflader II Grafiske brugergrænseflader II 1 Plan MVC (Model View Controller) - designmønsteret Observer Iterativ udvikling af et tegneprogram - muselyttere - applet/applikation-idiomet - designmønsteret State - designmønsteret

Læs mere

import java.awt.event.*; import java.awt.*; Container <- Panel <- Applet Component <- Button <- Checkbox <- ScrollPane <- Label

import java.awt.event.*; import java.awt.*; Container <- Panel <- Applet Component <- Button <- Checkbox <- ScrollPane <- Label Programmering 1999 Forelæsning 13, tirsdag 12. oktober 1999 Oversigt Grafiske brugergrænseflader. Komponenter: Knapper, tekstfelter, checkbokse... Vinduer (containere). Hændelser, hændelsesstyret programmering.

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java Dag 6 Komponenter (og lidt Swing og MVC) Læsning: VP 4, evt. VP 6 Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html Grafiske komponenter

Læs mere

Forelæsning Uge 13 Mandag

Forelæsning Uge 13 Mandag Forelæsning Uge 13 Mandag Konstruktion af grafiske brugergrænseflader (GUI'er) Definition af de elementer, der vises på skærmen (vinduer, knapper, menuer, scrollbarer, tekster, osv.) Hvordan reagerer de

Læs mere

Kursusgang 11. Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing

Kursusgang 11. Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing Kursusgang 11 Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing Design af brugerflader 11.1 Samme sted Forskellige steder Sidste kursusgang Samtidigt

Læs mere

Forelæsning Uge 13 Torsdag

Forelæsning Uge 13 Torsdag Forelæsning Uge 13 Torsdag Konstruktion af grafiske brugergrænseflader (GUI'er) Definition af de elementer, der vises på skærmen (vinduer, knapper, menuer, scrollbarer, tekster, osv.) Hvordan reagerer

Læs mere

Hvordan organiseres et programs grafik-elementer? OOP e uge kursusgang. Advarsel! Component-objekter

Hvordan organiseres et programs grafik-elementer? OOP e uge kursusgang. Advarsel! Component-objekter OOP e2002 - uge 42 6. kursusgang Hvordan organiseres et programs grafik-elementer? 1. Teori: class Component og subklasser: Composite pattern layout-managere hændelsesstyret programmering 2. XP-program:

Læs mere

OOP e uge kursusgang: Grafik (II) class Scribble (Tegnebrættet) Frihåndstegning: repræsentation

OOP e uge kursusgang: Grafik (II) class Scribble (Tegnebrættet) Frihåndstegning: repræsentation OOP e2002 - uge 43 class Scribble (Tegnebrættet) Det simplest mulige tegnebræt kun en funktion: tegn streger med musen ingen kontrolknapper/valgmuligheder skal dog kunne "holde til" at ændre størrelse

Læs mere

Serialization i Java

Serialization i Java Serialization i Java Tutorial lavet af Jákup W. Hansen TSU 2006 1.semester 06.novemter 2006 Hvad er Serialization? I vores tekstbog Objects First with Java bliver denne del af Java ikke gennemgået. Men

Læs mere

Civilingeniøreksamen 49104 12. januar 2001. Skriftelig prøve den 12. januar 2001 Kursusnummer 49104

Civilingeniøreksamen 49104 12. januar 2001. Skriftelig prøve den 12. januar 2001 Kursusnummer 49104 Skriftelig prøve den 12. januar 2001 Kursusnummer 49104 Kursusnavn: Programmering. Tilladte hjælpemidler: Alle skriftlige hjælpemidler Opgavesættet består af fire opgaver, der har følgende vægtning: Opgave

Læs mere

Grundlæggende Programmering ITU, Efterår 1999. Skriftlig eksamen i Grundlæggende Programmering

Grundlæggende Programmering ITU, Efterår 1999. Skriftlig eksamen i Grundlæggende Programmering Skriftlig eksamen i Grundlæggende Programmering ITU, 20. januar 2000 Alle hjælpemidler tilladt, dog ikke datamat. Eksamen er skriftlig, fire timer, og bedømmes efter 13-skalaen. Opgavesættet består af

Læs mere

DM34-1. Obligatorisk opgave Dilemma spillet. Jacob Aae Mikkelsen 191076 kok04

DM34-1. Obligatorisk opgave Dilemma spillet. Jacob Aae Mikkelsen 191076 kok04 DM34-1. Obligatorisk opgave Dilemma spillet Jacob Aae Mikkelsen 191076 kok04 April 2005 Kapitel 1 Resumé Denne rapport dokumenterer udviklingsforløbet og afprøvningen af et spil Dilemma. Spillet går ud

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java Dag 7 Swing og MVC Swing: MVC, Datamodeller, JTable, evt. JTree Evt.: Swing: Præsentations og kontroldel Læsning: VP 6 Dette materiale er under Åben Dokumentlicens, se

Læs mere

Ugeseddel 4 1. marts - 8. marts

Ugeseddel 4 1. marts - 8. marts Ugeseddel 4 1. marts - 8. marts Læs følgende sider i kapitel 6 i lærebogen: s. 233 258 og s. 291 317 (afsnit 6.3 overspringes). Begynd at overveje, hvad afleveringsopgaven skal omhandle. Læs vejledningen,

Læs mere

Jacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004

Jacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004 Genbrugelige komponenter og designmønstre i Java Jacob Nordfalk Ingeniørhøjskolen i København Nykøbing F itvisioncenter 24. februar 2004 Program Om Jacob Nordfalk introduktion (ikke-teknisk del) Komponentbaseret

Læs mere

Konstruktion af grafiske brugergrænseflader (GUI'er)

Konstruktion af grafiske brugergrænseflader (GUI'er) Forelæsning Uge 13 Konstruktion af grafiske brugergrænseflader (GUI'er) Definition af de elementer, der vises på skærmen (vinduer, knapper, menuer, scrollbarer, tekster, osv.) Hvordan reagerer de på input

Læs mere

Kursusgang 12. Oversigt: Sidste kursusgang Layout-manager Event-håndtering. Design af brugerflader 12.1

Kursusgang 12. Oversigt: Sidste kursusgang Layout-manager Event-håndtering. Design af brugerflader 12.1 Kursusgang 12 Oversigt: Sidste kursusgang Layout-manager Event-håndtering Design af brugerflader 12.1 Sidste kursusgang Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design

Læs mere

DANMARKS TEKNISKE UNIVERSITET

DANMARKS TEKNISKE UNIVERSITET DANMARKS TEKNISKE UNIVERSITET Skriftlig prøve, 14. december 2018, 4 timer Side 1 af 18 Kursus navn: 02101 Indledende Programmering Kursus : 02101 Tilladte hjælpemidler: Ikke-digitale skriftlige hjælpemidler

Læs mere

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne. Exercise 1: Opgave 9.1 på CodeJudge. a) Lav klasserne Cirkel, Rektangel og Kvadrat, som implementerer vedhæftede interface From.java (se CodeJudge). Lav Rektangel før du laver Kvadrat. Kan du bruge nedarvning

Læs mere

DM01 DM01. 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 18/3-2003. Side 1 af 11

DM01 DM01. 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 18/3-2003. Side 1 af 11 DM01 DM01 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk D12, Elias 18/3-2003 Side 1 af 11 DM01 Indholdsfortegnelse: BILAG:...2 1 FORMÅL:...3 2 KLASSER:...4 2.1 DILEMMA:...4 2.1.1 METODER:...4

Læs mere

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11 DM503 Forelæsning 11 Generics Pakker Exceptions Indhold Generics Nedarvning og Generics Generics Nedarvning og Generics Husk Box fra sidst Generics public class Box {! private T object;! public void

Læs mere

Tree klassen fra sidste forelæsning

Tree klassen fra sidste forelæsning Programmering 1999 Forelæsning 12, fredag 8. oktober 1999 Oversigt Abstrakte klasser. Grænseflader. Programmering 1999 KVL Side 12-1 Tree klassen fra sidste forelæsning class Tree { int age; // in years

Læs mere

Objektorienterede metoder

Objektorienterede metoder Objektorienterede metoder Denne gang: Designmønstre Skabende designmønstre: Fabrikeringsmetode/Fabrik, Singleton, Abstrakt fabrik (Toolkit), Prototype, Objektpulje Singleton eksempel: Forskellige slags

Læs mere

5. Teknisk beskrivelse af programmet 5.1 Programmets primære strukturer Datastruktur 1-6 3-6 Datastruktur

5. Teknisk beskrivelse af programmet 5.1 Programmets primære strukturer Datastruktur 1-6 3-6 Datastruktur 5. Teknisk beskrivelse af programmet Afsnittet indeholder en beskrivelse af de vigtigste klasser i programmet. (Den tekniske beskrivelse af databasen er givet i afsnit 3.3 Databasedesign på side 20.) Dette

Læs mere

Dag 10 Flertrådet programmering

Dag 10 Flertrådet programmering Videregående programmering i Java Dag 10 Flertrådet programmering Fremlæggelse af programmering/status for projekter Dokumentation med javadoc Flertrådede designmønstre: Arbejdstråd, Producent Konsument,

Læs mere

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning Datalogi OB, Efterår 2002 OH er, forelæsning 10/9-2002 Klasser og nedarvning Hvad er formålet? Typer, generisk kode, typeparameterisering Kritisk kig på, hvordan man gør i Java. Eftermiddagens opgave:

Læs mere

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 Opgavebesvarelsen skal afleveres som enten en printerudskrift eller som et passende dokument sendt via email til fjj@noea.dk. Besvarelsen skal

Læs mere

Over Forelæsning omponenter ogrammering sigt 14, 1999 freda containere 15. oktober 1999 Eksempel: out GUI til beregning fakultet.

Over Forelæsning omponenter ogrammering sigt 14, 1999 freda containere 15. oktober 1999 Eksempel: out GUI til beregning fakultet. Programmering 1999 Forelæsning 14, fredag 15. oktober 1999 Oversigt Repetition: GUI komponenter og containere. Layout af grafiske brugergrænseflader i Java. Større layout-opgave. Programmering 1999 KVL

Læs mere

Introduktion til ActionScript, fortsat

Introduktion til ActionScript, fortsat Introduktion til ActionScript, fortsat Kaspar Rosengreen Nielsen kaspar@interactivespaces.net i n t e r a c t i v e s p a c e s. n e t Kaspar Nielsen, kaspar@interactivespaces.net 1 Dagens program Opsamling

Læs mere

A Profile for Safety Critical Java

A Profile for Safety Critical Java A Profile for Safety Critical Java Martin Schoeberl Hans Søndergaard Bent Thomsen Anders P. Ravn Præsenteret af: Henrik Kragh-Hansen November 8, 2007 Forfatterne Martin Schoeberl Udvikler af JOP processoren

Læs mere

Databaseadgang fra Java

Databaseadgang fra Java Databaseadgang fra Java Grundlæggende Programmering med Projekt Peter Sestoft Fredag 2007-11-23 Relationsdatabasesystemer Der er mange databaseservere Microsoft Access del af Microsoft Office MySQL god,

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java Dag 3 Skabende designmønstre Skabende designmønstre: Fabrikeringsmetode/Fabrik, Singleton, Abstrakt fabrik (Toolkit), Prototype, Objektpulje Eksempel: Forskellige slags

Læs mere

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004 Overvågningssystem Beskrivelse Bagagesorteringssystemet består af et antal skranker (check-in) til modtagelse og registrering af bagage, et automatiseret sorteringsanlæg samt et antal terminaler (gates),

Læs mere

Programmering. Udvidet Programmering. Kurserne. Kurset: programmering i sproget Java. Lærerne: Morten Larsen og Peter Sestoft

Programmering. Udvidet Programmering. Kurserne. Kurset: programmering i sproget Java. Lærerne: Morten Larsen og Peter Sestoft Kurserne Kurset: programmering i sproget Java Programmering og Udvidet Programmering Lærerne: Morten Larsen og Peter Sestoft Kursusmål: I skal lære at skrive interessante programmer i Java Forudsætninger:

Læs mere

Bilag 1 Rige billeder Ordremodtagelse

Bilag 1 Rige billeder Ordremodtagelse Bilag1 Rigebilleder Ordremodtagelse Tværfagligtprojektpå2.Semester Bilag afchristian,kennetogmartin 71 Overordnet Tværfagligtprojektpå2.Semester Bilag afchristian,kennetogmartin 72 Produktionsgulvet Tværfagligtprojektpå2.Semester

Læs mere

Løsning af møntproblemet

Løsning af møntproblemet Løsning af møntproblemet Keld Helsgaun RUC, oktober 1999 Antag at tilstandene i problemet (stillingerne) er repræsenteret ved objekter af klassen State. Vi kan da finde en kortest mulig løsning af problemet

Læs mere

Software Construction 1 semester (SWC) Spørgsmål 1

Software Construction 1 semester (SWC) Spørgsmål 1 Spørgsmål 1 Objekter #1 Giv en kort præsentation af begrebet objekt, samt hvorledes du erklærer(declare), opretter(create) og bruger objekter Du kan beskrive o Datatyper o Variable / Instans variable /

Læs mere

Eksempel på en database: studenter, kurser, eksamener

Eksempel på en database: studenter, kurser, eksamener Udvidet Programmering 1999 Forelæsning 20, fredag 12. november 1999 Relationsdatabaser: relationer, tupler, attributter Forespørgselssproget SQL Databasesystemet PostgreSQL Tilgang til relationsdatabaser

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java VPJ dag 1 Introduktion og overblik over kurset Datastrukturer: Lister, mængder og iteratorer Opsamling: Grafikprogrammering, komponenter, containere og layout Bruge komponenter

Læs mere

Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag Forelæsning Uge 3 Torsdag Billedredigering (bl.a. brug af for-løkker) Gråtonebilleder (som er lidt simplere end farvebilleder) Arrays Kan "opbevare" et antal objekter (som ArrayList) Fast (på forhånd kendt)

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java Dag 5 Model View Controller arkitekturen Model View Controller arkitekturen (MVC) Evt.: Rekursion Læsning: VP 19 Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html

Læs mere

Eksempel: Skat i år 2000

Eksempel: Skat i år 2000 Kursus 02199: Programmering afsnit 2.1-2.7 Anne Haxthausen IMM, DTU 1. Værdier og typer (bl.a. char, boolean, int, double) (afsnit 2.4) 2. Variable og konstanter (afsnit 2.3) 3. Sætninger (bl.a. assignments)

Læs mere

Klasser og nedarvning

Klasser og nedarvning Datalogi C, Efterår 2004 OH er, forelæsning 21/9-2004 Klasser og nedarvning Hvad er formålet? Typer, generisk kode, typeparameterisering Kritisk kig på, hvordan man gør i Java. Opgaven til senere: Generalisere

Læs mere

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation). Denne guide er oprindeligt udgivet på Eksperten.dk RMI introduktion Denne artikel beskriver Java RMI (Remtote Method Invocation). Den beskriver teorien bag RMI, viser et simpelt kode eksempel og forklarer

Læs mere

Introduktion til design patterns.

Introduktion til design patterns. Introduktion til design patterns. Genbrug. Pattern languges i arkitektur. Standardbeskrivelse af design patterns. Oversigt over design patterns. Observer. Composite. Decorator. Abstract Factory. Patterns

Læs mere

Introduktion til ActionScript

Introduktion til ActionScript Introduktion til ActionScript Kaspar Rosengreen Nielsen kaspar@interactivespaces.net i n t e r a c t i v e s p a c e s. n e t Kaspar Nielsen, kaspar@interactivespaces.net 1 Dagens program Opsamling på

Læs mere

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java Kursus i OOP og Java Kursus i Objektorienteret programmering i Java Åben Dokumentlicens Dette foredragsmateriale er under Åben Dokumentlicens (ÅDL) Du har derfor lov til frit at kopiere dette værk Bruger

Læs mere

Dag 10 Flertrådet programmering

Dag 10 Flertrådet programmering Videregående programmering i Java Dag 10 Flertrådet programmering Fremlæggelse af programmering/status for projekter Dokumentation med javadoc Flertrådede designmønstre: Arbejdstråd, Producent Konsument,

Læs mere

C# spil (del 1) - Kom i gang med et simpelt spil

C# spil (del 1) - Kom i gang med et simpelt spil Denne guide er oprindeligt udgivet på Eksperten.dk C# spil (del 1) - Kom i gang med et simpelt spil Denne artikel starter helt fra grunden (med GDI). Den viser hvordan man undgår flimmer, og hvordan man

Læs mere

Eksamens spørgsmål i Java HTML - DataBase 3. Semester (i)

Eksamens spørgsmål i Java HTML - DataBase 3. Semester (i) Eksamens spørgsmål i Java HTML - DataBase 3. Semester (i) 1: KLASSE METODE KONSTRUKTØR EKS. PÅ TYPE (VARIABLE) PUBLIC/PRIVATE OBJECT UD FRA KLASSE KALD METODE TILFØR PARAMETER TIL METODE RETURNERE VARIBEL.

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 29. februar, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

9.8 Kildekode. side 88. Pakke Klasse Sidenummer. fortsætter..

9.8 Kildekode. side 88. Pakke Klasse Sidenummer. fortsætter.. 9.8 Kildekode Pakke Klasse Sidenummer db Aktivitetstype 91 Behandler 91 ConnectDB 92 DagensKommentar 93 Helligdag 94 IkkePrimaerTid 94 Patient 96 Patientaftale 96 PatientAktivitet 97 Patientgruppe 98 PatientgruppeItem

Læs mere

JavaFX. Denne artikel beskriver Java's nye GUI framework JavaFX. Den forudsætter et vist kendskab til Java og GUI udvikling.

JavaFX. Denne artikel beskriver Java's nye GUI framework JavaFX. Den forudsætter et vist kendskab til Java og GUI udvikling. Denne guide er oprindeligt udgivet på Eksperten.dk JavaFX Denne artikel beskriver Java's nye GUI framework JavaFX. Den forudsætter et vist kendskab til Java og GUI udvikling. Skrevet den 28. jul 2013 af

Læs mere

OOP e uge kursusgang: Samtidighed (II) Safety = sikkerhed. Safety

OOP e uge kursusgang: Samtidighed (II) Safety = sikkerhed. Safety = sikkerhed I denne sammenhæng: = "trådsikkerhed" " conditions.. stipulate that nothing bad will ever happen" (XP s. 377) Trådsikkerhed betyder sikkerhed mod inkonsistens pga. flertrådning ikke f.eks.

Læs mere

Java Klasse nedarvninger

Java Klasse nedarvninger Denne guide er oprindeligt udgivet på Eksperten.dk Java Klasse nedarvninger Et let lille overblik i hvordan klasse nedarvning virker i java Skrevet den 07. dec 2011 af mochners I kategorien Programmering

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java Dag 2 Objektorienterede principper Fastlæggelse af emne for projekt Ansvarsområder, kobling og indkapsling Programmere i pakker Specificere funktionalitet i et interface

Læs mere

Objektorienteret Programmering

Objektorienteret Programmering Objektorienteret Programmering Struktureret Systemudvikling Jan Bendtsen Automation and Control Indhold Lidt om programmeringssprog Klasser i Java Klasser i C++ Oversættelse og kørsel af kode Et eksempel:

Læs mere

Introduktion til ActionScript

Introduktion til ActionScript Introduktion til ActionScript Kaspar Rosengreen Nielsen kaspar@interactivespaces.net HUSK: Studentermøde for datalogistuderende Torsdag d. 11/2 kl. 15 - i lokale Ada 333 Har du en mening om dit studie?

Læs mere

class subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree.

class subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree. Programmering 1999 Forelæsning 11, tirsdag 5. oktober 1999 Oversigt Klasse-hierarkier: superklasser og subklasser Nedarvning Polymorfi Programmering 1999 KVL Side 11-1 Hierarkier En klasse repræsenterer

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 20. marts, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Kursus i OOP og Java

Kursus i OOP og Java Kursus i OOP og Java Sidst opdateret 24. november 2001 kun afpudset t.o.m lektion 12 Indholdsfortegnelse Kursus i OOP og Java 1 Til underviseren 5 Om transparenterne 5 Om ugesedlerne 5 Lektion 1 6 Mål

Læs mere

I profil-feltet kan imastra-kunder vælge om upload skal ske ligesom filerne var indsendt til mailboksen eller

I profil-feltet kan imastra-kunder vælge om upload skal ske ligesom filerne var indsendt til mailboksen eller Upload fil Upload fil skal ses som et alternativ til at indsende tællefiler vedhæftet til mails Upload fil kan være en hurtigere og mere håndholdt måde at få data ind i Mastra på. Man starter med via Gennemse

Læs mere

Singleton pattern i Java

Singleton pattern i Java Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i Java Denne artikel beskriver Singleton pattern og implementation i Java. Den forudsætter kendskab til Java men ikke til Singleton.

Læs mere

SWC eksamens-spørgsmål. Oversigt

SWC eksamens-spørgsmål. Oversigt SWC eksamens-spørgsmål Oversigt #1 Typer og variable #2 Aritmetik og logik #3 Klasser (definition, objekter) #4 Klasser (metoder) #5 Klasser (nedarvning, polymorfi) #6 Conditional statements #7 Repetition

Læs mere

Klasser og objekter. (Afsnit i manualen)

Klasser og objekter. (Afsnit i manualen) Klasser og objekter (Afsnit 4 + 5 i manualen) Grundbegreber Klasser og objekter beskrivelse oprettelse Attributter og metoder tilstand opførsel Indkapsling afskærmning datarepræsentationsuafhængighed Klasser

Læs mere

Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag Forelæsning Uge 3 Torsdag Billedredigering Gråtonebilleder (som er lidt simplere end farvebilleder) Arrays Kan "opbevare" et antal objekter (som ArrayList) Fast (på forhånd kendt) antal elementer Afleveringsopgave:

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 13. marts, 2018 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2 DM502 Forelæsning 2 Repetition Kompilere og køre Java program javac HelloWorld.java java HeloWorld.java Debugge Java program javac -g HelloWorld.java jswat Det basale Java program public class HelloWorld

Læs mere

Objects First with Java A Practical Introduction Using BlueJ

Objects First with Java A Practical Introduction Using BlueJ Objects First with Java A Practical Introduction Using BlueJ En introduktion til objektorienteret programmering for begyndere ud fra et software engineering aspekt Om at programmere i Java, ikke om værktøjet

Læs mere

Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion

Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion Polymorfi Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type Coercion Tvangskonvertering (forfremmelse og begrænsning) Oversigt Abstrakt klasse abstrakt

Læs mere

Aftenskole i programmering sæson Registrering af tid. Sæson 2 - Lektion 5

Aftenskole i programmering sæson Registrering af tid. Sæson 2 - Lektion 5 Registrering af tid Sæson 2 - Lektion 5 Før jul Vi har designet og bygget en model til håndtering af en timeregistrering Vi har kigget på hvordan vi håndterer fejl Vi har kopieret koden over i Bents x-code

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4 DM502 Forelæsning 4 Flere kontrolstrukturer for-løkke switch-case Metoder Indhold Arrays og sortering af arrays String-funktioner for-løkke Ofte har man brug for at udføre det samme kode, for en sekvens

Læs mere

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag Forelæsning Uge 2 Torsdag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser Klassevariabler og klassemetoder Variabler og metoder der et tilknyttet klassen (i stedet for at være tilknyttet

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2019 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 27. februar, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

RMI avanceret. Denne artikel beskriver nogle mere avancerede features i RMI. Den gør det muligt at lave mere realistiske applikationer.

RMI avanceret. Denne artikel beskriver nogle mere avancerede features i RMI. Den gør det muligt at lave mere realistiske applikationer. Denne guide er oprindeligt udgivet på Eksperten.dk RMI avanceret Denne artikel beskriver nogle mere avancerede features i RMI. Den gør det muligt at lave mere realistiske applikationer. Den forudsætter

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java Dag 9 Andre designmønstre Andre designmønstre: Uforanderlig, Fluevægt, Lagdelt Initialisering, Komposit/Rekursiv Komposition, Kommando/Ændring Fremlæggelse af programmering/status

Læs mere

Kursusarbejde 3 Grundlæggende Programmering

Kursusarbejde 3 Grundlæggende Programmering Kursusarbejde 3 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 21. november 2003 Indhold 1. Kode 2 1.1. forestillinger.h............................................. 2 1.2. forestillinger.cc.............................................

Læs mere

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner Kan (ved simple tilretningerne) bruges til at implementere metoder, der gennemsøger en arrayliste (eller anden objektsamling) og finder objekter, der opfylder

Læs mere

Classic Tween. Navigationsseddel. Fase Forklaring Navigation. Åbn en ny Flash File. Åbn Flash, vælg symbolet ud for ActionScript 3.0.

Classic Tween. Navigationsseddel. Fase Forklaring Navigation. Åbn en ny Flash File. Åbn Flash, vælg symbolet ud for ActionScript 3.0. 1 Classic Tween Åbn en ny Flash File Åbn Flash, vælg symbolet ud for ActionScript 3.0 Navgiv laget Navngiv laget kugle Tegn en udfyldt cirkel Vælg Oval Tool, vælg rød farve, træk en cirkel på Stage Indsæt

Læs mere

Fase Forklaring Navigation. Åbn Flash, vælg symbolet ud for Actions Script 3.0. Markér frame 15, højreklik og vælg F6

Fase Forklaring Navigation. Åbn Flash, vælg symbolet ud for Actions Script 3.0. Markér frame 15, højreklik og vælg F6 Classic Tween Åbn en ny Flash Film Åbn Flash, vælg symbolet ud for Actions Script 3.0 Navgiv laget Navngiv laget kugle Tegn en udfyldt cirkel Vælg Oval Tool, vælg rød farve, træk en cirkel inde på Stage

Læs mere

Hvad er et distribueret objekt? Plan 12.3. Objekter, objektreferencer, metoder, parameteroverførsel. Objekter: notation

Hvad er et distribueret objekt? Plan 12.3. Objekter, objektreferencer, metoder, parameteroverførsel. Objekter: notation Plan 12.3. Oversigt over grundlæggende begreber Java: eksempel på applikation, programmering og oversættelse Uddybning af grundlæggende begreber Java RMI implementation Forklaring af øvelsen Hvad er et

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 6

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 6 DM502 Forelæsning 6 Klasser og objekter Introduktion Math-klassen Indhold Klasser vs. objekter Først et tænkt eksempel: Vi vil lave en bil i Java 1. spørgsmål: Hvad karakteriserer en bil? Model År Farve...

Læs mere

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag Forelæsning Uge 3 Mandag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser ArrayList Collection med variabelt antal elementer Der er mange andre Collection typer (se Collection interfacet

Læs mere

Introduktion til Flash, fortsat

Introduktion til Flash, fortsat Introduktion til Flash, fortsat Kaspar Rosengreen Nielsen kaspar@interactivespaces.net Dagens program Opsamling på sidste forelæsning. Vi vil beskæftige os med følgende emner i dagens forelæsning: Komponenter

Læs mere

Crash Course i Programmering. HumTek, RUC

Crash Course i Programmering. HumTek, RUC Crash Course i Programmering HumTek, RUC Kursus mål At give en basal introduktion til programmering i sproget Processing At give et overblik over sprogets potentiale At have det sjovt :-) Kursus form Meget

Læs mere

DM502. Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/

DM502. Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/ DM502 Peter Schneider-Kamp (petersk@imada.sdu.dk) http://imada.sdu.dk/~petersk/dm502/ 1 DM502 Bog, ugesedler og noter De første øvelser Let for nogen, svært for andre Kom til øvelserne! Lav opgaverne!

Læs mere

Software 1 with Java. Recitation No. 7 (Servlets, Inheritance)

Software 1 with Java. Recitation No. 7 (Servlets, Inheritance) Software 1 with Java Recitation No. 7 (Servlets, Inheritance) Servlets Java modules that run on a Web server to answer client requests For example: Processing data submitted by a browser Providing dynamic

Læs mere

Forelæsning 17, tirsdag 2. november 1999 Søgning efter en given værdi i en tabel. Programmering 1999

Forelæsning 17, tirsdag 2. november 1999 Søgning efter en given værdi i en tabel. Programmering 1999 sammenligninger, hvor Programmering 1999 Forelæsning 17, tirsdag 2 november 1999 Søgning efter en given værdi i en tabel Lineær søgning og binær søgning Effektivitet: maskinuafhængig vurdering af køretid

Læs mere

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1. Programmering 1999 Forelæsning 4, fredag 10. september 1999 Klasser og objekter Felter, konstruktorer, this Eksempler på klasser: Time, Appointment Eksempler på metoder i Time og Appointment Klassefelter:

Læs mere

Miniprojekt2011. Formålet er at lære og indlære god objektorienteret programudvikling og programmering med Java, samt undervejs at opfylde studiekrav.

Miniprojekt2011. Formålet er at lære og indlære god objektorienteret programudvikling og programmering med Java, samt undervejs at opfylde studiekrav. Miniprojekt2011 Projektbeskrivelse Der skal fremstilles en lille java application på PC, hvor brugeren kan foretage interaktioner med en simpel database på disken via et grafisk brugerinterface. Formålet

Læs mere

Roskilde Universitet Forår 2015. First Person Shooter. Datalogi 4. Semester. Forfatter: Jeppe Emil Nygaard Vejleder: Henning Christiansen

Roskilde Universitet Forår 2015. First Person Shooter. Datalogi 4. Semester. Forfatter: Jeppe Emil Nygaard Vejleder: Henning Christiansen Roskilde Universitet Forår 2015 First Person Shooter Datalogi 4. Semester Forfatter: Jeppe Emil Nygaard Vejleder: Henning Christiansen Abstract This project investigates how programming 3D works in java,

Læs mere

Virkefeltsregler i Java

Virkefeltsregler i Java Virkefeltsregler i Java int i; int k; Sequence s; int j; What s in a name? Brian spillede blændende i søndags! Skolen ligger i Viby Ring til Kirsten og sig at... Et navn fortolkes i en kontekst og konteksten

Læs mere

Abstrakte datatyper C#-version

Abstrakte datatyper C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3 DM502 Forelæsning 3 Indlæsning fra tastatur Udskrift til skærm Repetition Beregning af middelværdi Gentagelse med stop-betingelse (while) Heltalsdivision Division med nul Type-casting ( (double) ) Betinget

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2015 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 3. marts, 2015 Dette projekt udleveres i to dele. Hver del har sin deadline, således

Læs mere

Singleton pattern i C#

Singleton pattern i C# Denne guide er oprindeligt udgivet på Eksperten.dk Singleton pattern i C# Denne artikel beskriver Singleton pattern og implementation i C#. Den forudsætter kendskab til C# men ikke til Singleton. Der er

Læs mere

Perspektiverende Datalogi Internetalgoritmer. MapReduce. Gerth Stølting Brodal

Perspektiverende Datalogi Internetalgoritmer. MapReduce. Gerth Stølting Brodal Perspektiverende Datalogi Internetalgoritmer MapReduce Gerth Stølting Brodal MapReduce Implementationer Dean, F. and Ghemawat, S. (2004) MapReduce: Simplified Data Processing on Large Clusters. In: Sixth

Læs mere

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

//Udskriver System.out.println(Hej  + ditfornavn +   + ditefternavn + .); System.out.println(Du er  + dinalder +  aar gammel! Denne guide er oprindeligt udgivet på Eksperten.dk Brugerinput i Java Denne her artikel gennemgår diverse ting ved brug af brugerinput i Java. Den starter med det simple og fortæller derefter skridt for

Læs mere

Real-time programming safety in Java and Ada

Real-time programming safety in Java and Ada Real-time programming safety in Java and Ada Bo Sandén Presenter: Thomas Bøgholm 25. oktober 2007 Forfatteren Artiklen Synkroniserings Begreber Bo Sandén Professor på Colorado Technical University Beskæftiger

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2013 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 5. marts, 2013 Dette projekt udleveres i to dele. Hver del har sin deadline, således

Læs mere