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

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

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

Java i INF 2310 Dagens tema

2 Om statiske variable/konstanter og statiske metoder.

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

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

INF Seminaroppgaver til uke 3

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

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

Kapittel 8: Programutvikling

UNIVERSITETET I OSLO

2 Om statiske variable/konstanter og statiske metoder.

Fra problem til program

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; }

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

INF Notater. Veronika Heimsbakk 10. juni 2012

Klasser, objekter, pekere og UML. INF gruppe 13

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

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

Kapittel 7: Mer om arv

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

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

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Oblig 4Hybelhus litt mer tips enn i oppgaven

Eksamen. Objektorientert Programmering IGR 1372

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE

Velkommen til. INF våren 2016

GUI («Graphical User Interface»)

Repitisjonskurs. Arv, Subklasser og Grensesnitt

1. NetBeans IDE: Lage en enkel mobilapplikasjon

INF1000: Forelesning 7. Konstruktører Static

Grafisk Brukergrensesnitt

Gjennomgang av eksamen H99

UNIVERSITETET I OSLO

INF 1000 høsten 2011 Uke september

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

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

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

INF1000 undervisningen INF 1000 høsten 2011 Uke september

INF1000 : Forelesning 4

UNIVERSITETET I OSLO

INF1010 Grafisk brukergrensesni3 med Swing og awt del 1 INF1010

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

UNIVERSITETET I OSLO

