Videregående programmering i Java

Relaterede dokumenter
Videregående programmering i Java

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

Web- og serverprogrammering

Videregående programmering i Java

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

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

SWC eksamens-spørgsmål. Oversigt

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

Dag 10 Flertrådet programmering

Objektorienterede metoder

SWC Elementer i klassedefinition

Eksempel: Skat i år 2000

Videregående programmering i Java

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

Ugeseddel 4 1. marts - 8. marts

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

Hvad er Objekter - Programmering

DM502. Peter Schneider-Kamp

Videregående programmering i Java

Introduction til.net remoting i C#

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

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

Anvendelse af metoder - Programmering

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

BRP Kursusintroduktion og Java-oversigt

Dag 10 Flertrådet programmering

PROGRAM. using System; using System.Collections.Generic; using System.Text; using System.Collections;

Jacob Christiansen, Institut for MAtematik og DAtalogi, Syddansk Universitet, Odense

Arkitektur for begyndere

Tree klassen fra sidste forelæsning

Løsning af møntproblemet

Serialization i Java

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

DANMARKS TEKNISKE UNIVERSITET

14.1 Internationale programmer

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

Introduction til.net remoting i VB.NET

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.

A Profile for Safety Critical Java

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.

Eksempel på en database: studenter, kurser, eksamener

Singleton pattern i Java

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

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

Videregående programmering i Java

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

Note om RMI af Peter Kjærsgaard

Martin Olsen. DM507 Projekt Del I. 19. marts 2012 FOTO: Colourbox

Java Klasse nedarvninger

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

O l e \n I b \n. Ole Ib TT_EOF. Ole Ib Overview Tekstfiler, tegn og brikker

Kursus navn: Indledende programmering Kursus nr

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

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

Eksamens spørgsmål Software Construction. Objekter. Spørgsmål 1: Januar Giv en beskrivelse af Objekt-begrebet og deres brug

METODER ARV KLASSER. Grundlæggende programmering Lektion 5

Forelæsning Uge 2 Torsdag

Virkefeltsregler i Java

Kursusarbejde 3 Grundlæggende Programmering

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

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

DM01 DM Obl. Afl. Jacob Christiansen, , D12, Elias 18/ Side 1 af 11

Eksempel: et ordresystem note 5 Lagdeling s. 1

Parallelle algoritmer

Skriftlig eksamen i Datalogi

Send fra Java. Denne artikel fortæller hvad man skal bruge og hvordan man skal kode for at sende fra Java.

Fra idé til virkelig med Azure Mobile Services

Abstrakte datatyper C#-version

Offset til terminalskærm i Java

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

Forelæsning Uge 3 Mandag

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

Forelæsning Uge 3 Torsdag

Singleton pattern i C#

Spring Schema Extension eller Spring Domain Specific Languages

Skriftlig eksamen i Datalogi

Klasser og objekter. (Afsnit i manualen)

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

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

Forelæsning Uge 3 Mandag

Tilfældige tal. Denne artikel introducerer generering af tilfældige tal og viser lidt om hvad man kan og ikke mindst hvad man ikke bør bruge.

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

Forelæsning Uge 2 Torsdag

Hvordan vælger jeg dokumentprofilen?

Forelæsning Uge 3 Mandag

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

Vejledende løsninger

02101 Indledende Programmering Introduktion til Eclipse

DM01 DM Obl. Afl. Jacob Christiansen, , D12, Elias 13/ Side 1 af 7

Test af It-komponent

Rekursion og dynamisk programmering

Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag

Forelæsning Uge 2 Torsdag

Indholdsfortegnelse for kapitel 3

SigmaT.

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

Speciale. Evaluering af Java til udvikling af indlejrede realtidssystemer ved brug af en eksisterende Java Optimized Processor (JOP)

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

Forelæsning Uge 3 Mandag

Transkript:

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

Rekursion (hvis interesse) Listning af filer i undermapper? import java.io.*; public class ListFilerRekursivt public static void main(string[] arg) File kat = new File("."); // det aktuelle katalog listkatalog(kat); private static void listkatalog(file kat) File[] filer = kat.listfiles(); for (int i=0; i<filer.length; i++) File f = filer[i]; if (f.isdirectory()) System.out.println("Katalog "+f+":"); listkatalog(f); System.out.println("Katalog "+f+" slut."); else System.out.println(f);

Rekursion (hvis interesse) Hvad skriver dette program ud? public class Rekursionsopgave public static String kaldrekursivt(string s) if (s.length()<=1) return s; String førstetegn = s.substring(0,1); String resten = s.substring(1); String resten2 = kaldrekursivt( resten ); String dethele = resten2 + førstetegn; return dethele; public static void main(string[] arg) String resultat = kaldrekursivt("hej verden!"); System.out.println(resultat);

Model-View-Controller Programmer med en brugergrænseflade kan inddeles i tre dele: 1. Forretningslogik: Data og de bagvedliggende beregninger (model) 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. Visning af informationer til brugeren (præsentation) 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 (kontrollør) 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 Kontrollør Styrer programmets opførsel Omsætter brugers handlinger til ændringer på model Præsentation Fremviser modellen ændrer Model Indkapsler forretningslogik/tilstand/data Giver adgang til at spørge på data Giver adgang til at foretage handlinger aflæser

