Utplukk av Java (GUI, kode-konvensjon, Java og bildebehandling i J2SE. BufferedImage m/venner. polymorfisme, classpath, javadoc) UNIVERSITETET I OSLO

Like dokumenter
Java i INF 2310 Dagens tema

Utplukk av Java (GUI, kode-konvensjon, Introduksjon til første Java øving. polymorfisme, classpath, javadoc) Java og signalbehandling UNIVERSITETET

Mål med kurset. Java i INF Dagens tema. GUI med Swing. Dokumentasjon

Eksekveringsrekkefølgen (del 1) Oppgave 1. Eksekveringsrekkefølgen (del 2) Kommentar til oppgave 1. } // class Bolighus

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

2 Om statiske variable/konstanter og statiske metoder.

Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Tuva Kristine Thoresen

UNIVERSITETET I OSLO

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

UNIVERSITETET I OSLO

GUI («Graphical User Interface»)

INF Notater. Veronika Heimsbakk 10. juni 2012

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE

INF1010 Grafisk brukergrensesni3 med Swing og awt del 1 INF1010

Kapittel 7: Mer om arv

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

Klasser, objekter, pekere og UML. INF gruppe 13

Fra problem til program

Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 14.

UNIVERSITETET I OSLO

INF Seminaroppgaver til uke 3

Grafisk Brukergrensesnitt

UNIVERSITETET I OSLO

Eksamen. Objektorientert Programmering IGR 1372

Repitisjonskurs. Arv, Subklasser og Grensesnitt

Gjennomgang av eksamen H99

Velkommen til. INF våren 2016

INF1000: Forelesning 7. Konstruktører Static

Kapittel 8: Programutvikling

GUI («Graphical User Interface»)

JSP - 2. Fra sist. Hvordan fungerer web? Tjenerside script HTML. Installasjon av Web-tjener Et enkelt JSP-script. Ønsker dynamiske nettsider:

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

INF1010, 21. februar Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE

2 Om statiske variable/konstanter og statiske metoder.

INF 1010, vår 2005 Løsningsforslag uke 11

NB!!! Veldig korte svar er gitt her. Disse burde det vært skrevet mer på ved en eksamen..

INF1000: Forelesning 7

LC191D/LO191D Videregående programmering mai 2010

Oblig 4Hybelhus litt mer tips enn i oppgaven

INF1000 : Forelesning 4

INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først)

