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 Forskellige slags variabler 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 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

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

14 ● Skabelse af objekter (new operator)
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); Person name age female false father String "Susan" p1:Person 42 true

15 Endnu et objekt private Person p2;
p2 = new Person("Peter", 69, false); Person name age female false father 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 father) For feltvariabler af primitiv type repræsenteres værdien direkte i objektet (f.eks. age og female) Person 42 name age female true father String "Susan" p1:Person

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

17 Pause 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 father String "Susan" p1:Person 43 Pause

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 father 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 father String "Peter" 70 Person 42 name age female true father 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 ERKLÆRING + 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(length, 4); /** tegner en cirkel med en given radius */ public void circle(int radius) { polygon(calcLength(radius), 360);

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 ● Forskellige slags variabler
Feltvariabler Tilhører objektet Lever og dør med dette private som access modifier Parametre 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); } Hjælpe variabel Løkke variabel Lokale variabler Tilhører metoden Lever og dør med denne Ingen access modifier

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

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

33 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

34 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

35 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

36 Fast timeplan Som ny studerende kan det være en god ide at lave et fast arbejdsskema, således at tingene ikke bare flyder MAN TIR ONS TOR FRE LØR SØN 8-9 fri forelæsning 9-10 studiecafé 10-11 11-12 frokost 12-13 13-14 14-15 læsegruppe 15-16 studer 16-17 17-18 18-19 19-20 20-21 21-22

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


Download ppt "Forelæsning Uge 2 – Mandag"

Lignende præsentationer


Annoncer fra Google