Model-View-Controller Præsentation (fremvisning af data) Bruger Model (data og forretningslogik) Kontrollør (ændring af model) Diskussion: Genbrug af kode? Flere præsentationer af samme data? Hvornår skal præsentation opdatere skærm? Muligheder for opdatering af præsentation: A Præsentationer undersøger modellen B Kontroldel underretter præsentationer C Modellen underretter præsentationer

C - Model underretter præsentation Kontrollør Styrer programmets opførsel Omsætter brugers handlinger til ændringer på model Præsentation Fremviser modellen Lytter efter ændringer i modellen ændrer Model Indkapsler forretningslogik/tilstand/data Giver adgang til at spørge på data Giver adgang til at foretage handlinger Underretter observatører om ændringer aflæser/ observerer underretning om ændring

C - Model underretter præsentation Kontrollør Styrer programmets opførsel Omsætter brugers handlinger til ændringer på model Præsentation Fremviser modellen Lytter efter ændringer i modellen Eksempel: ændrer Model Indkapsler forretningslogik/tilstand/data Giver adgang til at spørge på data Giver adgang til at foretage handlinger Underretter observatører om ændringer aflæser/ observerer underretning om ændring KontokontrolApplet jacobskonto: Kontomodel brianskonto: Kontomodel paneljacob: KontovisningPanel panelbrian: KontovisningPanel paneljacobandenvisning buttonjtilb50kr: JButton buttonj20krind: JButton buttonb30krud: JButton buttonj20krind_actperf() buttonb30krud_actperf() Kontomodel bevægelser :List lyttere :List + getsaldo() :double + getejer() :String + overfør(til, beløb) + hæv(beløb) + indsæt(beløb) + addactionlistener(l) 1 0..* ActionListener + actionperformed(hændelse) 1 1 1 KontovisningTekst model: Kontomodel + actionperformed(h) KontovisningPanel model: Kontomodel meddelelse: String + paint(g :Graphics) + setmodel(model)

Skabende designmønstre - igen class BenytHjælp private Hjælp h; public BenytHjælp() // høj kobling - klient opretter et Hjælp-objekt //Hjælp h = new Hjælp(); // fabrikeringsmetode leverer objekt til klienten h = Hjælp.opretHjælp(); public void gørnoget() h.metode1(); h.metode2();

class BenytHjælp private Hjælp h; public BenytHjælp() // høj kobling - klient opretter et Hjælp-objekt //Hjælp h = new Hjælp(); Skabende designmønstre - igen // fabrikeringsmetode leverer objekt til klienten h = Hjælp.opretHjælp(); public void gørnoget() h.metode1(); h.metode2(); Det kan være at: Det heller ikke er hensigstmæssigt at biblioteksklassen ved hvordan Hjælp oprettes Hvad der skal oprettes afhænger af konfigurationsfil Hvad hvis oprettelse/konfigurering skal være endnu mere dynamisk? Fabrikeringsmetode giver høj kobling dér hvor objektet i sidste ende oprettes Løsninger Bind alt sammen i en sammenbygger metode (eller i main()!) Slå (fabrikerings)objekt op i en registreringsdatabase (Service Locator) Overlad sammenbygningen til et framework (f.eks. Spring) (Inversion of Control = IoC, bedre ord er Dependency Injection )

class BenytHjælp private Hjælp h; public BenytHjælp() // centralt register holder styr på fabrikker hf = (HjælpFabrik) ServiceLocator.lookup("hjælp"); h = hf.oprethjælp(); Designmønstret Service Locator public void gørnoget() h.metode1(); h.metode2(); HjælpFabrik er et interface. Den rigtige fabrik klasse er f.eks. lagret i en konfigurationsfil (fabrikker.properties) og instantieres med f.eks. dynamisk binding: hjælp=minegenhjælpfabrik Slå (fabrikerings)objekt op i en registreringsdatabase (endnu) mindre gennemskuelig kode Programmet bliver afhængig af (bundet til) ServiceLocator Rode med konfigurationfiler

class BenytHjælp private Hjælp h; public BenytHjælp() // centralt register holder styr på fabrikker hf = (HjælpFabrik) ServiceLocator.lookup("hjælp"); h = hf.oprethjælp(); Designmønstret Service Locator public void gørnoget() h.metode1(); h.metode2(); HjælpFabrik er et interface. Den rigtige fabrik klasse er f.eks. lagret i en konfigurationsfil (fabrikker.properties) og instantieres med f.eks. dynamisk binding: hjælp=minegenhjælpfabrik class ServiceLocator private static Properties fabrikklasser = new Properties(); static fabrikklasser.load(new FileInputStream("fabrikker.properties")); public Object lookup(string navn) String fabriknavn = fabrikklasser.getproperty(navn); Object fabrik = Class.forName( fabriknavn ).newinstance(); return fabrik;

class BenytHjælp private Hjælp h; Dependency Injection / Injektion af afhængigheder public sethjælp(hjælp h) this.h = h; // framework kalder (injektion) public BenytHjælp() // gør intet, h bliver initialiseret udefra! public void gørnoget() h.metode1(); h.metode2(); Overlad sammenbygningen til et framework (f.eks. Spring) Inversion of Control = IoC Frameworket kontrollerer sammenbygningen, ikke programmet Bedre ord er Dependency Injection Injektion (oprettelse) v.hj.a.: Konstruktører get og set metoder Implementeringer af interfacet Programmet forbliver uafhængigt og ubundet... og ubrugeligt uden frameworket (?)