1. Finn klassene (hvilke objekter er det i problemet) 1. Dataene som beskriver problemet (hvilke objekter har vi og hvor mange klasser er det?

INF1010 våren 2017 Onsdag 25. januar. Litt om unntak i Java

i=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

Steg 1: Sette opp Java-prosjekt, og lage app-mappe og app-klasse

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Forelesning inf Java 4

INF Våren Li' repe$sjon om Tråder og GUI. Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo. Ins$tu' for informa$kk

INF 1000 (uke 2) Variabler, tilordninger og uttrykk

UNIVERSITETET I OSLO

< T extends Comparable<T> > Indre klasser mm. «Det du bør ha hørt om før oblig 4»

Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

IN1010 våren 2018 Tirsdag 15. mai. Repetisjon av subklasser og tråder. Stein Gjessing Institutt for informatikk Universitetet i Oslo

Forelesning inf Java 5

EKSAMEN I INF244: OBJEKTORIENTERT PROGRAMVAREUTVIKLING I BACHELORSTUDIET I IT OG INFORMASJONSSYSTEMER BACHELORSTUDIET I IT OG ENTREPRENØRSKAP

Forelesning inf Java 5

Eksamensoppgave Vår 2012 Ordinær eksamen Bokmål. Videregående programmering. Eksamensdato: Studium/klasse: 2. klasse

INF1000 : Forelesning 1 (del 2)

I et Java-program må programmøren lage og starte hver tråd som programmet bruker. Er dette korrekt? Velg ett alternativ

INF1010 våren januar. Objektorientering i Java

INF Uke 10. Ukesoppgaver oktober 2012

OOT Seminar H-97 CORBA. Praktisk del

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

programeksempel Et større En større problemstilling Plan for forelesingen Problemstillingen (en tekstfil) inneholdt ordet "TGA"

Post-it spørsmål fra timen (Arv og subklasser)

Obligatorisk oppgave 1 i INF 4130, høsten 2008

Oppsummering. Kort gjennomgang av klasser etc ved å løse halvparten av eksamen Klasser. Datastrukturer. Interface Subklasser Klasseparametre

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

UNIVERSITETET I OSLO

INF 1000 høsten 2011 Uke september

GUI («Graphical User Interface») del 2

INF Innleveringsoppgave 6

(MVC - Model, View, Control)

UNIVERSITETET I OSLO

INF1010 Grafisk brukergrensesni3 (GUI) med Swing/awt. del 1

IN1010 våren januar. Objektorientering i Java

HØGSKOLEN I SØR-TRØNDELAG

INF1000 undervisningen INF 1000 høsten 2011 Uke september

UNIVERSITETET I OSLO

IN1010 V19, Obligatorisk oppgave 2

UNIVERSITETET I OSLO

Løsningsforslag Test 2

INF1000 Metoder. Marit Nybakken 16. februar 2004

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I Løsningsforslag

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

I dag skal vi se på. INF 1000 (uke 2) Variabler, tilordninger og uttrykk. Gruppene starter denne uken! Klart for første oblig

Eksamen Objektorientert Programmering 2012

UNIVERSITETET I OSLO

EKSAMEN 6108/6108N PROGRAMMERING I JAVA Alt trykt og skriftlig materiale.

import javax.swing.*; import java.awt.*;

Læreboken på 45 minutter

JAVA Oppsummering for IS-102. Even Åby Larsen

Transkript:

Java i INF 160 INSTITUTT FOR INFORMATIKK SVEIN BØE 1 GUI med Swing import java.awt.*; import javax.swing.*; public class GUI { public static main(string[] args) { JFrame frame = new JFrame("window title"); // Applikasjonens hoved-vindu Container contentpane = frame.getcontentpane(); // Container for visuelle elementer contentpane.add(new JLabel("lable-text")); // Legg til visuelt element i container JMenuBar menubar = new JMenuBar(); // Hvis meny i toppen JMenu menu = new JMenu("menu-title"); // Husk å komponere menyen menubar.add(menu); frame.setmenubar(menubar); frame.pack(); // Geometrier/avstander/størrelser frame.setvisible(true); // Vis frem på skjermen // main // GUI INSTITUTT FOR INFORMATIKK SVEIN BØE 3 Mål med kurset Introduksjon til bildebehandling Få programmeringserfaring Dagens tema Utplukk av Java (GUI, kode-konvensjon, polymorfisme, classpath, javadoc) Java og bildebehandling i J2SE. BufferedImage m/venner. INSTITUTT FOR INFORMATIKK SVEIN BØE 2 Dokumentasjon Java hjemmeside: http://java.sun.com/ Java tutorial: http://java.sun.com/docs/books/tutorial/ Java 2D: http://java.sun.com/docs/books/tutorial/2d/images/ Programmeringsguide for Java 2D: http://java.sun.com/j2se/1.4.1/docs/guide/2d/spec/ Læreboka: http://www.ifi.uio.no/inf160/efford/ INSTITUTT FOR INFORMATIKK SVEIN BØE 4

Kode-konvensjon http://java.sun.com/docs/codeconv/ Hvorfor? Gjøre koden mer lesbar for andre Vedlikehold utgjør 80% av kostnadene ved koding Vedlikehold gjøres ofte av andre. Ikke tilstrekkelig at DU liker din stil. INSTITUTT FOR INFORMATIKK SVEIN BØE 5 Polymorfisme (dynamisk binding) Separate klasser: // Beregn totalt areal public class { double {... double { public class { double {... double {... Ulike metode-implementasjoner // Må ha separate arrays [] circles; [] rectangles; double area = 0.0; for (int i = 0; i < circles.length; i++) { area += circles[i].; for (int i = 0; i < rectangles.length; i++) { area += rectangles[i].; Hver form krever separat kode! Ny form krever tillegg av kode! INSTITUTT FOR INFORMATIKK SVEIN BØE 7 Kode-konvensjon forts. Navnekonvensjonen viktigst, gir informasjon om funksjon class: Substantiv, stor forbokstav for hvert del-ord (ikke bruk _ ) Unngå sjeldne akronymer og forkortelser. Eks: ImageSelector, BufferedImage Interface: Som for klasser. Eks: ImageDecoder Metoder: Verb, ellers som for klasser, men liten første-bokstav Eks: addchangelistener, getcontentpane. Variable: Form som for verb. Unngå en-bokstav navn (unntatt vanlig bruk av i,j,k (int) og c,d (tegn) Klasse-konstanter (static final): Store bokstaver, del-ord adskilt med _. Eks: TWO_PI INSTITUTT FOR INFORMATIKK SVEIN BØE 6 UML (Unified Modelling Language): Shape INSTITUTT FOR INFORMATIKK SVEIN BØE 8

Superklasse med dummy-metoder: // Beregn totalt areal public class Shape { // Dummy -metoder (implementert): double { double { public class extends Shape { double { double { public class extends Shape { double { double circumference{ // Kan ha felles array (upcasting) Shape[] shapes; double area = 0.0; for (int i = 0; i < shapes.length; i++) { area += shapes[i].; Ny form krever ikke tillegg av kode (bare klasse-definisjon av formen)! Dette virker pga polymorfisme! INSTITUTT FOR INFORMATIKK SVEIN BØE 9 UML-diagram: interface Shape INSTITUTT FOR INFORMATIKK SVEIN BØE 11 UML-diagram: abstract Shape INSTITUTT FOR INFORMATIKK SVEIN BØE 10 Superklasse med abstrakte metoder (abstrakt klasse): public abstract class Shape { // Ikke implementere metoder her abstract double ; abstract double ; Konkrete sub-klasser: public class extends Shape { double {... double {... public class extends Shape { double {... double {... Interface: public interface Shape { double ; double ; Konkrete sub-klasser: public class implements Shape { public double {... public double {... public class extends Shape { // Implementere metoder public double {... public {... Merk: public metode-implementasjoner INSTITUTT FOR INFORMATIKK SVEIN BØE 12

Klasser og interface Abstrakt klasse kan ikke instantieres Abstrakt klasse kan definere metoder (både abstrakte og konkrete/implementerte) Abstrakt klasse kan inneholde data Interface kan ikke inneholde data Interface kan inneholde konstanter (static final) Interface kan inneholde (abstrakte) metoder Klasser kan implementere interface eller deler av det Objekter av sub-klasser kan upcastes INSTITUTT FOR INFORMATIKK SVEIN BØE 13 Java 2D forts. BufferedImage inneholder fullstendig beskrivelse av bilde, dvs. pikselverdier og hvilke farger de representerer. Metoder: getheight, getwidth, gettype, getraster m.fl. Raster beskriver pikselverdiene. Readonly. Metoder: getheight, getwidth, getpixel, getsample m.fl. WritableRaster metoder: setpixel, setsample m.fl. DataBuffer inneholder pikselverdiene som er bygget opp av sampler. Et eller flere arrays. Organiseringen av samplene er gitt av SampleModel, for eksempel rgbrgbrgb eller rrrgggbbb. ColorModel beskriver mapping fra sampler til farger. Ikke nødvendigvis en-til-en mellom sampler og fargekomponenter. INSTITUTT FOR INFORMATIKK SVEIN BØE 15 Java 2D Klasser for grafikk (fonter, plotting, farger, bilder) Klasser for bilder: BufferedImage, Raster, WritableRaster, SampleModel, ColorModel, DataBuffer BufferedImage Raster ColorModel DataBuffer SampleModel INSTITUTT FOR INFORMATIKK SVEIN BØE 14 Java 2D forts. Subklasser av ColorModel ComponentColorModel For piksler med separate sampler for hver fargekomponent, samplene lagret separat. En-til-en. DirectColorModel For piksler med separate sampler for hver fargekomponent, samplene for ett piksel lagret i samme data-element. En-til-en. Tilsvarer X11 TrueColor. IndexColorModel For piksler med kun ett sample som er indeks i fargetabell. Tabellen gir mengden av hver primærfarge (8 bit). Tilsvarer X11 PseudoColor. Typisk for gråtonebilder. INSTITUTT FOR INFORMATIKK SVEIN BØE 16

Eksempler Lage et BufferedImage // Unsigned byte bilde med IndexColorModel (farger) BufferedImage image = new BufferedImage(400, 300, BufferedImage.TYPE_BYTE_INDEXED); // Unsigned byte gråtone-bilde med ComponentColorModel BufferedImage image = new BufferedImage(400, 300, BufferedImage.TYPE_BYTE_GRAY); BufferedImage.TYPE_INT_RGB: DirectColorModel, 3x8-bit rgb BufferedImage.TYPE_3BYTE_BGR: ComponentColorModel, 3x8-bit rgb Manipulere pikselverdier WritableRaster raster = image.getraster(); value = raster.getsample(x, y, 0); raster.setsample(xx, yy, 0, value); INSTITUTT FOR INFORMATIKK SVEIN BØE 17 Classpath forts. Hver komponent i classpathskal referere mor-katalogen til pakker, eks: /hom/inf160/efford/classes for å finne klasser i pakken com.pearsoneduc.ip.gui. Rekkefølgen av komponenter i classpath har betydning. Default classpath (dvs hvis tom) er. (nåværende katalog). http://java.sun.com/j2se/1.4.1/docs/tooldocs/findingclasses.html http://java.sun.com/products/jdk/1.4.1/docs/tooldocs/solaris/clas spath.html Kanskje burde det heller hete packagepath? Som opsjon til java og javac javac classpath kolon-separert-path klassenavn.java INSTITUTT FOR INFORMATIKK SVEIN BØE 19 Classpath Java leter etter klasser i henhold til classpath, eks: export CLASSPATH=path1:path2: Anta programmet TestClass.java i /hom/kari/java skal bruke klassen ImageSelector fra pakken com.pearsoneduc.ip.gui og at klassen ligger i ip.jar /hom/inf160 Efford Classes Source ip.jar com Javadoc Anta at vi står i /hom/kari/java. export CLASSPATH=.:/hom/inf160/Efford/Classes/ip.jar Hvis klassen ligger i com/pearsoneduc/ip/gui under Classes, kan vi i stedet bruke export CLASSPATH=.:/hom/inf160/Efford/Classes INSTITUTT FOR INFORMATIKK SVEIN BØE 18 Dokumentasjons-kommentarer Kommentarer og tilhørende klasse-/metode-/variabel-navn gir html-filer. - Innledes med /**, avsluttes med */ (vanlige kommentarer: // og /* */ ) - Kan inneholde tekst, html-kode og tags (spesielle kode-ord) - Brukes for klasser, interfacer, metoder og variable, skrives rett over - Tags for klasser og interfacer: @author navn (en tag for hver forfatter) - Tags for metoder, bl.a. @param navn beskrivelse @return beskrivelse @throws klassenavn beskrivelse (synonym med @exception) - Tags for alle typer, bl.a. @see klassenavn, eller @see klassenavn#metodenavn {@link navn synlig-tekst kan brukes i setninger INSTITUTT FOR INFORMATIKK SVEIN BØE 20