Forelæsning Uge 2 – Mandag

Slides:



Advertisements
Lignende præsentationer
Velkommen til Softwarekonstruktion
Advertisements

07 – Kort om OO Introduktion.
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Selve objektet versus referencen til objektet Nedarvning
Grundlæggende programmering Efterår 2001
09 – Arv og polymorfi i java
Hvordan man skriver koden.
VOOP, 8 april Refleksion i objekt orienterede programmeringssprog Mandag 8/ Kasper Østerbye.
GP5, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 5 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
GP 10, 7/ Grundlæggende programmering Efterår 2001 Forelæsning 10 onsdag 7/ kl. 9:15 – 12:00.
Iteration og parametrisering
Forelæsning 3.1 Collections Javas for-each løkke
Fundamentale datastrukturer
GP 8, 24/ Grundlæggende programmering Efterår 2001 Forelæsning 8 onsdag 24/ kl. 9:15 – 12:00.
Objekter og klasser Rasmus D. Lehrmann DM
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
Forelæsning 2.2 Tilstand og opførsel (repetition)
Fundamentale sprogbegreber
Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner findEn findAlle Primitive typer (forfremmelse og begrænsning) Identitet versus lighed.
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.
Variabler, klassevariabler, identitet og lighed, collections
 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,
Indledende Programmering Uge 6 - Efterår 2006
Polymorfi Abstrakte klasser, substitutionsprincippet, statisk og dynamisk type.
Lærde skildpadder Specialisering af skildpadder – nye kompetencer (metoder/kommandoer)
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.
 Jens Bennedsen 2001Multimedie programmering3B.1 Specifikationer Betingelser, specifikationer og JavaDoc.
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.
Jesper Mosegaard Multimedie Programmering E2003 MMProg uge44 Java til Lingo Klasser, statements og lister.
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.
Forelæsning Uge 4 – Torsdag
Forelæsning Uge 2 – Torsdag
Forelæsning Uge 4 – Mandag
Forelæsning Uge 1 – Torsdag
Quiz – Uge 2 – torsdag – første time
Quiz – Uge 3 – mandag – første time
Forelæsning Uge 3 – Mandag
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 – Mandag
Forelæsning Uge 2 – Torsdag
Forelæsning Uge 2 – Mandag
Forelæsning Uge 3 – Mandag
Parametrisering En kort introduktion.
Forelæsning Uge 2 – Mandag
Forelæsning Uge 4 – Torsdag
Præsentationens transcript:

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)

● 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

Objekters tilstand og opførsel i BlueJ

Objekters tilstand og opførsel i BlueJ

Objekters tilstand og opførsel i BlueJ

Objekters tilstand og opførsel i Greenfoot

Objekters tilstand og opførsel i Greenfoot

Objekters tilstand og opførsel i Greenfoot

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)

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)

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)

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

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

● 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

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

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

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

É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

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)

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

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(...) ...

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

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)

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

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.

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

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

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

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

● 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

● 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

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

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/

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

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

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

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