forelæsning uge 2 –...

Post on 16-Sep-2020

1 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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)

● 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

Objekters tilstand og opførsel i BlueJ

3

Objekters tilstand og opførsel i BlueJ

4

Objekters tilstand og opførsel i BlueJ

5

Objekters tilstand og opførsel i Greenfoot

6

Objekters tilstand og opførsel i Greenfoot

7

Objekters tilstand og opførsel i Greenfoot

8

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)

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

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

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

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

● 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

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)

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)

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)

É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

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)

(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)

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

SkilledTurtle

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

}

22

Specificerer at SkilledTurtle er en subklasse af Turtle

Vi siger også, at Turtleer en superklasse for SkilledTurtle

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)

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)

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

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

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

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

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

● 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

● 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)

● 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)

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

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

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

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

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

37

top related