Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License CliMate: Laboration 2 - domänlogik Human Centered Systems Inst. för datavetenskap Linköpings.

Slides:



Advertisements
Liknande presentationer
Butiksdata.
Advertisements

Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
Datavalidering med JavaScript
Klasser och objekt.
Next previous Internetprogrammering 2000 Internetprogrammering 2000 Föreläsning 10 Distribuerad programmering med Javas RMI, Remote Method Invocation.
2I1070 Lektion 2 KTH-MI Peter Mozelius Servlets och databaskopplingar.
OOP Objekt-orienterad programmering
Metoder i java Det finns två typer av metoder i java
Inkapsling.
Objektorienterad tänkande
Övning5 Så här ska man tänka när man löser uppgift 1 på tentan lite grafik, så här söker man genom en lista så här läser man från en fil i java lösa uppgift.
Programmeringsteknik för K och Media
Swing Grafik delen i Java kallas för Swing. Swing är stort; ca 800 klasser i 16 paket. Swing är en utveckling av AWT (Abstarct Window Toolkit). AWT var.
1 ITK:P1 Föreläsning 4 Grafiska gränssnitt och händelsehantering DSV Peter Mozelius.
Next previous Innehåll Inledning Några enkla exempel Pekare till och kort beskrivning av större exempel Speciella referenser (som används i marginalen)
Strömmar Vid läsning och skrivning används något som kallas strömmar.
Alice in Action with Java
Föreläsning 13 Polymorfism, Paket och JAR-filer. Polymorfism Ordet härstammar från grekiskan Poly – många Morf – form Polymorf – många former Någonting.
PROCESSPROGRAMMERING
1. Klädlådor I byrån finns en strumplåda och en kalsonglåda. Objektmodellera och ge exempel på användning. Strategi: Ställ upp krav i textform Omvandla.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 4 ( )‏ Innehåll:Trådsäkerhet - Intrinsic locks och synkronisering - Synchronized statements.
int res2=Math.max(tal1,tal2);
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
JavaFX Pär Sikö, Epsilon Agenda Vad är JavaFX JavaFX exempel Swing och JavaFX Språket Egna komponenter Bindning Operationer och funktioner.
Vektorer (klassen Vector) Sortering
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
UTVECKLING MED RAMVERKET.NET Marcus Medina. Dagens visdomsord ” Ingen vet vad han klarar innan han har försökt. ” - Publilius Syrus (85 f.Kr.-43 f.Kr.).
DATABASHANTERING för programmerare Lektion 3 Mahmud Al Hakim
Programmeringsteknik för Media1 & K1
Mitt första Java program Mahmud Al Hakim Copyright, Mahmud Al Hakim, 1.
Databashantering Do it Max-style!. SELECT SELECT vad FROM tabellnamn Exempel: ◦ SELECT * FROM stralin_max  * = Välj allt som finns i tabellen ◦ SELECT.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
Flexicon – Din systempartner
Föreläsning 14 ”Enkel” Filhantering.
Riktade listor i C och Java Lösning till gruppövning 1.
Java servlets och databaskopplingar
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
1 ITK:P1 Föreläsning 8 Multimedia för spelkonstruktion DSV Peter Mozelius.
Föreläsning 10 Stränghantering.
Next previous RMI, Remote Method Invocation Om du har boken av Marty Hall, läs avsnitt 15.8 För fler exempel se:
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Föreläsning 5 Arrayer & ArrayList Hur man använder API:n
Java paket och jar-filer
System arbetssystem informationssystem
Föreläsning 4 Klasser Och Objekt.
Stack och Kö -Implementering -Tilllämpningar -- Kapitel 16, 11.
1. Ett problem/uppgift.
0. Kod, Klassdiagram och Sekvensdiagram import java.awt.event.*; import javax.swing.*; import java.awt.*; public class TwoThreads implements ActionListener.
Föreläsning 13 Appletprogram/fristående grafiska program Arv Rita linjer, rektanglar mm Skriva text, byta färg Appletprogram & HTML Grafiska användargränssnitt.
Föreläsning 9 Arv kap 8.1 Interface kap 9.2 Grafiska användargränssnitt (GUI) kap 10.
Programmeringsteknik Föreläsning 17 Skolan för Datavetenskap och kommunikation.
1 Mjukvaru-utveckling av interaktiva system God utveckling av interaktiva system kräver abstrakt funktionell beskrivning noggrann utvecklingsmetod Slutanvändare.
Köer -- Kapitel 16. Principen med en kö Köer är FIFO datastrukturer  First In – First Out  enqueue() Lägg till data i kön (först)  dequeue() Hämta.
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Programmeringsteknik
Föreläsning 9 Inläsning och utskrift på fil –SimpleTextFileReader –SimpleTextFileWriter Felsökning Java API.
Föreläsning 7 programmeringsteknik och Matlab 2D1312/2D1305 Metoddeklaration och parametrar Arrayer och ArrayList.
OOP - teori1 OOP del II– Föreläsning 5 vecka 6. OOP - teori2 Klasser Substantiv i singularis stavat med stor bokstav till exempel Human Dog Account Circle.
OOP&M - teori1 OOP del III– Föreläsning vecka 9 GUI Containers och LayoutManagers (Inner classes)
DA7351 Programmering 1 Databas SQL Föreläsning 24.
OOP&M - teori1 OOP del II– Föreläsning 2 vecka 46 Konstruktorer Instansmetoder Kapitel 14 i kursboken.
OOP&M - teori1 OOP&M del III– Föreläsning 23 vecka 15 Graphics Graphics2D Menyer JMF.
OOP&M - teori1 OOP del III– Vecka 10 Händelser Kontrollkomponenter (Components) Featuring: Applets.
DA7351 Programmering 1 Skapa och placera en komponent i en container Layoutmanagers Applet Händelser och lyssnare Föreläsning 15.
OOP&M - teori1 OOPM del II – Föreläsning vecka Abstrakta klasser/metoder igen Gränssnitt/Interface klasser igen tillämpat.
Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License CliMate: Laboration 3 – dataselektion Human Centered Systems Inst. för datavetenskap Linköpings.
TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder.
Databaser, avancerade frågor
Föreläsning 15: Exceptions & lite swing, gränssnitt
Föreläsning 8: Exempel och problemlösning
Presentationens avskrift:

Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License CliMate: Laboration 2 - domänlogik Human Centered Systems Inst. för datavetenskap Linköpings universitet

Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License CliMate följer Tre-lager-arkitektur De tre lagren presentation: användarhändelser+grafik+resultat domänlogik: håller systemets funktioner databasaccess: databas + sql-hantering Paketen i CliMate: climate.ui (inkl climate.ui.action och climate.ui.update) är presentation climate.domain är domänlogik climate.database är databasaccess Varför lager: separera olika uppgifter i olika delar statisk uppdelning: vilken fil/klass gör vad

Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License Viktiga domänklasser i CliMate ObservationFile FileCollection Observation 1 n 1 n METDATA METDATA utf-16 METDATA FileIdentity: Coding: ISO Motsvarande data: Long: E+07 Lat: E+07..förutom data (“tillstånd”) håller dessa klassers objekt systemets funktionalitet. Dessa två tillsammans kan man kalla domänlogik

Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License Domänobjekt - “domänlogiklagret” Domänlogiken uttrycker data och logiska operationer på data ex: observationer, filer, fil-attribut, inläsningfilter Domänobjekten håller aktuell data Domänobjekt är grunden i OO-design de förändras lite/sakta de är nära besläktade med problemdomänen tillstånd/data är viktigare än funktion: metoder kan läggas till gradvis

Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License Labb 2: uppgift 1 Visa inlästa filer lyssna på climate.domain visa resultat climate.ui.update.SaveFileListUpdate Göra knappar skapa grafik associera lyssnare climate.ui.SaveToDatabasePanel

Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License JButton: grafik och swing-lyssnare javax.swing.JButton: skapar en knapp ex: JButton b = new JButton("I'm a Swing button!"); javax.swing.AbstractAction gör subklass ger en ActionListener se t ex ReadFileAction tilldela en lyssnare till en knapp ex: b.addActionListener(listener) CliMate använder metadata för text ex: metaData.get JButton JLabel JFrame Använd javadoc!

Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License Exempel: ReadFileAction “Läs” Plockar data från domänlagret Testar om alla data är ifylld annars popup Om allt är ok läs in från fil/katalog Anrop till domän! public void actionPerformed(ActionEvent a) { String filePath = coll.getStringProperty(FileCollection.Property.FILE_PATH); String sign = coll.getStringProperty(FileCollection.Property.SIGNATURE); if (filePath == null || filePath.equals("")) { log.debug("User attempted to read file without file path"); JOptionPane.showMessageDialog(null, metaData.get(Messages.SPECIFY_FILE_MESSAGE)); Data.get(Messages.SIGNATUR_TOO_SHORT_MESSAGE));... } else { try { coll.readFromFile(); } catch (FileNotFoundException e) {... }

Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License Ex: skapa lyssnaren på läs-knappen CliMate Window ReadFromFile Panel rf: ReadFile Action new readFileButton: JButton new addAction Listener(rf) Dvs framtida knapp-händelser till rf main

Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License UI-objekt - “presentationslagret” Två typer av objekt: grafik: grafiskt innehåll och layout lyssnare: lyssnar efter händelser och agerar på dem Två typer av lyssnare: användarhändelser “action”: t ex Swing-lyssnare på komponenter systemhändelser “update”: t ex Observable/Observer på domänlogik CliMate climate.ui innehåller grafik-klasser climate.ui.action Swing-lyssnare climate.ui.update Observer-lyssnare

Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License Exempel: Användarhändelse “läs in” ReadFile Action FileCollectionObservationFile Observation Filter readFileBut: JButton actionPerformed readFromFile filterRow update...

Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License JList: Swing-komponent för listor Används för att lista strängar eller andra swingkomponenter vertikalt eller horisontellt JList använder en JListModel som håller innehållet i listan uppdaterar man modellen uppdateras grafiken CliMate använder en subklass DefaultListModel

Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License Exempel: UI-update “ny fil inläst” till flik Spara SaveFileList Update DefaultList Model FileCollection update addElement Skapad av SaveToDatabase Panel

Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License Laboration 2 - uppgift 2 Spara observationer och fildata i MySQL-databas Editera i alla tre lagren för användarfallet “spara” Klasser som påverkas: SaveToDatabaseAction/Worker ObservationFile DatabaseService Sparandet ska ske så att flikens JProgressBar uppdateras kontinuerligt.

Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License Databas-access via JDBC (skiss) Java klient- klass java.sql.Connection Databa s Skapa Java.sql.Statement SQL anrop Creates Java.sql.ResultSet SQL Resultat

Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License Litet exempel på JDBC-koppling Class.forName(”com.mysql.jdbc.Driver”).newInstance(); String url = ”jdbc:mysql://maj4.ida.liu.se:bird_database”; Connection c = DriverManager.getConnection(url, "my_login", "my_password"); Statement stmt = con.createStatement(); stmt.executeUpdate(”INSERT INTO species VALUES”+ “('skata', 'Till Skottland')”); ResultSet rs = stmt.executeQuery(”SELECT * FROM species WHERE ” + ”name = \”skata\”"); rs.next(); String text = rs.getString(”migration_field”); System.out.println(”Skatans flyttvanor:”+text);

Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License JDBC i Climate Klassen Database skapar ett java.sql.Connection-objekt val av host/databas/användare/lösen sätts i settings.properties Observera att endast ett Connection-objekt skapas per körning DatabaseService bygger SQL-statements och skickar via detta Connection-objekt

Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License Lagret för databas-access Avbilda objekt på relationer Enkel lösning: transaktionsskript (Fowler) hantera SQL i Java - “metaprogrammering” Separera ut SQL-källkod från löpande Java-källkod Hantera process-koppling värddator + sökväg föränderlig konfigureringsdata Hantera tillfälliga avbrott och omstart

Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License Modell-vy-kontroll (MVC) Modell VyKontroll prenumerera/n otifiera användar- händelser Förändra tillstånd...namnet på denna kommunikationsmodell mellan domänlogik och presentation. FileCollection ReadFileAction SaveToDatabasePanel SaveFileList Update ReadFromFilePanel Domänlogik Presentation

Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License SwingWorker - bakgrundsprocess Undvik att krävande operationer fryser grafiken introducera trådar (eng thread) som kör separat process climate.ui.SwingWorker skapar en tråd SaveToDatabaseWorker ärver av SwingWorker måste implementera construct()-metoden trådar startas med med metoden start() SaveToDatabaseAction ska starta SaveToDatabaseWorker Swing körs i sin egen tråd (“the Swing thread”) SwingUtilities: invokeAndWait och invokeLater

Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License Sekvensdiagram för “Spara”: från presentation till databas SaveToDb Action SaveToDb Worker FileCollection Database Service saveBut: JButton action Performed start saveTo Database updateObs... new SwingWorker-tråden Swing-tråden updateObs Connection execute Update -”-... saveProgress......

Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License Spara i omgångar och ProgressBar Observer/Observable: ui-lagret lyssnar även inåt mot domain – då använder vi java.util.Observer Se paketet climate.ui.update FileCollection markerar hur långt man kommit setSaveProgressMax: sätter hur lång nuvarande fil är setSaveProgress: sätter hur många obs som sparats I MetaData finns en metod getDatabaseBatchSize anger antal observationer som ska sparas åt gången. Vid varje progressionsmarkering anropas alla Observer-objekt för FileCollection SaveProgressUpdate lyssnar efter progressions-händelser Progressions-grafiken nollställs för varje sparad fil

Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License “Spara”: från databas till presentation FileCollection update SaveProgress Update display(true) update... JProgressBar setMaximum FileCollection getStringProp setValue... getStringProp SwingWorker-tråden Swing-tråden

Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License DatabaseService: Data Mapper i CliMate Kopplar domänobjekt och databasrepresentation Objektorienterad modell till relationsmodell - “O/R bridge” Tre publika metoder i DatabaseService saveObservations: sparar ner ett segment ur en observationsfil registerInFileCollection: registrerar vilken observationssamling som just sparats (labb 2) selectObservations: gör en selektion baserat på givna sökkriterier (labb 3)

Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License UpdateStatement: CliMates update-object-klass Skapa en speciell klass/metoder som bygger upp en databas-uppdatering (insert, delete, replace etc) UpdateStatement: objekt som utifrån ett eller flera ValueSet tilldelar query = “REPLACE INTO ” + table + “ VALUES “ addValueSet: lägger till värden efter VALUES execute: skickar värdet på query till databasen

Lars Degerstedt Attribution-NonCommercial-ShareAlike2.5 License Summering Tre-lager-arkitektur: olika uppgifter i olika lager Labb 2, del 1: arbeta med swing-grafik och uppdatering via Observable/Observer Domänlogik och presentation arbetar ihop via MVC lyssnare åt två håll: på användaren och på systemet I CliMate: action och update Labb 2, del 2: JDBC/SQL enbart i databaslagret Separat tråd för tung beräkning DataMapper och Update Object