Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
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