INF Uke 10. Ukesoppgaver oktober 2012

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. Finn klassene (hvilke objekter er det i problemet) 1. Dataene som beskriver problemet (hvilke objekter har vi og hvor mange klasser er det?

Dagens tema Kapittel 8: Objekter og klasser

Forelesning inf Java 5

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE

Forelesning inf Java 5

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

UNIVERSITETET I OSLO

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

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

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

INF1000: Forelesning 7

GUI («Graphical User Interface»)

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

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

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

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

INF1000 : Forelesning 1 (del 2)

UNIVERSITETET I OSLO

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

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

INF1000: Forelesning 4. Mer om arrayer Metoder

Emnenavn: Objektorientert programmering. Faglærer: Lars Emil Knudsen

INF 1000 (uke 2) Variabler, tilordninger og uttrykk

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

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet doble.rusc (kalt kildekoden): Hva er kompilering?

Jentetreff INF1000 Debugging i Java

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

UNIVERSITETET I OSLO

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

Forelesning inf Java 1

GUI («Graphical User Interface») del 2

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

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

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

Løsningsforslag Test 2

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Eivind Storm Aarnæs

Kom forberedt til tirsdag. INF1000 Tips til obligatorisk oppgave 4. Noen generelle tips. Oblig4: Komme igang

Programmeringsspråket C Del 3

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

Programmeringsspråket C Del 3

Løsningsforslag til Eksamen i fag SIF8005 Programmering. Torsdag 10. mai 2001 kl

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

Forklaring til programmet AbstraktKontoTest.java med tilhørende filer Konto.java, KredittKonto.java, SpareKonto.java

INF1000 Metoder. Marit Nybakken 16. februar 2004

INF Innleveringsoppgave 6

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

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

Transkript:

Java i INF 155 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 av applikasjons-vindu JMenu menu = new JMenu("menu-title"); // Husk å komponere menyen menubar.add(menu); frame.setmenubar(menubar); frame.pack(); // Klargjør (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 signalbehandling Lyd som anvendelse Få programmeringserfaring Dagens tema Utplukk av Java (GUI, kode-konvensjon, polymorfisme, classpath, javadoc) Java og signalbehandling Introduksjon til første Java øving INSTITUTT FOR INFORMATIKK SVEIN BØE 2 Dokumentasjon Java hjemmeside: http://java.sun.com/ Java tutorial: http://java.sun.com/docs/books/tutorial/ Java Sound: http://java.sun.com/products/java-media/sound/ Pakken inf155: http://www.ifi.uio.no/inf155/java/doc/ 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 Circle { double {... double { public class Rectangle { double {... double {... Ulike metodeimplementasjoner. // Må ha separate arrays Circle[] circles; Rectangle[] 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: SoundInput, BufferedImage Interface: Som for klasser. Eks: PeriodicGenerator Metoder: Verb, ellers som for klasser, men liten førstebokstav 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 Circle Rectangle INSTITUTT FOR INFORMATIKK SVEIN BØE 8

Superklasse med dummy-metoder: // Beregn totalt areal public class Shape { // Dummy -metoder (implementert): double { double { public class Circle extends Shape { double { double { public class Rectangle 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 Circle Rectangle INSTITUTT FOR INFORMATIKK SVEIN BØE 11 UML-diagram: abstract Shape Circle Rectangle 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 Circle extends Shape { double {... double {... public class Rectangle extends Shape { double {... double {... Interface: public interface Shape { double ; double ; Konkrete sub-klasser: public class Circle implements Shape { public double {... public double {... public class Rectangle 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 Pakken inf155 To klasser for lyd inn/ut (SoundInput/SoundOutput) skjuler Java Sound API Totalt om lag 40 klasser/interface, noen skal dere implementere Spille inn lyd: import inf155.*; SoundInput si = new SoundInput(); // Åpne kanal inn, alt. m/filnavn int[] data = new int[ ]; // For eksempel 128 // Spill inn korte blokker til betingelse innfridd while ( ) { num = si.read(data); // Hent fra kanal // Bruk data til noe, for eksempel lagre, plotte, filtrere, analysere si.close(); // Lukke kanal INSTITUTT FOR INFORMATIKK SVEIN BØE 15 Java Sound Lav-nivå støtte for lyd inn/ut. Del av J2SE > 1.3.0 Java-pakken inf155 bygger på Java Sound INSTITUTT FOR INFORMATIKK SVEIN BØE 14 Pakken inf155 forts. Spille av lyd: import inf155.*; SoundOutput so = new SoundOutput(); // Åpne kanal ut int[] data = new int[ ]; // For eksempel 128 //Spill korte klipp til betingelse innfridd while ( ) { // Fyll lyd-sampler i data-arrayen so.write(data); // Send til kanal so.close(); INSTITUTT FOR INFORMATIKK SVEIN BØE 16

Første Java øving DSP tema: Frekvensbegrepet, aliasing Java tema: Lage klasse og program Kompilere og kjøre program Lese og lage API-dokumentasjon INSTITUTT FOR INFORMATIKK SVEIN BØE 17 SumOfSines SliderPanel SineGenerator SumOfSines SoundOutput INSTITUTT FOR INFORMATIKK SVEIN BØE 19 Første Java øving forts. Oppgave: Generere sum av sinuser http://www.ifi.uio.no/inf155/java/doc/inf155/sumofsines.html Hvorfor sinuser? Signal med én frekvens, ren tone, lett å analysere med øret Sinus inn gir sinus ut med samme frekvens i lineære systemer Ethvert signal kan uttrykkes som sum av sinuser Først: Lage sinusgenerator Så: Plugge inn sinusgenerator i ferdig program inf155.sumofsines. Til slutt: Lage programmet MySumOfSines som bruker inf155.sumofsines INSTITUTT FOR INFORMATIKK SVEIN BØE 18 Plugge inn sinusgenerator SumOfSines-metoden start() starter en beregningsløkke, om lag slik: int[] buf = new int[128]; double value; SoundOutput so = new SoundOutput(); int n = -1; while (...) { // Fyll heltallsbufferen buf med beregnede sinus-sampler for (int i = 0; i < buf.length; i++) { ++n; value = <Sum av fun(n) fra alle sinus-generatorer> buf[i] = (int) value; so.write(buf); so.close(); INSTITUTT FOR INFORMATIKK SVEIN BØE 20

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 inf155.sumofsines som ligger slik /hom/inf155 java src classes doc inf155 inf155 inf155 SumOfSines.java SumOfSines.class SumOfSines.html mens vi står i /hom/kari/java export CLASSPATH=.:/hom/inf155/java/classes Hvis klassen også ligger i inf155.jar i classes-katalogen, kan vi evt. bruke export CLASSPATH=.:/hom/inf155/java/classes/inf155.jar INSTITUTT FOR INFORMATIKK SVEIN BØE 21 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 23 Classpath forts. Hver komponent i classpathskal referere mor-katalogen til pakker, eks: /hom/inf155/java/classes for å finne klasser i pakken inf155 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.ht ml http://java.sun.com/products/jdk/1.4.1/docs/tooldocs/solaris/cl asspath.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 22