Forelæsning Uge 4 Torsdag

Relaterede dokumenter
Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Mandag

Virkefeltsregler i Java

Forelæsning Uge 4 Mandag

Forelæsning Uge 5 Mandag

Forelæsning Uge 4 Mandag

Forelæsning Uge 6 torsdag repetition

Forelæsning Uge 6 torsdag repetition

Quiz Uge 5 mandag første time

Quiz Uge 5 mandag første time

Forelæsning Uge 6 Mandag

Forelæsning Uge 3 Torsdag

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag

Forelæsning Uge 3 Torsdag

Forelæsning Uge 5 Mandag

Forelæsning Uge 5 Mandag

Forelæsning Uge 3 Mandag

Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner

Forelæsning Uge 5 Mandag

Forelæsning Uge 6 Mandag

Forelæsning Uge 6 Mandag

Forelæsning Uge 6 Mandag

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag

dintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4

Forelæsning Uge 2 Mandag

Forelæsning Uge 6 Mandag

Klasser og objekter. (Afsnit i manualen)

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4

Forelæsning Uge 3 Mandag

Forelæsning Uge 1 Torsdag

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

Forelæsning Uge 1 Torsdag

dintprog Manual Revision: 731 September 30, Introduktion Notation... 3 I Begreber 4 2 Grundbegreber om programmering 4

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag

Forelæsning Uge 10 Torsdag

Hvad er Objekter - Programmering

Ugeseddel 4 1. marts - 8. marts

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

Forelæsning Uge 3 Torsdag

COMPUTERSPIL 1. Opgave 1. Opgave 2

Fundamentale sprogbegreber

Anvendelse af metoder - Programmering

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.

Abstrakte datatyper C#-version

Integer.parseInt(args[0]) konverterer tegnstreng (f.eks. "10") til heltal (10). if (udtryk) else

Skriftlig eksamen i Datalogi

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Noter til C# Programmering Iteration

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Python programmering. Per Tøfting. MacFest

Eksempel: Skat i år 2000

Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion

Martin Olsen. DM507 Projekt Del I. 19. marts 2012 FOTO: Colourbox

Forelæsning Uge 10. Opremsningstyper. Forskellige teknikker til test og debugging. Afleveringsopgave: Debugging + Test.

Forelæsning Uge 3 Torsdag

COMPUTERSPIL 1. Opgave 1

Offset til terminalskærm i Java

Forelæsning Uge 12 Torsdag

Løsning af møntproblemet

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 6

Skriftlig eksamen i Datalogi

SWC eksamens-spørgsmål. Oversigt

class subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree.

Programmering i C. Lektion september 2009

Java Klasse nedarvninger

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

Skriftlig eksamen i Datalogi

Om binære søgetræer i Java

Videregående programmering i Java

SWC Elementer i klassedefinition

Ligninger med reelle løsninger

Sproget Limba. Til brug i G1 og K1. Dat1E 2003

Stakke, køer og lidt om hægtede lister - kapitel 16 og 17

ODIN-webservice ændringer release 2010 v2.0

Forelæsning Uge 12 Mandag

DRONNINGER (QUEENS) Opgave 1

Sproget Rascal (v. 2)

Introduktion til funktioner, moduler og scopes i Python

NetLogo-simuleringen. Simuleringer og fysiske modeller (henfaldsloven)

DANMARKS TEKNISKE UNIVERSITET

Rekursion C#-version

Forelæsning Uge 11. Nedarvning. Object klassen. Projektopgave om computerspil

Forelæsning 17, tirsdag 2. november 1999 Søgning efter en given værdi i en tabel. Programmering 1999

Introduktion til ActionScript, fortsat

Forelæsning Uge 10. Opremsningstyper. Forskellige teknikker til test og debugging. Afleveringsopgave: Debugging + Test.

Forelæsning Uge 10 Mandag

Software Construction 1. semester (SWC) januar 2014 Spørgsmål 1

Software Construction 1 semester (SWC) Spørgsmål 1

Videregående programmering i Java

Forelæsning Uge 3 Torsdag

Transkript:

Forelæsning Uge 4 Torsdag Algoritmeskabeloner findone, findall, findnoof, findsumof (sidste mandag) findbest Levetid for variabler og parametre Virkefeltsregler Hvor kan man bruge de forskellige variabler?

