37
Forelæsning Uge 2 – Mandag Objekters tilstand og opførsel BlueJ og Greenfoot – Java Skabelse af objekter (via new-operatoren) Iteration (gentagelser) og parametrisering Forskellige slags variabler Afleveringsopgave: Raflebæger 1 (DieCup 1)

Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

Forelæsning Uge 2 – Mandag• Objekters tilstand og opførsel

– BlueJ og Greenfoot– Java

• Skabelse af objekter (via new-operatoren)

• Iteration (gentagelser) ogparametrisering

• Forskellige slags variabler

• Afleveringsopgave:Raflebæger 1 (DieCup 1)

Page 2: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

● Objekters tilstand og opførsel

• Tilstand– Objekters tilstand er defineret ved et sæt af

feltvariabler

– alle objekter (af en given klasse) har de samme feltvariabler

– ethvert objekt har sin egen tilstand (værdier af feltvariabler)

• Opførsel– objekters opførsel er defineret ved et sæt

konstruktører og metoder

– alle objekter (af en given klasse) har de samme konstruktører og metoder

2

Page 3: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

Objekters tilstand og opførsel i BlueJ

3

Page 4: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

Objekters tilstand og opførsel i BlueJ

4

Page 5: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

Objekters tilstand og opførsel i BlueJ

5

Page 6: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

Objekters tilstand og opførsel i Greenfoot

6

Page 7: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

Objekters tilstand og opførsel i Greenfoot

7

Page 8: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

Objekters tilstand og opførsel i Greenfoot

8

Page 9: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

public class Person {

private String name;private int age;

public Person(String n, int a) {name = n;age = a;

}

public String getName() {return name;

}

public void setName(String n) {name = n;

}

public int getAge() {return age;

}

public void birthday() {age= age + 1;System.out.println("Happy birthday " + name + "!");

}}

Objekters tilstand og opførsel i Java

9

Tilstand beskrives ved hjælp af feltvariabler• Navn• Type• Access modifier (private)

Page 10: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

public class Person {

private String name;private int age;

public Person(String n, int a) {name = n;age = a;

}

public String getName() {return name;

}

public void setName(String n) {name = n;

}

public int getAge() {return age;

}

public void birthday() {age = age + 1;System.out.println("Happy birthday " + name + "!");

}}

Objekters tilstand og opførsel i Java

Konstruktører

Metoder• Accessor (get)• Mutator (set)

10

Opførsel beskrives ved hjælp af

Page 11: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

public class Person {

private String name;private int age;

public Person(String n, int a) {name = n;age = a;

}

public String getName() {return name;

}

public void setName(String n) {name = n;

}

public int getAge() {return age;

}

public void birthday() {age= age + 1;System.out.println("Happy birthday " + name + "!");

}}

Signatur for konstruktører og metoder

Navn• Konstruktører: klassens navn

Parameterliste• Kan være tom: ()

Returtype• Kan være tom: void• Konstruktører: mangler

Access modifier (public)

11

Page 12: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

Feltvariabler, konstruktører og metoder

• Feltvariabler (attributter)– bestemmer objektets tilstand– erklæres altid private– kan kun tilgås fra klassens

egne konstruktører og metoder (vedkommer ikke andre)

• Konstruktører og metoder– bestemmer objektets opførsel– grænseflade til omverdenen– erklæres oftest public– kan kaldes fra objekter af alle

klasser

public class Person {

private String name;private int age;

public Person(String n, int a){ ... }

public int getAge(){ ... }

public void birthday(){ ... }

}

12

Page 13: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

Klasser og typer• Enhver klasse bestemmer en type

• En objekt type er en type, der er bestemt via en klasse– De mulige værdier i typen er de objekter, der kan skabes

(instansieres) af den pågældende klasse– Ex: Person, Date, Wombat og WombatWorld er objekt typer– Navne på objekt typer skrives med stor begyndelsesbogstav

(de er navne på klasser)

