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 2 Torsdag

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag

Forelæsning Uge 5 Mandag

Forelæsning Uge 3 Torsdag

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

Forelæsning Uge 5 Mandag

Forelæsning Uge 2 Torsdag

Forelæsning Uge 3 Torsdag

Forelæsning Uge 5 Mandag

Forelæsning Uge 3 Mandag

Forelæsning Uge 6 Mandag

Forelæsning Uge 6 Mandag

Forelæsning Uge 2 Mandag

Forelæsning Uge 6 Mandag

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag

Ugeseddel 4 1. marts - 8. marts

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

Forelæsning Uge 6 Mandag

Forelæsning Uge 3 Mandag

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

Klasser og objekter. (Afsnit i manualen)

Forelæsning Uge 1 Torsdag

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

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 1 Torsdag

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag

Forelæsning Uge 10 Torsdag

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

Hvad er Objekter - Programmering

Forelæsning Uge 2 Mandag

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

COMPUTERSPIL 1. Opgave 1. Opgave 2

Anvendelse af metoder - Programmering

Forelæsning Uge 3 Torsdag

Abstrakte datatyper C#-version

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.

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

Fundamentale sprogbegreber

Forelæsning Uge 12 Torsdag

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

Eksempel: Skat i år 2000

Python programmering. Per Tøfting. MacFest

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

Skriftlig eksamen i Datalogi

COMPUTERSPIL 1. Opgave 1

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

Forelæsning Uge 12 Mandag

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

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

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

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi

Sproget Rascal (v. 2)

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

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

DRONNINGER (QUEENS) Opgave 1

Forelæsning Uge 3 Torsdag

ODIN-webservice ændringer release 2010 v2.0

Java Klasse nedarvninger

Offset til terminalskærm i Java

Introduktion til ActionScript

Om binære søgetræer i Java

Noter til C# Programmering Iteration

BILLEDREDIGERING (IMAGES)

Løsning af møntproblemet

Programmering i C. Lektion september 2009

Introduktion til funktioner, moduler og scopes i Python

Videregående programmering i Java

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

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

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

Kom igang med Scroll:bit

Programmering 1999 KVL Side 5-4. Klassen Time: metoder. Metoder i objektet giver mulighed for at ændre tilstanden, eller kigge på tilstanden.

Moduler i Standard ML

Forelæsning Uge 10 Mandag

SWC eksamens-spørgsmål. Oversigt

Grundlæggende Programmering ITU, Efterår Skriftlig eksamen i Grundlæggende Programmering

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

BRP Tal. Om computer-repræsentation og -manipulation. Logaritmer

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen

Rekursion C#-version

DANMARKS TEKNISKE UNIVERSITET

Kapitel 4 Løkker i C#

Transkript:

Forelæsning Uge 4 Torsdag Algoritmeskabeloner findone, findall, findnoof, findsumof (i mandags) 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; Når vi finder et element returneres det (og algoritmen terminerer) Køreprøven indeholder opgaver, som kan løses ved hjælp af algoritmeskabeloner 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); return result; Når vi finder et element tilføjes det til result (som er en arrayliste) 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 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) EKSEMPEL: SKOBUTIK ARRAYLISTE MED SKO BETINGELSEN TESTER SKOENES FARVE RØD Forskelle 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 af de elementer, der opfylder den angivne betingelse (sammenligner elementer) BILLIGSTE RØDE SKO Skabelon Lokal variabel Initialisering Opdatering findall arrayliste tom liste add findnoof heltal 0 += 1 findsumof heltal 0 += VALUE findbest element 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 Kontrolvariabler hjælpevariabler i hovedet af en for eller for-each løkke levetiden er varigheden af udførelsen af løkken Parametre 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: Ronaldo 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 pakken 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 (mens det kan være ok for klassevariabler) 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 Samme regel gælder for klassevariabler 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 Samme regel gælder for klassemetoder 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 metoden Samme regel gælder for parametre til en konstruktør 12

Andre lokale variabler X X public void pip() { x++; Fejl (medmindre der er en felt/klassevariabel x) int x = 0; 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 blok, hvori den er erklæret 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); Lokale variabler erklæret i hovedet af en for / for-each løkke er tilgængelige overalt i løkken (inklusiv hovedet), men aldrig uden for løkken 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 En lokal variabel erklæret i hovedet af en for / for-each løkke er tilgængelig overalt i løkken (inklusiv hovedet) 18

Hvilken variabel? Antagelse: Feltvariabler/klassevariabler er erklæret øverst i klassen (jvf. style-guide) Regel: Søg opad indtil en erklæring nås (gå ikke ind i de blokke, du passerer undervejs) 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 Hvor længe eksisterer en variabel / parameter? Hvor længe har den en værdi? 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