Forelæsning 2.2 Tilstand og opførsel (repetition)

Slides:



Advertisements
Lignende præsentationer
07 – Kort om OO Introduktion.
Advertisements

KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Hvordan man skriver koden.
FEN NOEA/IT Programmeringsteknologi 1 Arv og polymorfi Substitutionsprincippet Abstrakte klasser Design Patterns (Composite)
Iteration og parametrisering
MEC, DAIMIIntroJava AAU1 Crayon-objekter nu med loops og metoder.
Forelæsning 3.1 Collections Javas for-each løkke
Interfaces – brug. Overblik Tidligere: –Interfaces Comparable gør det muligt at bruge Collections metoderne –min, max, sort, … –Algoritmemønstre Find.
GP6, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 6 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
Forelæsning 5.1 Brug af klassen Collections og interfacet Comparable samt parametriserede typer Projektuge: Ants and Spiders / Lommeregner dIntProg,
Objekter og klasser Rasmus D. Lehrmann DM
Repetition: Introduktion til OOP med C# og .NET
Begreber og Redskaber 7. Plan for idag Rekursive underprogrammer Rekursive datastrukturer Rekursion vs iteration Rekursivt: Flette sortering.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
FEN IntroJava AAU1 Grafik – Crayon-objekter.
Fundamentale sprogbegreber
Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner findEn findAlle Primitive typer (forfremmelse og begrænsning) Identitet versus lighed.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
Repetition af dIntProg v/ Morten D. Bech. Tour de force Variabler Løkker Comparable ImErKo-reglen Eksamenssæt dIntProg, E13.
GP3, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 3 Vi begynder Slides ligger på hjemmesiden. Du er velkommen til.
Forelæsning 7.1 – repetition
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
Fundamentale sprogbegreber Sætninger og udtryk Niveauer af programbeskrivelse (statisk versus dynamisk syn)
Variabler, klassevariabler, identitet og lighed, collections
Introduktion til programmering Repetition - ArrayList.
 Bærbak & Caspersen, 2000Introducerende objektorienteret programmering1.1 Turtlemaskinen Arkitektur, instruktionssæt og eksempler.
DAIMIIntroducerende Objektorienteret Programmering1 Polymorfi og nedarvning Motivation for arv og “mange former”
 1999, Henrik B. ChristensenIntroducerende objektorienteret programmering8A.1 Polymorfi og nedarvning Motivation for arv og “mange former”
 Jens Bennedsen 2001Multimedie programmering10A.1 Polymorfi og nedarvning Motivation for arv og “mange former”
Lærde skildpadder Specialisering af skildpadder – nye kompetencer (metoder/kommandoer)
DAIMIIntroducerende objektorienteret programmering4B.1 Typer og tilstand i Java Typer, tilstand, erklæring, variable, primitive datatyper, reference- og.
Klasser og objekter. dIntProg, E08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
DAIMIIntroducerende objektorienteret programmeringkd.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
DAIMIIntroducerende objektorienteret programmering1B.1 Skildpadder Modeller, objekter og opførsel.
DAIMIIntroducerende objektorienteret programmering4B.1 Grundlæggende og Reference Typer i Java Typer, tilstand, erklæring, reference- og værdi semantik,
Klassehierarkier Specialisering vha. subklasser. dIntProg, E05Klassehierarkier.2 Oversigt Eksempler på specialisering –Aktør, Koreograf, Skuespiller,
Polymorfi Abstrakte klasser, substitutionsprincippet, statisk og dynamisk type.
Lærde skildpadder Specialisering af skildpadder – nye kompetencer (metoder/kommandoer)
 Jens Bennedsen 2001Multimedie programmering11.1 Lingo Basis.
DAIMIIntroducerende Objektorienteret Programmering8A.1 Polymorfi og nedarvning Motivation for arv og “mange former”
Grafik Modeller, objekter og opførsel. dIntProg, F08Grafik.2 Nye begreber Repetition (iteration) –gentagelse af opførsel Parametrisering –generalisering.
Klasser og objekter – grundbegreber.  Michael E. Caspersen, 2001Introducerende objektorienteret programmeringKlasser og objekter.2 Klasser og objekter.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
 Jens Bennedsen 2001Multimedie programmering1.1 Skildpadder Modeller, objekter og opførsel.