• Primitive typer– Har ”simple” værdier, der ikke er objekter– Ex: heltal (int), reelle tal (double) og tegn (char)– Navne på primitive typer skrives med lille begyndelsesbogstav

• Bemærk at String er en objekt type

13

Page 14: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

● Skabelse af objekter (new operator)

14

public class Person {private String name;private int age;private boolean female;private Person father;

public Person(String n, int a, boolean sex) {name = n;age = a;female = sex;

}...

}

private Person p1;p1 = new Person("Susan", 42, true);

p1:Person

Person

0

name

age

female false

father

String

"Susan"42

true

Page 15: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

Endnu et objekt

15

private Person p2;p2 = new Person("Peter", 69, false);

p1:Person

Person

42

name

age

female true

father

String

"Susan"

p2:Person

Person

0

name

age

female false

father

String

"Peter"69

false For feltvariabler af objekt type repræsenteres værdien via en

reference til det pågældende objekt(f.eks. name og father)

For feltvariabler af primitiv type

repræsenteres værdien direkte i objektet

(f.eks. age og female)

Page 16: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

public void setFather(Person p) {father = p;

}

Metoden setFather

16

p1.setFather(p2);

p1:Person

Person

42

name

age

female true

father

String

"Susan"

p2:Person

Person

69

name

age

female false

father

String

"Peter"

UML Objektdiagram (dynamisk)

Page 17: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

Metoden birthday

17

p1:Person

Person

42

name

age

female true

father

String

"Susan"

public void birthday() {age= age + 1;System.out.println("Happy birthday " + name + "!");

}

43

p1.birthday();

Klasse(fra Java’s

klasse bibliotek)

Klassevariabel (af typen

PrintStream)

Metode(printer linje på terminal)

Konkatenering(sammensætning)

Page 18: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

Én person – to referencer

18

p1:Person

Person

42

name

age

female true

father

String

"Susan"

private Person p1, p2;p1 = new Person("Susan", 42, true);p2 = p1;p1.birthday();p2.birhtday();

p2:Person

4344

Page 19: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

To personer – én reference

19

p1:Person

Person

42

name

age

female true

father

String

"Susan"

private Person p1;p1 = new Person("Susan", 42, true)p1 = new Person("Peter", 69, false);p1.birthday();

Person

69

name

age

female false

father

String

"Peter"70

Vi kan ikke længere bruge dette objekt (ingen referencer til det)

Page 20: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

(0,0)

World

Skildpaddens tilstand:

0 (360)

270

180

90

• Farve::

...(800,600)

Greenfoot

20

● Iteration og parametrisering

Skildpadde • Vinkel:

• Pen status: up/down

• Position: (x,y)

Tilstand:• ((100, 100), 0, “black”, up)

Page 21: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

Klassediagram

Turtle

move(int d)moveTo(int x, int y)turn(double a)turnTo(double a)penUp()penDown()erase()

SkilledTurtle

square(int length)spiral(...)...

UML Greenfoot

21

• Pilene (med trekantet hoved) angiver at SkilledTurtle er en subklasse af Turtle, der igen er en subklasse af Actor– En subklasse arver superklassens

feltvariabler og metoder (også selv om de er private)

– Metoderne kan dog ændres (forfines) i subklassen

Page 22: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

SkilledTurtle

public class SkilledTurtle extends Turtle {..................

}

22

Specificerer at SkilledTurtle er en subklasse af Turtle

Vi siger også, at Turtleer en superklasse for SkilledTurtle

Page 23: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

Gentagelser

//tegn et kvadratmove(100); turn(90);move(100); turn(90);move(100); turn(90);move(100); turn(90);

//tegn et kvadratgentag 4 gange {move(100); turn(90);

}

//tegn en tolvkantgentag 12 gange {move(100); turn(30);

}

//tegn en tolvkantmove(100); turn(30);move(100); turn(30);move(100); turn(30);move(100); turn(30);move(100); turn(30);move(100); turn(30);move(100); turn(30);move(100); turn(30);...move(100); turn(30);

