Forelæsning Uge 3 – Torsdag

Slides:



Advertisements
Lignende præsentationer
Velkommen til Softwarekonstruktion
Advertisements

KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
GP5, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 5 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
Forelæsning 3.1 Collections Javas for-each løkke
Plan Mini Java style guide Bouncing balls Debugger dIntProg, E10.
Forelæsning 3.2 Billedredigering (bl.a. brug af for-løkker)
Forelæsning 5.1 Brug af klassen Collections og interfacet Comparable samt parametriserede typer Projektuge: Ants and Spiders / Lommeregner dIntProg,
10. Datastrukturer. 2 Nordjyllands Erhvervakademi Collections library Datastrukturer i.NET kaldes normalt Collections Findes i namespace System.Collections.
Comparable Students German Students Composite Pattern State Pattern Observer Pattern Collections Interfaces Abstrakte klasser Design Patterns.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
FEN IntroJava AAU1 Endnu mere om Klasser og Objekter Mange til mange relationer Student-Course v3.
Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner findEn findAlle Primitive typer (forfremmelse og begrænsning) Identitet versus lighed.
Forelæsning 7.1 – repetition
Sweep-algoritmer. DAIMIIntroducerende objektorienteret programmeringsweep.2 Datatypen Sequence Oprette Sequence() Sequence(s, l, h) Kopiere Sequence clone()
Introduktion til programmering Repetition - ArrayList.
Collectionklasser Klassifikation og anvendelse. dIntProg, F08Collectionklasser.2 Samlinger af objekter Objektreferencer –for at holde fast i et objekt.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
 Jens Bennedsen 2001Multimedie programmering Collections Samlinger af objekter.
Introduktion til programmering Repetition. dIntProg, F08Repetition.2 dIntProg Sidste forelæsning (12/10) –kort tilbagemelding på evaluering –repetition.
Jesper Mosegaard Multimedie Programmering E2003 MMProg uge44 Java til Lingo Klasser, statements og lister.
Billedbehandling – processering af digitale billeder.
Forelæsning Uge 2 – Torsdag Java syntax og style guide Sætninger –Simple sætninger (assignment, interne og eksterne metodekald) –Sammensatte sætninger.
Forelæsning Uge 4 – Torsdag
Algoritmeskabeloner findOne, findAll, findNoOf, findSumOf Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder.
Forelæsning Uge 3 – Mandag Niveauer af programbeskrivelser – Statiske / dynamiske beskrivelser ArrayList –Collection med variabelt antal elementer –Der.
Forelæsning Uge 5 – Mandag
Forelæsning Uge 5 – Mandag
Forelæsning Uge 2 – Torsdag
Forelæsning Uge 3 – Torsdag
Forelæsning Uge 9 – Mandag
Forelæsning Uge 4 – Mandag
Forelæsning Uge 3 – Torsdag
Forelæsning Uge 1 – Torsdag
Forelæsning Uge 5 – Mandag
Forelæsning Uge 4 – Mandag
Forelæsning Uge 6 – torsdag – repetition
Forelæsning Uge 3 – Mandag
”Avanceret” Programmering
Quiz – Uge 4 – torsdag – første time
Forelæsning Uge 6 – Mandag
Forelæsning Uge 2 – Mandag
Forelæsning Uge 3 – Mandag
Klasser og objekter (Afsnit i manualen).
Quiz – Uge 3 – torsdag – første time
Forelæsning Uge 3 – Torsdag
Forelæsning Uge 4 – Mandag
Forelæsning Uge 2 – Mandag
Forelæsning Uge 2 – Torsdag
Forelæsning Uge 9 – Mandag
Forelæsning Uge 3 – Mandag
Forelæsning Uge 2 – Torsdag
Programmering.
Forelæsning Uge 12 Protected access Abstrakte klasser og interfaces
Forelæsning Uge 12 – Mandag
Forelæsning Uge 4 – Mandag
Quiz – Uge 3 – mandag – første time
Forelæsning Uge 9 Arrays Principper for design af klasser
Forelæsning Uge 2 – Mandag
Quiz – Uge 4 – torsdag – første time
Forelæsning Uge 3 – Mandag
Forelæsning Uge 3 – Torsdag
Quiz – Uge 4 – torsdag – første time
Quiz – Uge 3 – torsdag – første time
Forelæsning Uge 3 – Mandag
Forelæsning Uge 4 – Mandag
Quiz – Uge 4 – torsdag – første time
Forelæsning Uge 4 – Torsdag
Forelæsning Uge 3 – Torsdag
Quiz – Uge 9 – mandag – første time
Quiz – Uge 3 – mandag – første time
Præsentationens transcript:

