Ni ska ha en uppsättning verktyg som ni kan använda i era fortsatta studier (och även efteråt) Lektion 1. Applikationsprogrammering i Java 7,5 hp

Relevanta dokument
JUnit. Junit Unit Testing. JUnit 3. JUnit 3 forts. Villkorskontroller i test. Exempel JUnit3

Versionshantering. Jan Erik Moström

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

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

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

12 Metaprogrammering i Java

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

Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

JUnit 4 - användning. Grunderna. org.junit. org.junit.test. Henrik Bergström DSV SU/KTH. Innehåller bland annat:

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

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

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

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

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

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

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

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

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

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

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

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

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

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

Laboration 24 Databasen MySQL och java

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

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

OOP Objekt-orienterad programmering

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

Design och konstruktion av grafiska gränssnitt

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

Mer om grafiska komponenter. Händelsestyrda program

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

Objektorienterad Programmering DAT043. Föreläsning 5 29/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Java-concept och Swing. Swing low, sweet chariot

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

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

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

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

Lösningsförslag till tentamen

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

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

OOP Objekt-orienterad programmering

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

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

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

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

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

Design och konstruktion av grafiska gränssnitt

JAVA Mer om klasser och objektorientering

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

Klasshierarkier - repetition

Tentamen FYTA11 Javaprogrammering

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

Konstruktion av klasser med klasser

Lösningar för tenta 3 DAT043,

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

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

DAT043 - Föreläsning 7

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Objektorienterad Programmering (TDDC77)

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

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

Laboration 15 Grafiskt användargränssnitt

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

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Classes och Interfaces, Objects och References, Initialization

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

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

Föreläsning 10. ADT:er och datastrukturer

Att skriva till och läsa från terminalfönstret

Laboration 13, Arrayer och objekt

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

Objektorienterad Programmering (TDDC77)

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Laboration 1 - Grunderna för OOP i Java

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

Arv och Grafiska Användargränssnitt

Språkkonventioner och redigering av tal.

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

OOP F1:1. Föreläsning 1. Introduktion till kursen OOP Vad är Java? Ett första Java-program Variabler Tilldelning. Marie Olsson

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

Fortsättningskurs i programmering F 5. GUI händelsehantering - undantagshantering Hugo Quisbert AWT. Paket för hantering av grafik

Institutionen för datavetenskap HT /2008. Testning med JUnit

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

Tentamen. Lösningsförslag

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt

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

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

DAT043 Objektorienterad Programmering

Outline. Objektorienterad Programmering (TDDC77) Åsidosättning. Signatur. Åsidosättning. Abstrakta klasser. Ahmed Rezine.

TDDD78 Viktiga begrepp, del 2

Transkript:

Applikationsprogrammering i Java 7,5 hp Lektion 1 Personal Kursansvarig, Föreläsare och gruppövningar (johane@cs.umu.se) Handledare Thomas Johansson (thomasj@cs.umu.se) Information Websajt http://www.cs.umu.se/kurser/5dv085/ht10 Nyheter från mig Email Nyhetssidan på sajten Kursens innehåll Det verkliga målet Mera om Javas bibliotek Grafiska gränssnitt Reaktiv programmering Trådar Databaser XML Ni ska ha en uppsättning verktyg som ni kan använda i era fortsatta studier (och även efteråt) Design patterns etc

