Download præsentationen
Præsentation er lastning. Vent venligst
Offentliggjort afKaren Olsen Redigeret for ca. et år siden
1
Forelæsning 2.2 Tilstand og opførsel (repetition)
Iteration (gentagelser) og parametrisering Sætninger og udtryk Niveauer af programbeskrivelse Statisk versus dynamisk syn Afleveringsopgave 3.1: Skilled Turtle dIntProg, E14
2
Tilstand og opførsel (repetition)
Objekters tilstand er defineret ved et sæt af feltvariable alle objekter (af en given klasse) har de samme feltvariable ethvert objekt har sin egen tilstand (værdier af feltvariable) Opførsel objekters opførsel er defineret ved et sæt metoder alle objekter (af en given klasse) har de samme metoder dIntProg, E14
3
Klasser og objekter i BlueJ
Eksemplificér medDate-eksemplet i BlueJ dIntProg, E14
4
Tilstand og opførsel i BlueJ
dIntProg, E14
5
Tilstand og opførsel i Greenfoot
dIntProg, E14
6
Basale begreber Tilstand Opførsel Feltvariabel Type Konstruktør
Metodesignatur Metode Returtype Parameter Argument Accessor Mutator Tildeling dIntProg, E14
7
Objekternes tilstand Feltvariable Access modifier (private) Type Navn
dIntProg, E14
8
Objekternes opførsel Konstruktører Metoder dIntProg, E14
9
To slags metoder Accessor ? Mutator ! dIntProg, E14
10
Typer String int Person dIntProg, E14
11
Signaturer (4 elementer)
Access modifier (public) Returtype Kan være tom: void (mutator) Mangler ved konstruktører Navn Parametre Kan være tom: () dIntProg, E14
12
Iteration og parametrisering
13
Skildpadde (trækker blækspor)
(0,0) Position: (x,y) Vinkel: v Farve: color Pen status: up/down 270 World 0 (360) 180 90 (800,600) ... En turtels tilstand: - (position, vinkel, farve, penStatus) - starttilstand: ((x, y), 0, “black”, up) dIntProg, E14
14
Klassediagram Turtle SkilledTurtle Greenfoot UML … move(int d)
moveTo(int x, int y) turn(double a) turnTo(double a) penUp() penDown() erase() SkilledTurtle … square(int length) spiral(...) ... Greenfoot UML dIntProg, E14
15
SkilledTurtle public class SkilledTurtle extends Turtle {
public void square100() { move(100); turn(90); } ... dIntProg, E14
16
Gentagelser Syntax for for-løkker findes i munualen (afsnit 6.2.3)
//tegn en firekant move(100); turn(90); //tegn en firekant for ( int i= 0; i<4; i++ ) { move(100); turn(90); } //tegn en tolvkant ... (suk!) //tegn en tolvkant for ( int i= 0; i<12; i++ ) { move(100); turn(30); } Syntax for for-løkker findes i munualen (afsnit 6.2.3) Hvordan tegner man en cirkel? dIntProg, E14
17
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); } Længden 100 er indsat direkte i metoden I stedet kunne vi angive længden ved hjælp af en parameter Det ville være smartere at lave en metode der kan tegne kvadrater af vilkårlig størrelse. dIntProg, E14
18
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); } Parameter Argument Det ville være smartere at lave en metode der kan tegne ligesidede figurer med et vilkårligt antal sider dIntProg, E14
19
Metode: polygon med vilkårligt antal sider
public class SkilledTurtle extends Turtle { ... /** tegner en d-kant med sidelængde length */ public void polygon(int d, int length) { for ( int i= 0; i<d; i++ ) { move(length); turn(360/d); } dIntProg, E14
20
Generel metode specifikke metoder
Vi kan benytte den generelle metode polygon til at konstruere mere specifikke metoder, der kan tegne kvadrater og cirkler. class SkilledTurtle extends Turtle{ ... /** tegner en d-kant med sidelængde length public void polygon(int d, int length) { } /** tegner et kvadrat med sidelængde length */ public void square(int length) { polygon(4,length); /** tegner en cirkel med en given radius */ public void circle(int radius) { polygon(360,calcLength(radius)); dIntProg, E14
21
Pointe 1: Vær så generel som muligt
Det kan betale sig at lave gode generelle operationer, som kan genbruges i mange situationer. Parametrisering er nøglen hertil. Det er svært at ‘opfinde’ de gode generelle operationer (konkret generelt), men opsøg dem! dIntProg, E14
22
Pointe 2: Specifikation / implementation
Når man skal benytte en metode, er det vigtigt at forstå hvad operationen gør. Når man skal implementere en metode, skal man tage stilling til hvordan den skal gøre det dIntProg, E14
23
Pointe 3: Princippet gælder også for jer
Typisk er I både anvender og implementør af en metode, men det er vigtigt at skelne skarpt mellem de to syn. Når I anvender en metode skal I ikke tænke på hvordan den er realiseret. Når I implementerer en metode skal I ikke tænke på hvad den skal anvendes. Dette enkle princip er en af nøglerne til god programmering. dIntProg, E14
24
Sætninger og udtryk
25
Simple sætninger Assignment v= exp; x= x + 1;
udregn værdien af udtrykket på højresiden og tildel denne værdi til variablen på venstresiden v= exp; x= x + 1; x= 3 * w.getLeavesEaten(); Internt metodekald (samme objekt) method(…); move(100); turn(90); Eksternt metodekald (andet objekt) object-reference.method(…); w.eatLeaf(); c.moveTo(200,300); dIntProg, E14
26
Interne metodekald w: Wombat public class Wombat extends Actor {
private boolean foundLeaf() { ... } private void eatLeaf() { ...; leavesEaten= leavesEaten + 1; public void act() { if ( foundLeaf() ) { eatLeaf(); ... w: Wombat act() foundLeaf() eatLeaf() dIntProg, E14
27
Interne metodekald (this)
public class Wombat extends Actor { private boolean foundLeaf() { ... } private void eatLeaf() { ...; leavesEaten= leavesEaten + 1; public void act() { if (this.foundLeaf() ) { this.eatLeaf(); ... w: Wombat act() foundLeaf() eatLeaf() dIntProg, E14 27
28
Eksterne metodekald public class AnimalTrainer{ SkilledTurtle t; ...
a: AnimalTrainer t: SkilledTurtle public class AnimalTrainer{ SkilledTurtle t; ... public void doShow() { t.square(50); t.square(100); t.boxes(10); } doShow() square(50) square(200) boxes(20) Tegn sekvensdiagram på tavlen dIntProg, E14
29
Sammensatte sætninger
Blok (sekvens) { S1 S2 … Sn } Selektion (valg) if ( B ) S1 if ( B ) S1 else S2 Iteration (repetition) for ( exp1; exp2; exp3) S while ( B ) S dIntProg, E14
30
Eksempler på blokke (sekvens)
public void setTime(int hour, int minute) { hours.setValue(hour); minutes.setValue(minute); updateDisplay(); } public ClockDisplay(int hour, int minute) { hours= new NumberDisplay(24); minutes= new NumberDisplay(60); setTime(hour,minute); } dIntProg, E14
31
Eksempel på selektion (valg)
public void timeTick() { minutes.increment(); if ( minutes.getValue() == 0 ) { // it just rolled over! hours.increment(); } updateDisplay(); dIntProg, E14
32
Eksempel på selektion (valg mellem to)
public String getDisplayValue() { if ( value < 10 ) { return "0" + value; } else { return "" + value; Kunne denne del undværes? Nej. Vi ville få en typekonflikt dIntProg, E14
33
Eksempel på indlejret selektion
public void act() { if( foundLeaf() ) { eatLeaf(); } else if( canMove() ) { move(); else { turnLeft(); dIntProg, E14 33
34
Samme kode uden indrykning
public void act() { if( foundLeaf() ) { eatLeaf(); } else if( canMove() ) { move(); else { turnLeft(); Demo dIntProg, E14 34
35
Eksempler på iteration (repetition)
for ( int i= 0; i<4; i++ ) { c.move(length); c.turn(90); } int i= 0; while ( i<4 ) { c.move(length); c.turn(90); i++; } dIntProg, E14
36
Eksempler på iteration (repetition)
for ( int i= 0; i<60; i++ ) { c.timeTick(); } int i= 0; while ( i<60 ) { c.timeTick(); i++; } dIntProg, E14
37
Udtryk bruges forskellige steder
Højresiden af assignment skal have sammenlignelig type med variablen på venstresiden Argumenter til metodekald skal have sammenlignelig type med parametrene Betingelser i selektions- og iterationssætninger boolesk udtryk (sandhedsværdi: true eller false) initialiserings- og optællingsudtryk i for-sætning dIntProg, E14
38
Udvalgte operatorer Aritmetiske operatorer + - * / % ...
Logiske operatorer Relationelle operatorer Objektkonstruktionsudtryk + - * / % ... Overloadede operatorer Operatorpræcedens (14 niveauer) Brug parenteser hvis I er i tvivl (eller søg efter: ”java operator precedence”) && || ! ... == != < > <= >= new Class type (parameters) dIntProg, E14
39
Niveauer af programbeskrivelse Statisk versus dynamisk syn
40
Statisk versus dynamisk syn
Klassediagram (specifikation) hvad JavaDoc (specifikation) Java-kode (implementation) hvordan Objektdiagram objektrelationer (referencer) Sekvensdiagram Objektinteraktion (metodekald) Statisk struktur rum for hvad der generelt kan ske Dynamik scenarie for hvad der vil ske i en konkret situation dIntProg, E14
41
Eksempel: Clock-display i BlueJ
dIntProg, E14
42
Klassediagram (BlueJ vs. UML)
TestDriver run() 1 ClockDisplay NumberDisplay int getValue() String getDisplayValue() void setValue(int val) void increment() timeTick() setTime(int h, int m) getTime() void updateDisplay() 2 dIntProg, E14
43
JavaDOC dIntProg, E14
44
Java-kode dIntProg, E14
45
Objektdiagram :ClockDisplay hours minutes displayString :NumberDisplay
24 :NumberDisplay limit value “00:00” 60 :NumberDisplay limit value public ClockDisplay() { hours= new NumberDisplay(24); minutes= new NumberDisplay(60); updateDisplay(); } public NumberDisplay(int rollOverLimit) { limit= rollOverLimit; value= 0; } dIntProg, E14
46
Sekvensdiagram timeTick
minutes :NumberDisplay hours :NumberDisplay 23:00 22:59 :ClockDisplay timeTick() increment() getValue() increment() updateDisplay() getDisplayValue() getDisplayValue() public void timeTick() { minutes.increment(); if(minutes.getValue() == 0) { hours.increment(); } updateDisplay(); private void updateDisplay() { displayString = hours.getDisplayValue() + ":” + minutes.getDisplayValue(); }
47
Oversigt Sætninger Udtryk Niveauer af programbeskrivelse
simple sætninger (assignment, interne og eksterne metodekald) sammensatte sætninger (blok, selektion, iteration) (afsnit 6 i manualen) Udtryk operatorer præcedens regler og parenteser Niveauer af programbeskrivelse Statisk: klassediagram, JavaDoc, Java-kode Dynamisk: objektdiagram, sekvensdiagram dIntProg, E14
48
Afleveringsopgave 3.1: SkilledTurtle
World I Greenfoot skal der laves en underklasse til klassen Turtle med metoder til at tegne en række forskellige avancerede tegninger, i stil med nedenstående:
Lignende præsentationer
© 2024 SlidePlayer.dk Inc.
All rights reserved.