Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Forelæsning Uge 2 – Mandag

Lignende præsentationer


Præsentationer af emnet: "Forelæsning Uge 2 – Mandag"— Præsentationens transcript:

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

2 ● Objekters tilstand og opførsel
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

3 Objekters tilstand og opførsel i BlueJ

4 Objekters tilstand og opførsel i BlueJ

5 Objekters tilstand og opførsel i BlueJ

6 Objekters tilstand og opførsel i Greenfoot

7 Objekters tilstand og opførsel i Greenfoot

8 Objekters tilstand og opførsel i Greenfoot

9 Objekters tilstand og opførsel i Java
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) { public int getAge() { return age; public void birthday() { age= age + 1; System.out.println("Happy birthday " + name + "!"); Tilstand beskrives ved hjælp af feltvariabler Navn Type Access modifier (private)

10 Objekters tilstand og opførsel i Java
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) { public int getAge() { return age; public void birthday() { age= age + 1; System.out.println("Happy birthday " + name + "!"); Opførsel beskrives ved hjælp af Konstruktører Metoder Accessor (get) Mutator (set)

11 Signatur for konstruktører og metoder
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) { public int getAge() { return age; public void birthday() { age= age + 1; System.out.println("Happy birthday " + name + "!"); Navn Konstruktører: klassens navn Parameterliste Kan være tom: () Returtype Kan være tom: void Konstruktører: mangler Access modifier (public)

12 Feltvariabler, konstruktører og metoder
public class Person { private String name; private int age; public Person(String n, int a) { ... } public int getAge() public void birthday() } Feltvariabler (attributter) bestemmer objektets tilstand erklæres (oftest) 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 alle klasser

13 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, 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

14 ● Skabelse af objekter (new operator)
public class Person { private String name; private int age; private boolean female; private Person farther; public Person(String n, int a, boolean sex) { name = n; age = a; female = sex; } ... private Person p1; p1 = new Person("Susan", 42, true); Person name age female false farther String "Susan" p1:Person 42 true

15 Endnu et objekt private Person p2;
p2 = new Person("Peter", 69, false); Person name age female false farther String "Peter" p2:Person 69 false For feltvariabler af objekt type repræsenteres værdien via en reference til det pågældende objekt (f.eks. name og farther) For feltvariabler af primitiv type repræsenteres værdien direkte i objektet (f.eks. age og female) Person 42 name age female true farther String "Susan" p1:Person

16 UML Objektdiagram (dynamisk)
Metoden setFarther p1.setFarther(p2); public void setFarther(Person p) { farther = p; } Person 69 name age female false farther String "Peter" p2:Person UML Objektdiagram (dynamisk) Person 42 name age female true farther String "Susan" p1:Person

17 Metoden birthday Konkatenering (sammensætning)
p1.birthday(); public void birthday() { age= age + 1; System.out.println("Happy birthday " + name + "!"); } Konkatenering (sammensætning) Klasse (fra Java’s klasse bibliotek) Klassevariabel (af typen PrintStream) Metode (printer linje på terminal) Person 42 name age female true farther String "Susan" p1:Person 43

18 Én person – to referencer
private Person p1, p2; p1 = new Person("Susan", 42, true); p2 = p1; p1.birthday(); p2.birhtday(); p2:Person Person 42 name age female true farther String "Susan" p1:Person 43 44

19 To personer – én reference
private Person p1; p1 = new Person("Susan", 42, true) p1 = new Person("Peter", 69, false); p1.birthday(); Person 69 name age female false farther String "Peter" 70 Person 42 name age female true farther String "Susan" p1:Person Vi kan ikke længere bruge dette objekt (ingen referencer til det)

20 ● Iteration og parametrisering
Greenfoot (0,0) Skildpaddens tilstand: Position: (x,y) Skildpadde Vinkel: 0 (360) 270 180 90 World (800,600) Farve:: ... Pen status: up/down Tilstand: ((100, 100), 0, “black”, up)

21 Klassediagram UML Greenfoot Turtle
move(int d) moveTo(int x, int y) turn(double a) turnTo(double a) penUp() penDown() erase() 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 square(int length) spiral(...) ...

22 SkilledTurtle public class SkilledTurtle extends Turtle { ...
} Specificerer at SkilledTurtle er en subklasse af Turtle Vi siger også, at Turtle er en superklasse for SkilledTurtle

23 Gentagelser Hurtigere at skrive Nemmere at læse og forstå
//tegn et kvadrat move(100); turn(90); //tegn et kvadrat gentag 4 gange { move(100); turn(90); } //tegn en tolvkant move(100); turn(30); ... //tegn en tolvkant gentag 12 gange { move(100); turn(30); } Hurtigere at skrive Nemmere at læse og forstå Lettere at vedligeholde (rette i)

24 Keyword (reserveret ord)
For-løkke i Java INITIALISERING Lokal variable i af type int med startværdi 0 TEST Falsk Sand Keyword (reserveret ord) KROP move(100); turn(90); OPDATERING i++ ≈ i = i+1 for( int i=0 ; i<4 ; i++ ) { move(100); turn(90); }

25 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 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.

26 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 i square Argument i move Det ville være smartere at lave en metode, der kan tegne ligesidede figurer med et vilkårligt antal sider

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

28 Generel metode  specifikke metoder
Vi kan benytte den generelle metode polygon til at konstruere mere specifikke metoder, der kan tegne kvadrater og cirkler. public class SkilledTurtle extends Turtle { ... /** tegner en n-kant med sidelængde length public void polygon(int length, int n) { } /** 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));

29 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

30 ● Afleveringsopgave: Raflebæger 1 (DieCup 1)
I BlueJ implementeres et system med et raflebæger og to terninger Terning Raflebæger 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) 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 Demo

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

32 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 6. 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 "Fantastiske præmier" til dem, der gennemfører alle seks Mere information: cs.au.dk/Challenge LINK

33 Studiestartsprøve Der er fra i år indført studiestartsprøve for alle nye bachelorstuderende Prøvens hovedformål er hurtigt at finde de studerende, der ikke har påbegyndt studiet, så de kan udmeldes inden det officielle sommeroptag opgøres den 1. oktober Prøven indeholder to opgaver: Du skal  logge ind på selvbetjeningen mit.au.dk og tjekke, at dine oplysninger er korrekte Du skal udfylde et tilsendt spørgeskema, hvor der spørges ind til baggrund, studievalg og hvordan introdagene har været Hvis du ikke gennemfører de ovennævnte opgaver, dumper du studiestartsprøven og vil blive udmeldt Studiestartsprøven stilles 31.august med svarfrist 4.september

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


Download ppt "Forelæsning Uge 2 – Mandag"

Lignende præsentationer


Annoncer fra Google