Vad innebär detta Tyngdpunkten i kursen ligger i att konstruera program Skriva mycket kod Skriva bra kod Vad som krävs av dig Följande krävs av dig: Att du är aktiv Att du lägger ner tid på kursen Att du själv skriver kod Att du själv designar program Fjolårets kursutvärdering Förslag på förändringar: Fundera på att examinera webservice delen genom ett obligatoriskt tillfälle istället för som en del av projektet och ersätta dess del i projektet med en databasdel. Fundera över att göra något för att få till en vi känsla iprojektgrupperna. Se till så att trådsäkerhetsmaterialet gås igenom noggrannare Examination Kursen är uppdelad i 2 moment Teorimoment 3 hp Examineras genom 3h tenta på slutet av kursen Betyg U,3,4,5 Labmoment 4,5 hp Examineras genom ett antal laborationer Betyg U,3,4,5 Totala betyget på kursen blir viktat resultat baserat på momentens betyg Inlämningsuppgifter Krav på inlämningsuppgifterna Lab1 Interspection och GUI-intro. (5p) Enskilt Lab2 XML - RSS-läsare (10p) Enskilt Projekt (10p) I grupper om 4 studenter (ev kan någon grupp bli 5). Grupperna kommer att utses efter att den första labben lämnats in. 3 st redovisningstillfällen 2008-12-16 Milestone. Behöver inte vara fungerande, men ni ska ha kommit en bra bit på vägen (demo av hur det gått hittills/plan för resten av arbetet för handledare) 2008-01-12 Demo av projektet för lärare/handledare och medstudenter 2008-01-12 Inlämning av dokumentation För betyget 3 krävs att alla labbar är godkända Ska lämnas in i tid (planera din tid!) Uppskov beviljas av mig Det räcker inte med att programmet fungerar! Första versionen är den som kommer att poängsättas så se till att anstränga er för att få den så bra som möjligt Vi kommer inte att ge O på labbarna annat än om de funkar väldigt dåligt

Krav på inlämningsuppgifterna Rapporten ska vara klart och tydligt utformat (på svenska eller engelska... inte båda) innehålla en beskrivning av idén som lösningen bygger på innehålla en beskrivning av design/lösning innehålla en översikt av klasserna beskrivning av val, begränsningar, problem, alternativa lösningar Rapporten kommer stå för en inte oansenlig del av poängen på labbarna Krav på inlämningsuppgifterna Kod enl god OO modell Arv där så är lämpligt Interface där så är lämpligt Bedöms efter design, räcker inte med att programmet funkar God standard på koden Koden ska på denna kurs följa SUNs kodstandard Om boken Boken är samma bok som på Javakursen. Vi kommer främst att titta på de mer avancerade kapitlen i boken (se läsanvisningarna) Utöver boken kommer ni tex behöva använda API beskrivningen som finns på nätet i rätt stor utsträckning, samt att vi kommer att komplettera boken med material bland annat från SUNs olika tutorials på nätet. Bibliotek På kursen kommer vi använda en mängd klasser ur javas bibliotek Stort, mycket stort För stort? Portabelt lite beroende på vad man gör hur portabelt det blir Objektorienterat Använder sig i stor grad av Design Patterns Olika programtyper Applikationer (vanliga program) Applets (program för websidor) JavaBeans (komponenter) Servlets (server program för websidor) JSP (annan variant) Enterprise JavaBeans (distribuerad) Java varianter Standard Edition Den "vanliga" varianten Enterprise Edition API, beskrivning Micro Edition Lite resurser

IDE På kursen kommer ni behöva använda er av en riktig fullskale IDE som tex Eclipse då programmen ni skriver kommer att bli lite större och ni kommer behöva det stöd som dessa verktyg ger Introspection Javas förmåga att undersöka sig själv Run-Time Type Info RTTI Kolla vad ett objekt innehåller och vilka egenskaper det har instanceof Class Objekt som skapas av run-time systemet (JVM) Håller reda på informationen om om en klass Class-objekt kan fås fram antingen via ett objekt eller via en klass Class<?> java.lang.object.getclass() Class<?> classolle = olle.getclass() Class<SomeClassName> SomeClassName.class Class<Member> classmember = Member.class Class<?> java.lang.class.forname( x ) Class<?> classmember = java.lang.class.forname ( xfile.member ) Metoder i ett Class<T>-objekt (exempel) String getname() Class<? super T> getsuperclass() boolean isarray() boolean isinstance( Object obj ) boolean isinterface() T newinstance() Jan Erik Moström

