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



Relaterede dokumenter
Videregående programmering i Java

Videregående programmering i Java

med Java og Linux Jacob Nordfalk Linuxforum 2004 Lørdag 6. marts Center for Videreuddannelse Ingeniørhøjskolen i København

Objektorienterede metoder

Videregående programmering i Java

Videregående programmering i Java

Videregående programmering i Java

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

Web- og serverprogrammering

Dag 10 Flertrådet programmering

Videregående programmering i Java

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

SWC Elementer i klassedefinition

Dag 10 Flertrådet programmering

Objects First with Java A Practical Introduction Using BlueJ

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

SWC eksamens-spørgsmål. Oversigt

Videregående programmering i Java

Databaseadgang fra Java

Gode praksisser og arkitekturer i Android-programmering. Android - praksisser og arkitekturer Copyright Lund & Bendsen A/S

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

Anvendelse af metoder - Programmering

DM507 Algoritmer og datastrukturer

Objektorientering. Programkvalitet

Kursus i OOP og Java

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

Test af It-komponent

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

Hvad er Objekter - Programmering

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

DM507 Algoritmer og datastrukturer

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

Undervisningsbeskrivelse

Eksempel på en database: studenter, kurser, eksamener

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

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

DM507 Algoritmer og datastrukturer

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

DM507 Algoritmer og datastrukturer

Singleton pattern i Java

Tree klassen fra sidste forelæsning

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

Forelæsning Uge 3 Torsdag

Note om RMI af Peter Kjærsgaard

Web- og serverprogrammering

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

Webserverprogrammering

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

Eksempel: Skat i år 2000

A Profile for Safety Critical Java

DANMARKS TEKNISKE UNIVERSITET

Serialization i Java

Online billede filtrering

3.0 Velkommen til manualen for kanalen Shift Introduktion til kanalen Hvad er et spot? Opret et nyt spot 2

Introduktion til ActionScript

DMX styring med USB-interface

Skriftlig eksamen i Datalogi

Hassansalem.dk/delpin User: admin Pass: admin BACKEND

Videregående Programmering for Diplom-E Noter

Forelæsning Uge 2 Mandag

Tabelbegrebet. Klassediagrammer (III) Oversigt. Anvendelse af Tabeller. Tabeller og qualified associations

RMI med BlueJ. Tutorial lavet af Jákup W. Hansen TSU semester 11. desember 2007

DM507 Algoritmer og datastrukturer

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.

Skriftlig eksamen i Datalogi

Greenfoot En kort introduktion til Programmering og Objekt-Orientering

Klasser og objekter. (Afsnit i manualen)

DM507 Algoritmer og datastrukturer

Klienten. import java.util.*;

Introduktion til ActionScript, fortsat

ITWIN1. Afsluttende projekt. PhotoDays. Benjamin Sørensen (02284) Tomas Stæhr Berg (03539)

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

Forelæsning Uge 4 Mandag

METODER ARV KLASSER. Grundlæggende programmering Lektion 5

App til indmelding af glemt check ud

Forelæsning Uge 3 Torsdag