Algoritmeskabeloner Lidt repetition fra i mandags Finder ét element med den angivne egenskab public TYPE findone( PARAM ) { for( TYPE elem : LISTE ) { if( TEST(elem,PARAM) ) { return elem; return null; Finder alle elementer med den angivne egenskab, og returnerer dem i en arrayliste public ArrayList<TYPE> findall( PARAM ) { ArrayList<TYPE> result = new ArrayList<>(); for( TYPE elem : LISTE ) { if( TEST(elem,PARAM) ) { result.add(elem); Når vi finder et element returneres det (og algoritmen terminerer) return result; Når vi finder et element tilføjes det til result (som er en arrayliste) Køreprøven indeholder opgaver, som kan løses ved hjælp af algoritmeskabeloner 2

Algoritmeskabeloner Finder antallet af elementer med den angivne egenskab public int findnoof( PARAM ) { int result = 0; for( TYPE elem : LISTE ) { if( TEST(elem,PARAM) ) { result++; return result; Når vi finder et element tælles result op public int findsumof( PARAM ) { int result = 0; for( TYPE elem : LISTE ) { if( TEST(elem,PARAM) ) { result += VALUE(elem, PARAM); return result; Finder summen af de elementer, der har den angivne egenskab Når vi finder et element adderes værdien af elementet til result 3

findbest = finder bedste element i liste Løkke Test Dette test afgør om elem er bedre end hidtil bedste I så fald opdateres result public TYPE findbest( PARAM ) { TYPE result = null; Lokal variabel, som indeholder hidtil bedste for( TYPE elem : LISTE ) { Er elem bedre end hidtil bedste? if( TEST(elem,PARAM) ) { if( result == null BEST(elem,result,PARAM) ){ result = elem; or-operator (lazy) Har vi et hidtil bedste? return result; Hvorfor er det vigtigt? Højresiden evalueres kun, hvis venstresiden er false, dvs. hvis result!= null Når result!= null kan vi referere til objektets metoder/feltvariabler Algoritmeskabelon Gennemsøger LISTE med elementer af typen TYPE og returnerer det BEDSTE af de elementer, der opfylder TEST Hvis flere elementer er lige gode, returneres et vilkårligt af disse Hvis ingen elementer opfylder TEST, returneres null Hvis man undlader TEST (og fjerner den yderste if sætning), finder man det BEDSTE blandt alle i LISTE Gentag! 4

Eksempler på findbest public Pixel findbrightestdarkpixel(int color) { Pixel result = null; for( Pixel p : pixels ) { if( p.getcolor() <= color ) { if( result == null p.getcolor() > result.getcolor() ) { result = p; return result; Finder den lyseste mørke pixel public Person findfirstcontaining(string q) { Person result = null; for ( Person p : persons ) { if ( p.getname().contains(q) ) { if ( result == null p.getname().compareto(result.getname()) < 0 ){ result = p; return result; sammenligner to tekststrenge Finder alfabetisk-første person, hvis navn indeholder den angivne textstreng 5

Sammenligning af 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 SKOBUTIK BETINGELSEN TESTER SKOENES FARVE findone returnerer ét element, der opfylder den angivne betingelse (og stopper så snart en sådant element er fundet) EN RØD SKO findall returnerer en arrayliste med alle elementer, der opfylder den angivne betingelse ALLE RØDE SKO findnoof returnerer antallet af elementer, der opfylder den angivne betingelse ANTALLET AF RØDE SKO findsumof returnerer summen af værdierne af de elementer, der opfylder den angivne betingelse SAMLET PRIS FOR ALLE RØDE SKO findbest returnerer det bedste Skabelon Initialisering Opdatering af de elementer, der opfylder den angivne betingelse findall tom liste add BILLIGSTE RØDE SKO findnoof 0 += 1 findsumof 0 += VALUE findbest null hidtil bedste 6

Levetid for variabler og parametre Feltvariabler modellerer tilstand for objekter levetiden er den samme som objektets Klassevariabler modellerer tilstand for klasser levetiden er hele programudførelsen Lokale variabler hjælpevariabler i en metode/konstruktør levetiden er varigheden af metode/konstruktør kaldet Parametre parametrisering af metode/konstruktør lokale variabler hvor startværdien leveres af kalderen levetiden er varigheden af metode/konstruktør kaldet 7

Virkefeltsregler (fortolkning af navne) Et navn fortolkes i en kontekst, som er med til at definere navnets betydning. Nogle eksempler: Duncan spillede blændende i søndags! Ring til Kirsten og sig at... Beskeden Ring til Kirsten og sig at... fortolkes vidt forskelligt på arbejde og hjemme! I Java (og andre programmeringssprog) er der præcise, utvetydige regler for fortolkning af navne 8

Erklæringer i Java For at bruge et navn skal det erklæres eller importeres Navne fra java.lang importeres automatisk Klasserne String, Math og System Wrapper klasserne for de primitive typer En masse andet (se i Java API) Variabler kan erklæres på forskellige vis Feltvariabler og klassevariabler tilhører en klasse og kan bruges overalt i klassen De kan kun bruges uden for klassen, hvis de er public, hvilket feltvariabler aldrig bør være Lokale variabler (og parametre) tilhører en metode eller en konstruktør og kan aldrig bruges uden for denne 9

Feltvariabler og klassevariabler public class Scope { public Scope() { i = 0; public void addtwo() { addone(); addone(); private int i; public void addone() { i = i + 1; Style guide: Feltvariabler og klassevariabler bør erklæres i begyndelsen af klassen Regel i Java Style Guide Compileren er ligeglad public int getvalue() { return i; Alle feltvariabler/klassevariabler er tilgængelige overalt i klassen 10

Metoder og konstruktører public class Scope { public Scope() { i = 0; public void addtwo() { addone(); addone(); private int i; public void addone() { i = i + 1; public int getvalue() { return i; Alle metoder/konstruktører er tilgængelige overalt i klassen 11

Parametre public void adddays( int d ) { for( int i = 0; i < d; i++ ) { settonextdate(); Parametre til en metode er tilgængelige overalt i metoden, men aldrig uden for Samme regel gælder for parametre til en konstruktør 12

Andre lokale variabler X X public void pip() { x++; Fejl (medmindre der int x = 0; er en feltvariabel x) x++; Lokale variabler erklæret i en blok er tilgængelige fra og med erklæringen og indtil blokkens afslutning 13

Indre blokke En blok kan have indre blokke {... {...... public void pip() { int i = 0; { i++; System.out.println(i); int x = 0; x = i; x++; i++; System.out.println(x); System.out.println(i); Samme regel: lokale variabler er tilgængelig fra og med erklæringen og indtil afslutningen af den indre blok 14

Et navn virker også inde i indre blokke public void pip() {... int x = 0;... { i++; int j = 0; System.out.println(i); x++; System.out.println(x);...... 15

Et navn kan skygge for et andet public class Scope { private int i; public Scope() { i = 0; public void pip() { i++; { i++; System.out.println("a" + i ); int i = 0; this.i++ i++; System.out.println("b" + i ); this refererer til objektet selv this.i refererer altid til feltvariablen (selv om der er andre i'er, der skygger) Bruges ofte i konstruktører, hvor parametrene har samme navne, som de feltvariabler de skal bruges til at initialisere 16

Kontrolvariabel i for løkke og for-each løkke for løkke for( int j = 0 ; j < 4; j++) { System.out.println(j); for-each løkke for( Person p : persons) { System.out.println(p); Kontrolvariablen kan kun bruges inde i løkken (fra erklæringstidspunktet og frem) 17

Virkefeltsregler i Java (opsummering) En feltvariabel/klassevariabel erklæret i en klasse virker overalt i klassen med undtagelse af virkefeltet for eventuelle ens-benævnte lokale variabler erklæret i blokke i klassens metoder/konstruktører En lokal variabel erklæret i en blok (i en metode/konstruktør) virker overalt i blokken med undtagelse af den del af blokken, der går forud for erklæringen virkefeltet for eventuelle ens-benævnte lokale variabler erklæret i indre blokke i blokken 18

Hvilken variabel? Antagelse: Feltvariabler/klassevariabler er erklæret øverst i klassen (jvf. style-guide) Regel: Søg opad og udad indtil en erklæring nås (spring indre blokke, løkker og metoder/konstruktører over) public class Scope { private int i = 0; public Scope ( int i ) { i = i + 1; this.i++ System.out.println("a" + i ); public void pip() { System.out.println("b" + i ); for( int i = 0; i < 3; i ++){ System.out.println("c" + i ); System.out.println("d" + i );... 19

Opsummering Algoritmeskabeloner findone, findall, findnoof, findsumof (sidste mandag) findbest Levetid for variabler og parametre Virkefeltsregler Hvor kan man bruge de forskellige variabler? Køreprøven indeholder opgaver, som kan løses ved hjælp af algoritmeskabeloner 20

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