Forelæsning Uge 4 – Mandag

Slides:



Advertisements
Lignende præsentationer
Velkommen til Softwarekonstruktion
Advertisements

KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Array vs. ArrayList. Arrays Et array er en struktureret metode til at gemme flere værdier af den samme datatype. Data’en i et array ligger op ad hinanden.
Grundlæggende programmering Efterår 2001
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.
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
Forelæsning 3.1 Collections Javas for-each løkke
Delphi og C++ Builder C++ Builder. C++ Historie Sproget blev designet for AT&T af danskeren Bjarne Stoustrup En objektorienteret videreudvikling.
Forelæsning 3.2 Billedredigering (bl.a. brug af for-løkker)
Primitive typer. dIntProg, F08Typer.2 Subtyperelation for primitive typer byte ≤ short ≤ int ≤ long ≤ float ≤ double char boolean double d; int i; d =
Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner findEn findAlle Primitive typer (forfremmelse og begrænsning) Identitet versus lighed.
Forelæsning 7.1 – repetition
Identitet vs lighed. Spørgsmål Hvad udskriver run metoden? 1.”Ens!” 2.”Forskellige!” 3.Ved ikke public class Driver{ public static void run(){ String.
Effective Java Blå gruppe. Item 18: Interfaces frem for abstrakte klasser Kan implementeres i klasser der ikke nedarver Eksisterende klasser kan nemt.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
DAIMIIntroducerende objektorienteret programmering4B.1 Typer og tilstand i Java Typer, tilstand, erklæring, variable, primitive datatyper, reference- og.
Klasser og objekter. dIntProg, E08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
DAIMIIntroducerende objektorienteret programmering4B.1 Grundlæggende og Reference Typer i Java Typer, tilstand, erklæring, reference- og værdi semantik,
Interfaces Afkobling af programkomponenter (eksempel: Comparable)
Collectionklasser Klassifikation og anvendelse. dIntProg, F08Collectionklasser.2 Samlinger af objekter Objektreferencer –for at holde fast i et objekt.
Fundamentale sprogbegreber Typer. dIntProg, F08Typer.2 Typer Primitive typer –boolean –byte, char, short, int, long, float, double Objekttyper –klassetype.
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.
Algoritmeskabeloner findOne, findAll, findNoOf, findSumOf Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder.
Quiz – Uge 4 – torsdag – første time. Skov med hjorte (stag = hjort) Programmér metoden ofSpecies. Metoden skal returnere en hjort af arten species. Hvis.
Forelæsning Uge 5 – Mandag
Forelæsning Uge 5 – Mandag
Forelæsning Uge 2 – Torsdag
Forelæsning Uge 6 – Mandag
● Forelæsning Uge 6 – Mandag
Forelæsning Uge 3 – Torsdag
Forelæsning Uge 3 – Torsdag
Forelæsning Uge 5 – Mandag
Forelæsning Uge 4 – Mandag
Forelæsning Uge 6 – torsdag – repetition
Quiz – Uge 3 – mandag – første time
Forelæsning Uge 3 – Mandag
Forelæsning Uge 2 – Mandag
Quiz – Uge 4 – torsdag – første time
Quiz Uge 2 – mandag.
Quiz – Uge 4 – torsdag – første time
Forelæsning Uge 6 – Mandag
Forelæsning Uge 3 – Mandag
Quiz – Uge 3 – torsdag – første time
Forelæsning Uge 3 – Torsdag
Forelæsning Uge 4 – Mandag
Studiepraktik Thomas Bøgholm Mikkel Hansen Jacob Elefsen
Forelæsning Uge 2 – Torsdag
Forelæsning Uge 5 – Mandag
Forelæsning Uge 4 – Mandag
Quiz – Uge 3 – mandag – første time
Quiz – Uge 4 – torsdag – første time
Quiz Uge 2 – mandag.
Quiz Uge 2 – mandag.
Quiz – Uge 4 – mandag – første time
Forelæsning Uge 3 – Mandag
Forelæsning Uge 3 – Torsdag
Quiz – Uge 4 – torsdag – første time
Parametrisering En kort introduktion.
Quiz – Uge 3 – torsdag – første time
Forelæsning Uge 2 – Mandag
Forelæsning Uge 5 – 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 4 – Mandag Algoritmeskabeloner findOne, findAll, findNoOf, findSumOf Primitive typer (forfremmelse og begrænsning) Identitet versus lighed for objekter (herunder strenge) Afleveringsopgave: Billedredigering På Projekt Euler og CodingBats findes en masse ekstra opgaver, hvor I kan øve jer i Java programmering, hvis I har tid tilovers Links under Uge 1 og 4 på Ugeoversigten p1 == p2 evaluerer til false "Jill" p2 Person "Fred" p1

● Algoritmeskabeloner Finder ét element, der opfylder betingelsen public Pixel findOnePixel(int color) { for( Pixel p : pixels ) { if( p.getColor() == color) { return p; } return null; Finder en pixel med den angivne farve public Person findOnePerson(String q) { for( Person p : persons ) { if( p.getName().contains(q) ) { return p; } return null; Finder en person, hvis navn indeholder den angivne textstreng

findOne = finder ét element public TYPE findOne( PARAM ) { for( TYPE elem : LISTE ) { if( TEST(elem, PARAM) ) { return elem; } return null; For-each løkke (gennemløb af LISTE) Test af betingelse Så snart vi finder et element, der opfylder TEST, returneres dette (hvorpå algoritmen terminerer) Algoritmeskabelon Gennemsøger LISTE med elementer af typen TYPE og returnerer ét element, der opfylder TEST Hvis flere elementer opfylder TEST, returneres et vilkårligt af disse Hvis ingen elementer opfylder TEST, returneres null (den tomme pointer) Algoritmeskabelon  Konkret metode Indsæt hvad de RØDE ting skal være (TYPE, LISTE, PARAM og TEST) Kopiér resten, som det står uden modifikationer

En anden algoritmeskabelon Finder alle elementer, der opfylder betingelsen public ArrayList<Pixel> findAllPixels(int color) { ArrayList<Pixel> result = new ArrayList<>(); for( Pixel p : pixels ) { if( p.getColor() == color ) { result.add(p); } return result; Finder alle pixels med den angivne farve public ArrayList<Person> findAllPersons(String q) { ArrayList<Person> result = new ArrayList<>(); for( Person p : persons ) { if( p.getName().contains(q) ) { result.add(p); } return result; Finder alle, hvis navn indeholder den angivne textstreng

findAll = finder alle elementer public ArrayList<TYPE> findAll( PARAM ) { ArrayList<TYPE> result = new ArrayList<>(); for( TYPE elem : LISTE ) { if( TEST(elem, PARAM) ) { result.add(elem); } return result; Lokal variabel For-each løkke (gennemløb af LISTE) Test af betingelse Elementer, der opfylder TEST, tilføjes til arraylisten result Algoritmeskabelon Gennemsøger LISTE med elementer af typen TYPE og returnerer en arrayliste med alle elementer, der opfylder TEST Hvis ingen elementer opfylder TEST, er arraylisten tom Video 4.2 fra BlueJ bogen behandler et eksempel på denne algoritmeskabelon Algoritmeskabelon  Konkret metode Indsæt hvad de RØDE ting skal være (TYPE, LISTE, PARAM og TEST) Kopiér resten, som det står uden modifikationer

Lad os kigge lidt nærmere på findAll Resultat type Parameter public ArrayList<TYPE> findAll( PARAM ) { ArrayList<TYPE> result = new ArrayList<TYPE>(); for( TYPE elem : LISTE ) { if( TEST(elem, PARAM) ) { result.add(elem); } return result; Start på for-each løkke Erklæring af lokal variabel TEST af element Opdatering af lokal variabel Returner resultat Lad os bibeholde de grønne dele, men udskifte de blå

findNoOf = finder antal elementer Ny algoritmeskabelon findNoOf = finder antal elementer public int findNoOf( PARAM ) { int result = 0; for( TYPE elem : LISTE ) { if( TEST(elem, PARAM) ) { result++; } return result; Hvad gør denne algoritmeskabelon? Erklæring Opdatering Algoritmeskabelon Gennemsøger LISTE med elementer af typen TYPE og returnerer antallet af elementer, der opfylder TEST Algoritmeskabelon  Konkret metode Indsæt hvad de RØDE ting skal være (TYPE, LISTE, PARAM og TEST) Kopiér resten, som det står uden modifikationer

findSumOf = finder summen af elementerne Endnu en algoritmeskabelon public int findSumOf( PARAM ) { int result = 0; for( TYPE elem : LISTE ) { if( TEST(elem,PARAM) ) { result += VALUE(elem, PARAM); } return result; Hvad gør denne algoritmeskabelon? Erklæring Opdatering Beregner værdi ved hjælp af VALUE , f.eks. – farven i et Pixel-objekt – længden af navnet i et Person-objekt Algoritmeskabelon Gennemsøger LISTE med elementer af typen TYPE og returnerer summen (beregnet ved hjælp af VALUE) af de elementer, der opfylder TEST Hvis man undlader TEST (og fjerner if sætningen), summerer man over alle elementer i LISTE Algoritmeskabelon  Konkret metode Indsæt hvad de RØDE ting skal være (TYPE, LISTE, PARAM og TEST) Kopiér resten, som det står uden modifikationer

Sammenligning af de fire algoritmeskabeloner Fælles Alle skabeloner gennemsøger en arrayliste og tjekker hvert enkelt element i listen op mod en angiven betingelse (der kan afhænge af parametre) Betingelsen involverer kun det element i listen, der pt. undersøges Forskelle findOne returnerer ét element, der opfylder den angivne betingelse (og stopper så snart et sådant element er fundet) findAll returnerer en arrayliste med alle de elementer, der opfylder den angivne betingelse findNoOf returnerer antallet af elementer, der opfylder den angivne betingelse findSumOf returnerer summen af værdierne af de elementer, der opfylder den angivne betingelse SKOBUTIK BETINGELSEN TESTER SKOENES FARVE EN RØD SKO ALLE RØDE SKO ANTALLET AF RØDE SKO SAMLEDE PRIS FOR ALLE RØDE SKO Skabelon Initialisering Opdatering findAll tom liste add findNoOf += 1 findSumOf += VALUE Køreprøven indeholder opgaver, som kan løses ved hjælp af algoritmeskabeloner

Eksempler på findNoOf Finder antal elementer, der opfylder betingelsen public int findNoOfPixels(int color) { int result = 0; for( Pixel p : pixels ) { if( p.getColor() == color ) { result++; } return result; Finder antal pixels med den angivne farve public int findNoOfPersons(String q) { int result = 0; for( Person p : persons ) { if( p.getName().contains(q) ) { result++; } return result; Finder antal personer, hvis navn indeholder den angivne textstreng

Eksempler på findSumOf Finder summen af de elementer, der opfylder betingelsen public int findSumOfDarkPixels(int color) { int result = 0; for( Pixel p : pixels ) { if( p.getColor() <= color ) { result += p.getColor(); } return result; Finder summen af mørke pixelværdier public int findSumOfTeenagers() { int result = 0; for( Person p : persons ) { if( 13 <= p.getAge() && p.getAge() <= 19 ) { result += p.getAge(); } return result; Clicker Quiz Finder summen af teenagernes alder

● Primitive typer i Java byte short int long 8 bit 16 bit 32 bit 64 bit Heltal Reelle tal 32 bit 64 bit float double ≤ ≤ ≤ ≤ ≤ ≤ Eksempel: boolean 1 bit Sandhedsværdier char 16 bit Tegn double d; int i; Man må gerne assigne en "lille" værdi til en "stor" variabel Lovligt: int ≤ double d = 7; X ≤ Y angiver at udtryk af type X kan assignes til variabler af type Y Ulovligt: i = 3.5; Man kan ikke proppe en "stor" værdi ind i en "lille" variabel

Forfremmelse og begrænsning En værdi kan forfremmes til en "større type" d = 7; Lovligt: integer udtrykket 7 bliver forfremmet til typen double Håndteres automatisk af compileren (når det er nødvendigt) i = d; Ulovligt: Man kan ikke proppe en stor værdi ind i en lille variabel En værdi kan begrænses til en "mindre type" i = (int) 3.5; Lovligt: double udtrykket 3.5 bliver begrænset til typen int og variablen i får værdien 3 Kræver et type-cast (indsat af programmøren) type-cast

Eksempler på forfremmelse og begrænsning Hvad er værdien af dette udtryk? (int) (12 / 2.5) (int) (12.0 / 2.5) (int) 4.8 4 12 forfremmes til 12.0 4.8 begrænses til 4 ved at smide decimalbrøken væk 9 + 6 * 2 / (int) -3.5 = 5 6 / (int) (2 / 2.5) Er nedenstående erklæringer lovlige? double d = 7; int i = d; Selv om d har værdien 7 kan den ikke assignes til heltals variablen i Det er typen der er afgørende Ikke den øjeblikkelige værdi

Konstanter (literals) Type Konstanter byte 15 short -3215 int 45320 long 45320L float 15.03e5F double 15.03e5 char 'h' boolean false Wrapper type Byte Short Integer Long Float Double Character Boolean Primitive typer Objekt typer Objekt type String "hello" Pause

● Identitet versus lighed (magen til) I det virkelige liv skelner vi mellem objekter, der er identiske, og objekter, der ligner hinanden To personer er ikke identiske, selvom de hedder det samme og er født samme dag (feltvariablerne har samme værdier) Hvis man fortæller tjeneren, at man vil have samme Pizza som sin kammerat, kommer han med en der ligner (dvs. er magen til) Java == identitet equals lighed (magen til) Operator Metode i den klasse, hvis elementer skal sammenlignes)

Identitet mellem objekter p1 == p2 evaluerer til false "Jill" p2 Person "Fred" p1 Operatoren == tester for identitet Det er ikke nok, at de to objekter har samme værdier for feltvariablerne Nedenfor peger p1 og p2 på samme objekt p1 == p2 evaluerer til false "Fred" p2 Person p1 p1 == p2 evaluerer til true "Jill" p2 Person "Fred" p1

Sammenligning af tekststrenge BlueJ's code pad String s1 = "Peter"; String s2 = "Petersen".substring(0,5); s1 "Peter" (String) s2 s1 == s2 false (boolean) s1.equals(s2) true (boolean) s2.equals(s1) String s3 = "Peter"; s1 == s3 Clicker Quiz == operatoren tester identitet (samme objekt) Tekststrenge skal altid sammenlignes ved hjælp af equals metoden Aldrig ved hjælp af == equals metoden tester lighed (magen til) compileren har fundet ud af at s1 og s3 er ens og har kun oprettet ét String objekt

● Afleveringsopgave: Billedredigering I får ”udleveret” et projekt med nedenstående to klasser Samme som i billedredigeringsdelen af sidste forelæsning Image int width int height int getWidth() int getHeight() String getTitle() Pixel getPixel(int i, int j) ArrayList<Pixel> getPixels() ArrayList<Pixel> getNeighbours(int i, int j) void updateCanvas() Pixel int value int getValue() void setValue(int value) *

Afleveringsopgave – fortsat I skal implementere en række billedoperationer på gråtone billeder Original Lysere og mørkere Invertering (sort ↔ hvid) Skalering Spejling vandret og lodret Uskarpt (blur)

● Opsummering Fire algoritmeskabeloner, som alle tjekker elementer i en arrayliste op mod en angiven betingelse findOne returnerer ét element findAll returnerer en arrayliste med alle elementer findNoOf returnerer antallet af elementer findSumOf returnerer summen af værdierne Primitive typer Regler for assignments og parametre (bestemt via ≤ relation) Forfremmelse (til større type) og begrænsning (til mindre type) Konstanter og Wrapper klasser Identitet versus lighed For objekter generelt Strenge skal altid sammenlignes ved hjælp af equals metoden Afleveringsopgave: Billedredigering Køreprøven indeholder opgaver, som kan løses ved hjælp af algoritmeskabeloner

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