public class CreateByName{ public static void main ( String[] args ) { for( int i = 0 ; i < args.length ; i++ ) { try { Class<?> x = Class.forName( args[i] ); Object y; try { if( x.isinterface() ) { System.out.println(args[i] + " är ett interface och inget objekt kan skapas"); else { y = x.newinstance(); if( y instanceof java.awt.component ){ System.out.println( args[i] + " är en GUI komponent"); else { System.out.println( args[i] + " är inte en GUI komponent"); catch( InstantiationException e ) { e.printstacktrace(); catch( IllegalAccessException e ) { e.printstacktrace(); catch( ClassNotFoundException e ) { System.out.println( "Kunde inte hitta " + args[i] ); Class<?> x = Class.forName( args[i] ); Object y; try { if( x.isinterface() ) { System.out.println(args[i] + " är ett interface och inget" + "objekt kan skapas"); else { y = x.newinstance(); if( y instanceof java.awt.component ){ System.out.println( args[i] + " är en GUI komponent"); else { System.out.println( args[i] + " är inte en GUI komponent"); Casting Casting är en annan sak som görs möjlig tack vare RTTI. Säker Osäker Run-time: ClassCastException Reflection API Ger mer detaljer java.lang.reflect.constructor java.lang.reflect.method java.lang.reflect.field java.lang.reflect.array java.lang.reflect.constructor<t> Class<?>[] getparametertypes() T newinstance(object...!initargs) java.lang.reflect.method Class<?>[] getparameterstypes() Class<?> getreturntype() Object invoke(object!obj, Object...!args)

import java.lang.reflect.*; public class ListStringMethods{ public static void main( String[] args ) throws ClassNotFoundException { Method[] ma = String.class.getMethods(); for( int i = 0 ; i < ma.length ; i++ ){ System.out.println( ma[i] ); > java ListStringMethods public int java.lang.string.hashcode() public int java.lang.string.compareto(java.lang.string) public int java.lang.string.compareto(java.lang.object) public boolean java.lang.string.equals(java.lang.object) public int java.lang.string.length() Konstruktorer Initierar ett nytt objekt Kan finnas flera olika - minst en public class Example {!...! public Example() {...! public Example(String s) {...! public Example(int i) {...!... public class Coordinate { private int x; private int y; public Coordinate( Integer x, Integer y ) { this.x = x.intvalue(); this.y = y.intvalue(); import java.lang.reflect.*; public class Demo { public static void main(string[] args) throws java.lang.classnotfoundexception, java.lang.nosuchmethodexception, java.lang.instantiationexception, java.lang.illegalaccessexception, java.lang.reflect.invocationtargetexception { Class<?> c = Class.forName( "Coordinate" ); Class[] p = new Class[2]; p[0] = Integer.class; p[1] = Integer.class; public String tostring() { return "(" + x + "," + y + ")"; Constructor con = c.getconstructor(p); Object[] par = new Object[2]; par[0] = new Integer(12); par[1] = new Integer(34); Object o = con.newinstance(par); System.out.println( o ); Finalize Finalize är en metod som körs när objektet tas bort, kan användas för att rensa upp efter ett objekt. public class Example { Anropas när objektet tas bort Inte säkert att objektet tas bort!!! Man ska aldrig anropa finalize själv!! public Example() { System.out.println("Hello, wonderful world") protected void finalize() throws Throwable { System.out.println("Goodby cruel world");

public class Demo { public static void main(string[] args) { Example eo = new Example(); eo = null; > java Demo Hello, wonderful world > public class Demo { public static void main(string[] args) { Example eo = new Example(); eo = null; System.gc(); System.runFinalization(); > java Demo Hello, wonderful world Goodbye cruel world > Nakdelar med introspection/reflection Tänk på att introspection och reflection är lite av nödlösningar som bör användas bara när man måste Situationer med instanceof kan ofta lösas med polymorfism tex GUI-intro Anledningar att inte använda reflection Långsamt Ger access till interna implementationsdetaljer (tex medlemmar deklarerade privat) och kringgår därigenom inkapsling Målet Användaren - ge användaren ett sätt att mata in information Systemet - göra det möjligt att använda ett GUI för att presentera information Historia Java 1.0 - AWT Java 1.1 - AWT java.awt Swing - först separat nerladdning Swing - sedan en del av standarddistributionen (Java 1.2) javax.swing

Principer - händelsestyrt Ditt program Javas runtime Användaren Händelsestyrt Princip Programmet sitter och rullar tummarna Användaren gör nåt JVM/JFC genererar en eller flera händelser och skickar dessa till ditt program Programmet hoppar upp, gör något snabbt och fortsätter sedan att rulla tummarna. Begrepp Components - basen för de andra klasserna (knappar, listor, etc) Controls - knappar, listor, etc Containers - kan innehålla andra komponenter LayoutManager - sköter placeringen av olika GUI komponenter MVC Model-View-Controller Förändringar View Logiken (modellen) Model Utseende Kontrolldel Hämtar data Håll de olika delarna i Händelser applikationen separata Uppdaterar Controller Modellen ska inte behöva känna till gränssnittet Varje del kan (självklart) bestå av flera klasser i ett program Delegate I java slår man ibland ihop view och controller till en enhet, en delegate View Model Controller delegate Jan Erik Moström

Hur funkar det? Swing addxxxxlistener XXXXListener interface JFrame JPanel JPanel private JPanel private JPanel private JPanel upperpanel; middlepanel; lowerpanel; public ThreePanels( String title ) { super( title ); Container cp = getcontentpane(); JTextField setdefaultcloseoperation( JFrame.EXIT_ON_CLOSE ); JButton JButton JButton upperpanel = new JPanel(); cp.add( upperpanel, BorderLayout.NORTH ); middlepanel = new JPanel( ); cp.add( middlepanel, BorderLayout.CENTER ); JPanel lowerpanel = new JPanel( ); cp.add( lowerpanel, BorderLayout.SOUTH ); JPanel JCheckBox pack(); setvisible(true); BorderLayout North JUnit West Center East South

JUnit Unit testing för java Används för att testa att metoder/klasser beter sig som det var tänkt Många IDE:er tex Eclipse har inbyggt stöd för detta. JUnit 3 Vi skriver testklasser och låter dessa ärva från junit.framework.testcase. (JUnit klasserna måste läggas till till projektet då dessa klasser inte är med bland standardklasserna i java) Namnge testmetoderna med test som prefix (det är så de känns igen som testmetoder) Undersök de villkor som ska testas mha de olika assert-metoderna i TestCase Kör testen mha Run -> Run -> JUnit i Eclipse (Se till så att ni ställt in den på att använda version 3) JUnit 3 forts. Ibland vill man göra grundinställningar som ska göras innan varje test. Dessa kan göras i metoden protected void setup() som körs innan varje test i den klassen Behöver man städa upp efter testen görs detta i metoden protected void teardown() som anropas automatiskt efter varje test. Villkorskontroller i test Statiska metoder som finns definierade i Klassen Assert (TestCase ärver från denna) asserttrue assertfalse assertnull assertnotnull assertequals Kontrollerar om två värden är lika. För objekt kontrolleras detta mha deras equals-metod. assertsame Kontrollerar om två referenser är lika assertnotsame fail() Misslyckas alltid Exempel JUnit3 import junit.framework.testcase; public class PolynomTest extends TestCase { public void testcreateobject() { double d[]={1.0,2.0; Polynom p=new Polynom(d); assertnotnull(p); JUnit 4 Version 4 Vi behöver ej utnyttja arv Testmetoder indikeras mha att vi annoterar dem med @Test Till Test-annotationen kan man även specificera om vi vill att ngt särskilt undantag ska kastas @Test(expected=IndexOutOfBoundsException.class) public void outofbounds() { new ArrayList<Object>().get(1); eller sätta en tidsgräns för testet @Test(timeout=100) Här 100 millisekunder Använd assert-metoderna för att testa villkoren (samma som i JUnit 3) Ett lätt sätt att använda assert-metoderna (eftersom de nu inte är tillgängliga via arv) är att göra en static import från Assert-klassen

Static imports public class Demo7 { public static void main( String[] argv ) { System.out.println( 2 * Math.PI ); Bra? Nja... Kräver viss försiktighet import static java.lang.math.pi; public class Demo7 { public static void main( String[] argv ) { System.out.println( 2 * PI ); Exempel med JUnit4 import org.junit.test; import static junit.framework.assert.assertnotnull; public class JUnit4TestClass { @Test public void createobject() { double d[]={1.0,2.0; Polynom p=new Polynom(d); assertnotnull(p); Nested & Inner Classes