Indholdsfortegnelse. Forfatter: Sune Bjerre, Mediekonsulent, evidencenter (Creative Commons License Navngivelse-Ikke-kommerciel 2.

Forelæsning Uge 2 Torsdag

Programmering 1999 KVL Side 5-4. Klassen Time: metoder. Metoder i objektet giver mulighed for at ændre tilstanden, eller kigge på tilstanden.

Objektorienteret design med arv og polymorfi:

Forelæsning Uge 6 Mandag

Kursus navn: Indledende programmering Kursus nr

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

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

Integrationsmanual. Anvendelse af webservice til kursusoversigt i Campus. Brugervejledning til udviklere

Lektion 3. Grundlæggende programmering i VR

Forelæsning Uge 2 Torsdag

Ugeseddel 4 1. marts - 8. marts

Forelæsning Uge 3 Torsdag

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java

Forelæsning Uge 2 Torsdag

Tegnedelen i Open- og LibreOffice

DM507 Algoritmer og datastrukturer

Arkitektur principper og design mønstre til realisering af enterprise applikationer baseret på rige domænemodeller (og.net)

Visualisering. Kan opdeles i 2 dele Præsentations værktøj Portal

DM507 Algoritmer og datastrukturer

Objektorienterede metoder

Assignment #5 Toolbox Contract

Servlets, Tomcat & BlueJ

DM507 Algoritmer og datastrukturer

Transkript:

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 programmering Designmønstre i programmering Eksempler (Prototype, Komposit,...) Pause Evt. Model-View-Controller (MVC-arkitekturen) Programmering (teknisk) Designmønstre i et tegneprogram Komponenter i Java (javabønner)

Om Jacob Nordfalk cand.scient. i fysik Udvikler for DSB rejseplanen.dk og Byens Puls i Java Lektor på Ingeniørhøjskolen i København Forfatter Sprogligt interesseret med holdninger Esperanto (internationalt sprog) Træffende begreber på dansk øger forståelsen Tilhænger af åben kildekode (Open Source) Inkarneret Linux-bruger Bøger er (mest) under Åben Dokumentlicens

Åben Dokumentlicens (ÅDL) Dette foredragsmateriale er under ÅDL Du har lov til frit at kopiere dette værk Ændrer du i værket, skal (i hvert fald) de dele, der stammer fra dette værk, igen frigives under ÅDL Licensens fulde ordlyd findes på http://www.sslug.dk/linuxbog/licens.html

Reklame Indhold Komponentbaseret udvikling 20 designmønstre Javas standardbibliotek Java-teknologier 85% af bogen er under ÅDL og er gratis tilgængelig på http://javabog.dk/vp Andre værker: http://javabog.dk/jsp http://javabog.dk/oop

Genbrugelige komponenter Komponenter er programmørens byggeklodser De kan bruges igen og igen i mange sammenhænge De kan sættes sammen på alle mulige måder De er nemme at indstille Udviklingsværktøj kan generere programkoden for programmøren Grafiske brugergrænseflader er som regel helt bygget op af komponenter! Komponenter i Java hedder Javabønner (eng.: JavaBeans)

Komponentbaseret udvikling Demonstration af brug at komponenter i et udviklingsværktøj Mere om javabønner i den tekniske del efter pausen

Designmønstre Navngiven måde at programmere på Beskrivelse af, hvordan et bestemt slags problem kan løses Beskrivelse af konsekvenserne af denne måde at løse problemet på. Det samme designmønster kan løse et lignende problem i et andet program Engelsk: (Reusable) Design Pattern Mønster = noget, som gentages Design = hvordan et program er sat sammen Begreb fra OOAD Objektorienteret analyse og design Designet vises ofte som et klassediagram

Formål med designmønstre At give en fælles begrebsramme Lettere at forklare hvad man har lavet Klar begrebsramme lettere at forstå Lettere at beslutte hvordan noget laves Ikke "opfinde den dybe tallerken" igen. Velafprøvede idéer til godt design Undgå de mest almindelige faldgruber Mindske graden af bindinger (kobling) mellem forskellige dele af et program

Eksempler på designmønstre Singleton sikring af, at der kun eksisterer ét objekt af en bestemt slags Prototype objekter oprettes ud fra eksisterende skabelonobjekter Objektpulje genbrug de samme objekter igen og igen ved at huske dem i en pulje Adapter får et objekt til at passe ind i et system ved at fungere som omformer mellem objektet og systemet

Eksempler på designmønstre Iterator hjælper med at gennemløbe nogle data Observatør/Lytter 'abonnere' på, at en ting (hændelse) sker Komposit/Rekursiv Komposition objekt, der kan indeholde andre objekter, inkl. sin egen slags Kommando registrér brugerens handlinger, så at de kan fortrydes igen Model-View-Controller-arkitekturen opdel programmet i en datamodel, en præsentation af data og en kontrol-del

Designmønstret Prototype (objekter oprettes ud fra en skabelon) Problem: Klienten ved ikke, hvad der skal oprettes, men kan dog angive et andet objekt, som ligner det, der skal oprettes Løsning: Brug det andet objekt som Prototype, og opret objektet ud fra prototypen

Prototyper i et tegneprogram Palette har liste af figur-prototyper Liste kan senere nemt udvides Bruger kan vælge i listen Når der vælges i paletten, anvendes det pågældende element som Prototype til objektet, der skal tegnes på skærmen

Designmønstret Komposit (eng.: Composite; objekt kan indeholde andre objekter, inkl. sin egen slags) Problem: Hvordan kan man gruppere nogle objekter, så de kan behandles som ét objekt? Der er brug for grupperinger i flere niveauer Løsning: Definér en fælles superklasse for alle enkeltobjekter, og definér en klasse til sammensatte objekter, som har en liste af de objekter den består af

Komposit i et tegneprogram Figurgruppe Arver fra Figur Har en liste af figurer

Designmønstret Kommando (eng.: Command; registrér brugerens handlinger, så de kan fortrydes igen) Problem: Brugeren skal kunne udføre og fortryde sine ændringer på data (naiv løsning: Kopiér alle data ved hver ændring) Løsning: Definér et Kommando-objekt, der repræsenterer ændringen ved, hvordan ændringen udføres husker de oprindelige værdier, sådan at ændringen kan fortrydes igen

Kommando i tegneprogram Kommando med udfør og fortryd FlytKommando(husker ændring i x og y) OpretKommando Kommandoer gemmes i historik

Model-View-Controller Programmer med en brugergrænseflade kan inddeles i tre dele: 1.Modellen (data og de bagvedliggende beregninger) En bankkonto har navn på ejer, kontonummer, kort-id, saldo, bevægelser, etc. Saldo kan ikke ændres direkte, men med handlingerne overførsel, udbetaling og indbetaling. 2.Præsentationen af data over for brugeren, Bankkonti præsenteres meget forskelligt. I en pengeautomat vises ingen personlige oplysninger overhovedet. I et netbank-system kan saldo og bevægelser ses (det kunne være en webløsning i HTML). 3.Mulighederne for at ændre i data gennem handlinger I en pengeautomat kan man kun hæve penge. I et netbank-system kan brugeren måske lave visse former for overførsel fra sin egen konto. Ved skranken kan medarbejderen derudover foretage ind- og udbetalinger. dataforespørgsel Model Indkapsler programmets tilstand/data Giver adgang til at spørge på data Giver adgang til at foretage handlinger handling Præ sentation Fremviser modellen Kontrol del Definerer programmets opførsel Omsæ tter brugerinput til handlinger på modellen

Model-View-Controller Præsentation (fremvisning af data) Bruger Model (data og forretningslogik) Kontrol (ændring af model) Genbrug af kode? Flere præsentationer af data samtidigt? Muligheder for opdatering af præsentation: A - Præsentationer undersøger modellen B - Kontroldel underretter præsentationer C - Modellen underretter præsentationer

Pause

Tegneprogrammets programkode (Demonstration i JBuilder)

Komponentbaseret udvikling Eksempel: Bønnen TextField Egenskab Type Sættes med Læses med text String settext(string t) gettext() editable boolean seteditable(boolean rediger) iseditable() columns int setcolumns(int bredde) getcolumns() echochar char setechochar(char tegn) getechochar() Bruge en javabønne fra et udviklingsværktøj import java.awt.*; import java.awt.event.*; public class BenytBoenneMedVaerktoej extends Frame { TextField textfieldnavn = new TextField(); // opret bønnen public BenytBoenneMedVaerktoej() { try { jbinit(); catch(exception e) { e.printstacktrace(); private void jbinit() throws Exception { textfieldnavn.settext("jacob"); // sæt egenskaben text textfieldnavn.setbounds(new Rectangle(141, 61, 112, 29)); this.setlayout(null); this.add(textfieldnavn, null);

Komponentbaseret udvikling En meget simpel bønne: GentagTekst Herunder er en simpel grafisk bønne, der tegner en tekst tre gange skråt under hinanden. package vp; import java.awt.*; public class GentagTekst extends Component { private String tekstderskalvises = "gentag"; import vp.*; import java.awt.*; Fra værktøjet: public class VindueMedGentagTekst extends Frame { GentagTekst gentagtekst1 = new GentagTekst(); public void settekst(string t) { tekstderskalvises = t; public String gettekst() { return tekstderskalvises; public void paint(graphics g) { g.drawstring(tekstderskalvises, 0, 10); g.drawstring(tekstderskalvises, 5, 15); g.drawstring(tekstderskalvises, 10,20); Ud fra kildeteksten ses, at bønnen har egenskaben tekst (der bestemmer, hvilken tekst der skal vises). public VindueMedGentagTekst() { try { jbinit(); catch(exception e) { e.printstacktrace(); private void jbinit() throws Exception { this.setsize(new Dimension(319, 247)); this.setlayout(null); gentagtekst1.settekst("ryst!"); gentagtekst1.setbounds(new Rectangle(177, 190, 111, this.add(gentagtekst1, null); En javabønne sigesat have en egenskab, hvis den har en tilsvarendeget- og/eller set-metode

Karakteristika ved javabønner Bønner skal have en konstruktør uden parametre Udviklingsværktøjet kan oprette komponenter på en ensartet måde: Rystetekst rystetekst1 = new Rystetekst(); Bønner kan have egenskaber F.eks.: public void settekst(string t) public String gettekst() Bønner bør være afgrænsede og uafhængige Bønner kan have tilknyttet ekstra information Denne information er kun til hjælp for udviklingsværktøjet: Hvilket ikon bønnen skal repræsenteresaf i værktøjet Hvilke egenskaber der findes, og for hver egenskab en beskrivelse og hvordan den aflæses og sættes Hvordan de redigeres. Der kan tilknyttes en klasse, der bestemmer f.eks.: Hvilke værdier der er mulige Hvilken javakode der skal sættes ind i kildeteksten Om et skræddersyet redigeringsvindue skal dukke op Bønner kan understøtte hændelses-lyttere F.eks.: public void addactionlistener(actionlistener l) public void removeactionlistener(actionlistener l)