23

• Hurtigere at skrive• Nemmere at læse og forstå• Lettere at vedligeholde (rette i)

Page 24: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

For-løkke i Java

for( int i=0 ; i<4 ; i++ ){

move(100); turn(90);}

24

ERKLÆRING + INITIALISERING• Lokal variable i af type int med startværdi 0

TEST• Falsk• Sand

KROP• move(100); turn(90);

OPDATERING• i++ ≈ i = i+1

Keyword(reserveret

ord)

Page 25: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

Metode: kvadrat med længde 100

public class SkilledTurtle extends Turtle {

...

/** tegner et kvadrat med sidelængde 100 */public void square100() {for ( int i=0; i<4; i++ ) {

move (100);

turn (90);}

}

...}

Det ville være smartere at lave en metode, der kan tegne kvadrater af vilkårlig størrelse.

I stedet kunne vi angive længden ved hjælp af en parameter

Længden 100 indsat direkte i metoden

25

Page 26: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

Metode: kvadrat med vilkårlig størrelse

public class SkilledTurtle extends Turtle {

...

/** tegner et kvadrat med sidelængde length */

public void square(int length ) {

for ( int i=0; i<4; i++ ) {

move( length );

turn(90);}

}

...}

Argument i move

Parameter i square

Det ville være smartere at lave en metode, der kan tegne ligesidede figurer med et vilkårligt antal sider

26

Page 27: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

Metode: polygon med vilkårligt antal sider

public class SkilledTurtle extends Turtle {...

/** tegner en n-kant med sidelængde length */public void polygon(int length, int n) {for ( int i=0; i<n; i++ ) {move(length);turn(360/n);

}}...}

}

27

Page 28: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

Generel metode specifikke metoder

public class SkilledTurtle extends Turtle {.../** tegner en n-kant med sidelængde lengthpublic void polygon(int length, int n) {...}

/** tegner et kvadrat med sidelængde length */public void square(int length) {

polygon(length, 4);}

/** tegner en cirkel med en given radius */public void circle(int radius) {

polygon(calcLength(radius), 360);}

}

Vi kan benytte den generelle metode polygon til at konstruere mere specifikke metoder, der kan tegne kvadrater og cirkler.

28

Page 29: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

Vigtige principper for god programmering

• Det kan betale sig at lave gode generelle metoder, som kan genbruges i mange situationer– Parametrisering er nøglen hertil– Det er svært at "opfinde" gode generelle metoder, dvs. at gå fra

det konkrete til det generelle – men forsøg!

• Skeln mellem anvendelse og implementation– Når man anvender en metode, er det vigtigt at forstå hvad

operationen gør– Når man implementerer en metode, skal man tage stilling til,

hvordan den skal gøre det– I skal også skelne – selv om I både er anvender og implementør

29

Page 30: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

● Forskellige slags variabler

30

public class SkilledTurtle extends Turtle {private String color;...public void polygon( int length, int n ) {double angle = 360/n;for ( int i=0; i<n; i++ ) {move(length);turn(angle);

}}...}

}

Feltvariabler• Tilhører objektet• Lever og dør med dette• private som access modifier Parametre

Hjælpe variabel

Løkke variabel

Lokale variabler• Tilhører metoden• Lever og dør med denne• Ingen access modifier

Page 31: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

● Afleveringsopgave: Raflebæger 1 (DieCup 1)

• Terning har to metoder:– roll() repræsenterer et kast med terningen– getEyes() returnere det viste antal øjne (i sidste slag)

• Raflebæger indeholder to terninger og har to metoder:– roll() repræsenterer et kast med de to terninger– getEyes() returnere det viste antal øjne (i sidste slag)

I BlueJ implementeres et system med et raflebæger og to terninger

TerningRaflebæger

31

Tilfældige kast kan modelleres ved hjælp af klassen Random

fra Java’s klasse bibliotek(i opgaven er det forklaret,

hvordan dette gøres)

Page 32: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

● Opsummering