Forelæsning Uge 3 – Torsdag Billedredigering (bl.a. brug af for-løkker) Gråtonebilleder (som er lidt simplere end farvebilleder) Arrays Kan "opbevare" et antal objekter (som ArrayList) Fast (på forhånd kendt) antal elementer Afleveringsopgave: Raflebæger 3 (DieCup 3)

Om programmering Giv ikke op! – Hæng i! Programmering Faser Anderledes Svær tankegang Faser Motivation Begejstring Tvivl? Frustration Eksistentiel krise Heureka! Fascination Indsigt Magt over teknologien Giv ikke op! – Hæng i! Tid Begejstring

● Billedredigering Lysere Mørkere Inverteret Uskarpt

Billedrepræsentation x Gråtoneværdi: Pixel (x,y)  [0..255] hvor 0 ~ sort og 255 ~ hvid width y height

én-til-mange relation Billedredigering Vi bruger to klasser Image repræsenterer et billede og har metoder som arbejder på billedet, bl.a. brighten, darken, invert og blur Pixel repræsenterer en pixel og har metoder til at aflæse og sætte pixlens gråtoneværdi Image Pixel * én-til-mange relation public class Pixel { // returnerer gråtonen for denne pixel public int getValue() // opdaterer gråtonen for denne pixel public void setValue(int value) }

Class Image – interface public class Image { // Returnerer billedets højde public int getHeight() // Returnerer billedets bredde public int getWidth() // Returnerer pixlen på position (x,y) public Pixel getPixel(int x, int y) // Returnerer en liste med samtlige pixels i billedet public ArrayList<Pixel> getPixels() // Returnerer de op til ni naboer til (x,y) (inklusiv (x,y)) public ArrayList<Pixel> getNeighbours(int x, int y) // Gentegner billedet public void pixelsUpdated() }

Skabelon for simpel billedbehandling image Vi bruger en for-each løkke til at gennemløbe samtlige pixels og opdatere dem en efter en Rækkefølgen er ligegyldig for os Pixel Arrayliste p for ( Pixel p : image.getPixels() ) { int oldValue = p.getValue(); int newValue = ???; p.setValue(newValue); } beregn newValue ud fra oldValue

Brighten newValue = oldValue + 30 0 ~ sort, 255 ~hvid

Brighten, Javakode image p for ( Pixel p : image.getPixels() ) { int oldValue = p.getValue(); int newValue = oldValue + 30 ; p.setValue(newValue); } p for ( Pixel p : image.getPixels() ) { p.setValue(p.getValue() + 30); } Kan I se et potentielt problem?

Invert newValue = 255 - oldValue

Invert, Javakode image p for ( Pixel p : image.getPixels() ) { int oldValue = p.getValue(); int newValue = 255 – oldValue ; p.setValue(newValue); } p for ( Pixel p : image.getPixels() ) { p.setValue(255 - p.getValue()); }

Eksempler på billedoperationer brighten Gør billedet lidt lysere  darken Gør billedet lidt mørkere invert Inverterer hver gråtone  blur Erstatter hver pixel med gennemsnittet af naboerne mirror Spejler billedet om den vertikale midterakse flip Spejler billedet om den horisontale midterakse rotate Roterer billedet 90 grader mod uret resize Skalerer billedet, så størrelsen ændres ClickerQuiz I den anden afleveringsopgave i uge 4 skal I implementere disse operationer

● Arrays Arrays har et fast (på forhånd kendt) antal elementer Ligner Collections, men er bygget direkte ind i Java sproget Findes også i de fleste andre programmeringssprog Skal ikke importeres 1. Erklæring (som feltvariabel) Kan også bruges på primitive typer private int[] hourCounts; 2. Initialisering (ofte i konstruktør) Antal af elementer kan defineres via et udtryk hourCounts = new int[24]; Eksempler på brug Udtrykket i […] skal evaluere til et heltal i intervallet [0,23] count = hourtCounts[hour]; hourCounts[hour]++; Antal elementer i {…} bestemmer størrelsen Erklæring og initialisering med værdier kan slås sammen private int[] monthLength = {31,28,31,30,…,30,31};

To metoder, der bruger et array // Analyserer antal events indtruffet i hver klokketime public void analyzeHourlyData() { while (reader.hasMoreEntries()) { LogEntry entry = reader.nextEntry(); int hour = entry.getHour(); hourCounts[hour]++; } // Udskriver antal events indtruffet i hver klokketime public void printHourlyCounts() { System.out.println("Hr: Count"); for (int hour = 0; hour < hourCounts.length; hour++) { System.out.println(hour + ": " + hourCounts[hour]); }

For løkker brugt på arrays Javas for-each løkke kan også bruges på arrays private String url; private String[] urls; for (String url : urls) { System.out.println(url); } For-løkken giver adgang til at bruge indexet for (int hour = 0; hour < hourCounts.length; hour++) { System.out.println(hour + ": " + hourCounts[hour]); } Det gør for-løkken ikke for (int value : hourCounts) { System.out.println( ???? + ": " + value); }

Forskelle på arrays og arraylister Arrays har et fast (på forhånd kendt) antal elementer Simplere syntax for erklæring private int[] hourCounts; i stedet for private ArrayList<Integer> hourCounts; Arrays kan bruges på primitive typer (uden brug af wrapper klasse) Simplere syntax for initialisering hourCounts = new int[24]; i stedet for hourCounts = new ArrayList<Integer>(); Simplere syntax for kald hourCounts[13]; i stedet for hourCounts.get(13); Meget nemmere at håndtere flerdimensionale strukturer minuteCounts = new int[24][60]; secondCounts = new int[24][60][60]; Arrays er indbygget i Java sproget Giver mere effektiv implementering (hurtigere kode) og simplere syntax Kendt fra mange andre programmeringssprog Arrays er ikke en Collection type Pause

Eksempler på brug af arrays Java API under ArrayList En arrayliste er en liste af elementer implementeret ved hjælp af et array I klassen Index har jeg Erklæret en feltvariabel Indsat fem Person objekter i arraylisten Klassen Person Feltvariabler: Klassen String En streng er en liste af tegn (char) Implementeret ved hjælp af et array private ArrayList<Person> list; private String name; private int age;

Lad os inspicere et objekt af klassen Index Kan I tænke på andre situationer, hvor det vil være naturligt at bruge arrays?

Billedrepræsentation via arrays j Pixel [ i ][ j ]  [0..255] hvor 0 ~ sort og 255 ~ hvid width i private Pixel[][] pixels; pixels = new Pixel[width][height]; height To dimensionalt array med width x height elementer

ClickerQuiz Skab et billede public class Image // Feltvariabler private int width, height; private String title; private Pixel[][] pixels; ... // Konstruktør public Image(int width, int height, String title){ this.width = width; this.height = height; this.title = title; pixels = new Pixel[width][height]; // Lav alle pixels sorte for(int i=0; i < height; i++) { for(int j=0; j < width; j++) { pixels[i][j] = new Pixel( 0 ); } Reference til 2-dimensionalt array (af Pixels) j i width height Sort

Metoder til at aflæse pixels // Returner pixlen i position(i,j) public Pixel getPixel(int i, int j){ return pixels[i][j]; } // Returnerer arrayliste med alle pixels i billedet public ArrayList<Pixel> getPixels(){ ArrayList<Pixel> result = new ArrayList<Pixel>(); for(int i=0; i < height; i++){ for(int j=0; j < width; j++){ result.add(pixels[i][j]); } return result; I en af afleveringsopgaver i uge 4 skal I arbejde med billedredigering I arbejder med arraylister Men "inde bagved" er billederne repræsenteret i 2-dimensionale arrays

Metode til at aflæse naboer // Returnerer en arrayliste med alle naboer public ArrayList<Pixel> getNeighbours(int i,int j){ ArrayList<Pixel> result = new ArrayList<Pixel>(); for(int x = i-1; x <= i+1; x++){ for(int y = j-1; y <= j+1; y++){ addPixelToList(x,y,result); } return result; Vi skal tjekke om punktet (i,j) ligger indenfor billedet // Tilføj(i,j) til list, hvis (i,j) ligger indenfor billedet private void addPixel (int i, int j, ArrayList<Pixel> list){ if( 0 <= i && i < width && 0 <= j && j < height ){ list.add(pixels[i][j]); }

● Afleveringsopgave: Raflebæger 3 (DieCup 3) Vi skal endnu en gang arbejde videre med vores Raflebæger I skal lave noget mere aftestning Sammenligne slag fra to raflebægere, der har hhv. 3 og 4 terninger. Generalisere terningen, så den kan have et vilkårligt antal sider Skriv ny testmetode.

● Opsummering Billedredigering Arrays Forberedelse til afleveringsopgave i Uge 4 Arrays Fast (på forhånd kendt) antal elementer Bygget direkte ind i Java Giver mere effektiv adgang til de enkelte elementer Simplere syntax (uden brug af de normale metode kald) Afleveringsopgave: Raflebæger 3 (DieCup 3)

Det var alt for nu….. … spørgsmål