Forelsning Uge 2 Mandag Objekters tilstand og opfrsel
Forelæsning Uge 2 – Mandag • Objekters tilstand og opførsel – Blue. J og Greenfoot – Java • Skabelse af objekter (via new-operatoren) • Iteration (gentagelser) og parametrisering • Forskellige slags variabler • Afleveringsopgave: Raflebæger 1 (Die. Cup 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 Blue. J 3
Objekters tilstand og opførsel i Blue. J 4
Objekters tilstand og opførsel i Blue. J 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
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 get. Name() { return name; } Tilstand beskrives ved hjælp af feltvariabler • Navn • Type • Access modifier (private) public void set. Name(String n) { name = n; } public int get. Age() { return age; } } public void birthday() { age= age + 1; System. out. println("Happy birthday " + name + "!"); } 9
Objekters tilstand og opførsel i Java public class Person { private String name; private int age; Opførsel beskrives ved hjælp af public Person(String n, int a) { name = n; age = a; } Konstruktører public String get. Name() { return name; } Metoder public void set. Name(String n) { name = n; } • Accessor (get) • Mutator (set) public int get. Age() { return age; } } public void birthday() { age = age + 1; System. out. println("Happy birthday " + name + "!"); } 10
Signatur for konstruktører og metoder public class Person { private String name; private int age; Navn public Person(String n, int a) { name = n; age = a; } • Konstruktører: klassens navn public String get. Name() { return name; } Returtype public void set. Name(String n) { name = n; } • Konstruktører: mangler Parameterliste • Kan være tom: () • Kan være tom: void Access modifier (public) public int get. Age() { return age; } } public void birthday() { age= age + 1; System. out. println("Happy birthday " + name + "!"); } 11
Feltvariabler, konstruktører og metoder public class Person { private String name; private int age; public Person(String n, int a) {. . . } public int get. Age() {. . . } 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 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 Wombat. World 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) 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; private Person p 1; female = sex; p 1 = new Person("Susan", 42, true); }. . . Person String name p 1: Person age female "Susan" 0 42 true false father 14
Endnu et objekt private Person p 2; p 2 = new Person("Peter", 69, false); Person String name p 2: Person age 0 69 female For feltvariabler af primitiv type repræsenteres værdien direkte i objektet (f. eks. age og female) "Peter" false father Person String name p 1: Person age female For feltvariabler af objekt type repræsenteres værdien via en reference til det pågældende objekt (f. eks. name og father) "Susan" 42 true father 15
Metoden set. Father public void set. Father(Person p) { father = p; } p 1. set. Father(p 2); Person String name p 2: Person "Peter" age 69 female false UML Objektdiagram (dynamisk) father Person String name p 1: Person age female "Susan" 42 true father 16
Metoden birthday p 1. birthday(); public void birthday() { age= age + 1; System. out. println("Happy birthday " + name + "!"); } Klasse (fra Java’s klasse bibliotek) Klassevariabel (af typen Print. Stream) Metode (printer linje på terminal) Person String name p 1: Person age female father Konkatenering (sammensætning) "Susan" 43 42 true e s u a P 17
Én person – to referencer private Person p 1, p 2; p 1 = new Person("Susan", 42, true); p 2 = p 1; p 1. birthday(); p 2. birhtday(); p 2: Person String name p 1: Person age female "Susan" 43 42 44 true father 18
To personer – én reference private Person p 1; p 1 = new Person("Susan", 42, true) p 1 = new Person("Peter", 69, false); p 1. birthday(); Person String name "Peter" age 69 70 female false father Person String name p 1: Person age female father "Susan" 42 true Vi kan ikke længere bruge dette objekt (ingen referencer til det) 19
● Iteration og parametrisering (0, 0) Greenfoot Skildpaddens tilstand: • Position: (x, y) Skildpadde • Vinkel: 270 180 World 0 (360) 90 (800, 600) . . . • Farve: : • Pen status: up/down Tilstand: • ((100, 100), 0, “black”, up) 20
Klassediagram UML Turtle move(int d) move. To(int x, int y) turn(double a) turn. To(double a) pen. Up() pen. Down() erase() Skilled. Turtle square(int length) spiral(. . . ). . . Greenfoot • Pilene (med trekantet hoved) angiver at Skilled. Turtle 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 21
Skilled. Turtle public class Skilled. Turtle extends Turtle {. . . Specificerer at. . . Skilled. Turtle er Vi siger også, at Turtle. . . en subklasse af er en superklasse for. . . Turtle Skilled. Turtle. . . } 22
Gentagelser //tegn et kvadrat move(100); turn(90); //tegn et kvadrat gentag 4 gange { move(100); turn(90); } //tegn en tolvkant move(100); turn(30); move(100); turn(30); . . . 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) 23
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); } 24
Metode: kvadrat med længde 100 public class Skilled. Turtle extends Turtle {. . . /** tegner et kvadrat med sidelængde 100 */ public void square 100() { 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. 25
Metode: kvadrat med vilkårlig størrelse public class Skilled. Turtle 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 26
Metode: polygon med vilkårligt antal sider public class Skilled. Turtle 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 Vi kan benytte den generelle metode polygon til at konstruere mere specifikke metoder, der kan tegne kvadrater og cirkler. public class Skilled. Turtle 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(calc. Length(radius), 360); } 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 Feltvariabler • Tilhører objektet • Lever og dør med dette • private som access modifier Hjælpe variabel Løkke variabel Parametre public class Skilled. Turtle 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); } Lokale variabler } • Tilhører metoden. . . • Lever og dør med denne } • Ingen access modifier } 30
● Afleveringsopgave: Raflebæger 1 (Die. Cup 1) I Blue. J implementeres et system med et raflebæger og to terninger Raflebæger • Terning har to metoder: Terning 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) – roll() repræsenterer et kast med terningen – get. Eyes() 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 – get. Eyes() returnere det viste antal øjne (i sidste slag) o m De 31
● Opsummering • Objekters tilstand og opførsel – Blue. J 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 (Die. Cup 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 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 d. Int. Prog instruktorer – Mandag 10 -12 – Onsdag 13 -15 – Fredag 11 -13 Studiecaféen er primært tiltænkt Datalogi- og IT-studerende, men andre d. Int. Prog 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 MAN TIR ONS TOR FRE LØR SØN 8 -9 TØ fri fri forelæsning fri 9 -10 TØ studiecafé fri TØ forelæsning fri 10 -11 studiecafé TØ studiecafé fri 11 -12 frokost studiecafé fri 12 -13 forelæsning studiecafé frokost fri 13 -14 forelæsning frokost TØ studiecafé fri 14 -15 forelæsning studiecafé TØ forelæsning læsegruppe fri 15 -16 forelæsning studiecafé forelæsning læsegruppe fri studer 16 -17 fri læsegruppe studiecafé fri fri studer 17 -18 fri læsegruppe fri fri studer 18 -19 fri fri 19 -20 fri fri 20 -21 studer fri læsegruppe studer fri studer 21 -22 studer fri læsegruppe studer fri studer 36
Det var alt for nu…. . … spørgsmål 37
- Slides: 37