32

• Objekters tilstand og opførsel– BlueJ og Greenfoot– Java

• Skabelse af objekter (via new-operatoren)– Objekt referencer

• Iteration (gentagelser)– Java’s for-løkke

• Parametrisering– Lav gode generelle metoder– Skeln mellem anvendelse og implementation

• Afleveringsopgave: Raflebæger 1 (DieCup 1)

Page 33: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

CS Challenge• Henvender sig til alle 1. års studerende, der følger den

introducerende datalogiundervisning– Det er et tilbud, og derfor på ingen måde obligatorisk

• Der stilles seks sjove udfordringer inden for programmering– De skal løses hen over efteråret (første aflevering 11. september)– Hver udfordring illustrerer universelle principper om algoritmer og programmer– Det handler mere om at tænke end at knokle.

• Deltagerne får detaljeret feedback på deres løsninger

• CS Challenge kan tælle med i talentforløb– Ekstra udfordringer til særligt talentfulde bachelorstuderende på datalogi og it– Anerkendelse herfor på eksamensbevis– Søges ved starten af 2. studieår– Kræver karaktergennemsnit på 10 fra 1.studieår

• Mere information: cs.au.dk/Challenge http://cs.au.dk/Challenge/

33

Page 34: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

Studiestartsprøve• Gælder alle nye bachelorstuderende

– Prøvens hovedformål er at identificere de studerende, der ikke har påbegyndt studiet, så de kan udmeldes inden det officielle sommeroptag opgøres

• Mandag den 5. september 2016 vil I modtage en mail på jeres au-mailadresse– Mailen indeholder et link til et spørgeskema, som I skal besvare.– Det er obligatorisk at gennemføre studiestartsprøven, da den

bruges til at registrere, om I er studieaktive.– I skal besvare spørgeskemaet inden fredag d. 9. september 2016

kl 12.00

34

Page 35: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

Universitetsstudier er hårdt arbejde• Vi forventer, at I arbejder 45 timer pr uge, dvs. 15 timer

pr kursus – Svarer til en 37 timers arbejdsuge – når de eksamens- og

undervisningsfrie perioder tages med i beregningen

• Brug gerne Studiecaféen, som jeres "kontor"– Underetagen af bygning 5342, IT-Parken, Åbogade 34

(spørg efter Ada-0)– Lokalerne kan benyttes 24/7

• Bemandet med to dIntProg instruktorer– Mandag 10-12– Onsdag 13-15– Fredag 11-13

Studiecaféen er primært tiltænkt Datalogi- og IT-studerende, men andre dIntProg studerende er velkomne på ovenstående tidspunkter

35

Page 36: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

Fast timeplan• Som ny studerende kan det være en god ide at lave et

fast arbejdsskema, således at tingene ikke bare flyder

36

MAN TIR ONS TOR FRE LØR SØN

8-9 TØ fri fri fri forelæsning fri fri

9-10 TØ studiecafé fri TØ forelæsning fri fri

10-11 studiecafé studiecafé studiecafé TØ studiecafé fri fri

11-12 frokost studiecafé studiecafé frokost studiecafé fri fri

12-13 forelæsning studiecafé frokost studiecafé frokost fri fri

13-14 forelæsning frokost TØ studiecafé studiecafé fri fri

14-15 forelæsning studiecafé TØ forelæsning læsegruppe fri fri

15-16 forelæsning studiecafé studiecafé forelæsning læsegruppe fri studer

16-17 fri læsegruppe studiecafé fri fri fri studer

17-18 fri læsegruppe fri fri fri fri studer

18-19 fri fri fri fri fri fri fri

19-20 fri fri fri fri fri fri fri

20-21 studer fri læsegruppe studer fri fri studer

21-22 studer fri læsegruppe studer fri fri studer

Page 37: Forelæsning Uge 2 – Mandagtildeweb.au.dk/au531793/dintprog/e16/uge_2/slides/mandag/Slides-u… · Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – BlueJ og

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

37