Lærde skildpadder Specialisering af skildpadder – nye kompetencer (metoder/kommandoer)
 Jens Bennedsen 2001Multimedie programmering3A.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
Klasser og objekter. dIntProg, F08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
Introduktion til programmering Repetition. dIntProg, F08Repetition.2 dIntProg Sidste forelæsning (12/10) –kort tilbagemelding på evaluering –repetition.
DAIMIIntroducerende objektorienteret programmering2A.1 Lærde skildpadder Specialisering af skildpadder – nye kompetencer (metoder/kommandoer)
Skildpadder Modeller, objekter og opførsel.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSkildpadder.2 Model Modeller bruges.
Forelæsning Uge 2 – Torsdag Java syntax og style guide Sætninger –Simple sætninger (assignment, interne og eksterne metodekald) –Sammensatte sætninger.
Algoritmeskabeloner findOne, findAll, findNoOf, findSumOf Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder.
Forelæsning Uge 5 – Mandag
Forelæsning Uge 2 – Torsdag
Forelæsning Uge 4 – Mandag
Forelæsning Uge 1 – Torsdag
Forelæsning Uge 4 – Mandag
Quiz – Uge 3 – mandag – første time
Forelæsning Uge 2 – Mandag
Forelæsning Uge 2 – Mandag
Forelæsning Uge 3 – Mandag
Klasser og objekter (Afsnit i manualen).
Forelæsning Uge 2 – Torsdag
Forelæsning Uge 2 – Torsdag
Parametrisering En kort introduktion.
Forelæsning Uge 2 – Mandag
Forelæsning Uge 2 – Mandag
Forelæsning Uge 4 – Torsdag
Præsentationens transcript:

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

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

Klasser og objekter i BlueJ Eksemplificér medDate-eksemplet i BlueJ dIntProg, E14

Tilstand og opførsel i BlueJ dIntProg, E14

Tilstand og opførsel i Greenfoot dIntProg, E14

Basale begreber Tilstand Opførsel Feltvariabel Type Konstruktør Metodesignatur Metode Returtype Parameter Argument Accessor Mutator Tildeling dIntProg, E14

Objekternes tilstand Feltvariable Access modifier (private) Type Navn dIntProg, E14

Objekternes opførsel Konstruktører Metoder dIntProg, E14

To slags metoder Accessor ? Mutator ! dIntProg, E14

Typer String int Person dIntProg, E14

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

Iteration og parametrisering

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

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

SkilledTurtle public class SkilledTurtle extends Turtle { public void square100() { move(100); turn(90); } ... dIntProg, E14

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

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

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

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

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

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

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

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

Sætninger og udtryk

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

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

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

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

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

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

Eksempel på selektion (valg) public void timeTick() { minutes.increment(); if ( minutes.getValue() == 0 ) { // it just rolled over! hours.increment(); } updateDisplay(); dIntProg, E14

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

Eksempel på indlejret selektion public void act() { if( foundLeaf() ) { eatLeaf(); } else if( canMove() ) { move(); else { turnLeft(); dIntProg, E14 33

Samme kode uden indrykning public void act() { if( foundLeaf() ) { eatLeaf(); } else if( canMove() ) { move(); else { turnLeft(); Demo dIntProg, E14 34

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

Eksempler på iteration (repetition) for ( int i= 0; i<60; i++ ) { c.timeTick(); } int i= 0; while ( i<60 ) { c.timeTick(); i++; } dIntProg, E14

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

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

Niveauer af programbeskrivelse Statisk versus dynamisk syn

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

Eksempel: Clock-display i BlueJ dIntProg, E14

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

JavaDOC dIntProg, E14

Java-kode dIntProg, E14

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

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

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

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: