Download , / ) konvensjon

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
// Applikasjonens hoved-vindu
1
INSTITUTT FOR INFORMATIKK
SVEIN BØE
3
// Geometrier/avstander/størrelser
// Vis frem på skjermen
// Hvis meny i toppen
// Husk å komponere menyen
JMenuBar menuBar = new JMenuBar();
JMenu menu = new JMenu("menu-title");
menuBar.add(menu);
frame.setMenuBar(menuBar);
frame.pack();
frame.setVisible(true);
} // main
} // GUI
// Legg til visuelt element i container
contentPane.add(new JLabel("lable-text"));
Container contentPane = frame.getContentPane(); // Container for visuelle elementer
public class GUI {
public static main(String[] args) {
JFrame frame = new JFrame("window title");
import java.awt.*;
import javax.swing.*;
SVEIN BØE
Java i INF 160
GUI med Swing
UNIVERSITETET
I OSLO
INSTITUTT FOR INFORMATIKK
UNIVERSITETET
I OSLO
SVEIN BØE
2
INSTITUTT FOR INFORMATIKK
SVEIN BØE
• Læreboka: http://www.ifi.uio.no/inf160/Efford/
• Programmeringsguide for Java 2D:
http://java.sun.com/j2se/1.4.1/docs/guide/2d/spec/
4
• Java 2D: http://java.sun.com/docs/books/tutorial/2d/images/
• Java tutorial: http://java.sun.com/docs/books/tutorial/
• Java hjemmeside: http://java.sun.com/
Dokumentasjon
UNIVERSITETET
I OSLO
INSTITUTT FOR INFORMATIKK
• Java og bildebehandling i J2SE.
BufferedImage m/venner.
• Utplukk av Java (GUI, kode-konvensjon,
polymorfisme, classpath, javadoc)
Dagens tema
• Introduksjon til bildebehandling
• Få programmeringserfaring
Mål med kurset
UNIVERSITETET
I OSLO
SVEIN BØE
5
INSTITUTT FOR INFORMATIKK
SVEIN BØE
7
Hver form krever separat kode!
Ny form krever tillegg av kode!
// Må ha separate arrays
Circle[] circles;
Rectangle[] rectangles;
…
double area = 0.0;
for (int i = 0; i < circles.length; i++) {
area += circles[i].area();
}
for (int i = 0; i < rectangles.length;
i++) {
area += rectangles[i].area();
}
public class Circle {
double area() {...}
double circumference() {…}
}
public class Rectangle {
double area() {...}
double circumference() {...}
}
Ulike metode-implementasjoner
// Beregn totalt areal
Separate klasser:
Polymorfisme (dynamisk binding)
UNIVERSITETET
I OSLO
INSTITUTT FOR INFORMATIKK
• 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.
Kode-konvensjon
UNIVERSITETET
I OSLO
SVEIN BØE
area()
circumference()
area()
circumference()
INSTITUTT FOR INFORMATIKK
Rectangle
Circle
SVEIN BØE
area()
circumference()
Shape
UML (Unified Modelling Language):
Polymorfisme forts.
UNIVERSITETET
I OSLO
INSTITUTT FOR INFORMATIKK
8
6
– 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
• Navnekonvensjonen viktigst, gir informasjon om funksjon
Kode-konvensjon forts.
UNIVERSITETET
I OSLO
SVEIN BØE
SVEIN BØE
area()
circumference()
area()
circumference()
INSTITUTT FOR INFORMATIKK
Rectangle
area()
circumference()
interface Shape
11
9
Dette virker pga polymorfisme!
Ny form krever ikke tillegg av kode
(bare klasse-definisjon av formen)!
Circle
UML-diagram:
Polymorfisme forts.
UNIVERSITETET
I OSLO
INSTITUTT FOR INFORMATIKK
// Kan ha felles array (upcasting)
Shape[] shapes;
public class Shape {
// Dummy -metoder (implementert):
double area() {}
double circumference() {}
}
public class Circle extends Shape {
double area() {…}
double circumference() {…}
}
public class Rectangle extends Shape
{
double area() {…}
double circumference{…}
}
double area = 0.0;
for (int i = 0; i < shapes.length; i++) {
area += shapes[i].area();
}
// Beregn totalt areal
Superklasse med dummy-metoder:
Polymorfisme forts.
UNIVERSITETET
I OSLO
INSTITUTT FOR INFORMATIKK
SVEIN BØE
Konkrete sub-klasser:
public class Circle extends Shape {
double area() {...}
double circumference() {...}
}
public class Rectangle extends Shape
{
double area() {...}
double circumference() {...}
}
public abstract class Shape {
// Ikke implementere metoder her
abstract double area();
abstract double area();
}
Superklasse med abstrakte metoder
(abstrakt klasse):
Polymorfisme forts.
UNIVERSITETET
I OSLO
10
12
Konkrete sub-klasser:
public class Circle implements Shape {
public double area() {...}
public double circumference() {...}
}
public class Rectangle extends Shape {
// Implementere metoder
public double area() {...}
public circumference() {...}
}
Merk: public metode-implementasjoner
public interface Shape {
double area();
double circumference();
}
Interface:
area()
circumference()
area()
circumference()
INSTITUTT FOR INFORMATIKK
Rectangle
SVEIN BØE
area()
circumference()
abstract Shape
Circle
UML-diagram:
Polymorfisme forts.
UNIVERSITETET
I OSLO
13
SVEIN BØE
15
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.
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.
INSTITUTT FOR INFORMATIKK
•
•
•
•
•
Java 2D forts.
UNIVERSITETET
I OSLO
SVEIN BØE
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
•
•
•
•
• Interface kan ikke inneholde data
• Abstrakt klasse kan ikke instantieres
• Abstrakt klasse kan definere metoder
(både abstrakte og konkrete/implementerte)
• Abstrakt klasse kan inneholde data
Klasser og interface
UNIVERSITETET
I OSLO
SampleModel
DataBuffer
Raster
BufferedImage
14
INSTITUTT FOR INFORMATIKK
SVEIN BØE
16
– 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.
• Subklasser av ColorModel
Java 2D forts.
UNIVERSITETET
I OSLO
SVEIN BØE
ColorModel
Klasser for grafikk (fonter, plotting, farger, bilder)
Klasser for bilder:
BufferedImage, Raster, WritableRaster, SampleModel, ColorModel,
DataBuffer
INSTITUTT FOR INFORMATIKK
•
•
Java 2D
UNIVERSITETET
I OSLO
SVEIN BØE
17
INSTITUTT FOR INFORMATIKK
SVEIN BØE
19
Hver komponent i classpath skal 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
Classpath forts.
UNIVERSITETET
I OSLO
INSTITUTT FOR INFORMATIKK
•
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);
BufferedImage.TYPE_INT_RGB: DirectColorModel, 3x8-bit rgb
// Unsigned byte gråtone-bilde med ComponentColorModel
BufferedImage image =
new BufferedImage(400, 300, BufferedImage.TYPE_BYTE_GRAY);
Lage et BufferedImage
// Unsigned byte bilde med IndexColorModel (farger)
BufferedImage image =
new BufferedImage(400, 300, BufferedImage.TYPE_BYTE_INDEXED);
com
Javadoc
SVEIN BØE
18
INSTITUTT FOR INFORMATIKK
SVEIN BØE
• {@link navn synlig-tekst} kan brukes i setninger
• @see klassenavn, eller @see klassenavn#metodenavn
- ”Tags” for alle typer, bl.a.
20
• @throws klassenavn beskrivelse (synonym med @exception)
• @return beskrivelse
• @param navn beskrivelse
- ”Tags” for metoder, bl.a.
- ”Tags” for klasser og interfacer: @author navn (en tag for hver forfatter)
- Brukes for klasser, interfacer, metoder og variable, skrives rett over
- Kan inneholde tekst, html-kode og ”tags” (spesielle kode-ord)
- Innledes med /**, avsluttes med */ (vanlige kommentarer: ”//” og ”/*…*/”)
Kommentarer og tilhørende klasse-/metode-/variabel-navn gir html-filer.
Dokumentasjons-kommentarer
UNIVERSITETET
I OSLO
INSTITUTT FOR INFORMATIKK
•
ip.jar
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
Source
Classes
Efford
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
Classpath
Eksempler
•
UNIVERSITETET
I OSLO
UNIVERSITETET
I OSLO