Forelæsning Uge 1 Torsdag

Relaterede dokumenter
Forelæsning Uge 1 Torsdag

Forelæsning Uge 2 Mandag

Klasser og objekter. (Afsnit i manualen)

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag

dintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4

Forelæsning Uge 4 Mandag

Forelæsning Uge 3 Mandag

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Torsdag

Klasser. Grundlæggende Programmering med Projekt. Peter Sestoft Tirsdag 2. september (Tak til Jakob Bardram for nogle slides) Dagens begreber

Forelæsning Uge 3 Mandag

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Objects First with Java A Practical Introduction Using BlueJ

Ugeseddel 4 1. marts - 8. marts

Forelæsning Uge 4 Mandag

dintprog Manual Revision: 731 September 30, Introduktion Notation... 3 I Begreber 4 2 Grundbegreber om programmering 4

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Torsdag

Eksempel: Skat i år 2000

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Torsdag

Skriftlig eksamen i Datalogi

Fundamentale sprogbegreber

Forelæsning Uge 1 Mandag

Anvendelse af metoder - Programmering

COMPUTERSPIL 1. Opgave 1. Opgave 2

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4

Forelæsning Uge 5 Mandag

Forelæsning Uge 1 Torsdag

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning

Forelæsning Uge 3 Torsdag

DM507 Algoritmer og datastrukturer

Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen

Programmering 1999 KVL Side 5-4. Klassen Time: metoder. Metoder i objektet giver mulighed for at ændre tilstanden, eller kigge på tilstanden.

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

DM507 Algoritmer og datastrukturer

Aritmetiske Forelæsning Pr ogrammering operatorer tir 1999 sda præcedens september 1999 Logiske Sammenligningsoperatorer operatorer præcedens

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 6

Forelæsning Uge 3 Torsdag

Objektorienteret programmering

Virkefeltsregler i Java

Skriftlig eksamen i Datalogi

Abstrakte datatyper C#-version

Hvad er Objekter - Programmering

COMPUTERSPIL 1. Opgave 1

DM507 Algoritmer og datastrukturer

SWC Elementer i klassedefinition

DANMARKS TEKNISKE UNIVERSITET

DRONNINGER (QUEENS) Opgave 1

METODER ARV KLASSER. Grundlæggende programmering Lektion 5

Skriftlig eksamen i Datalogi

Løsning af møntproblemet

BRP Tal. Om computer-repræsentation og -manipulation. Logaritmer

Forelæsning Uge 5 Mandag

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

class subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree.

Civilingeniøreksamen januar Skriftelig prøve den 12. januar 2001 Kursusnummer 49104

DM507 Algoritmer og datastrukturer

Introduktion til objektorientering. OO, Java og BlueJ

Python programmering. Per Tøfting. MacFest

Forelæsning Uge 12 Torsdag

Tree klassen fra sidste forelæsning

Introduktion til ActionScript, fortsat

Introduktion til ActionScript

Forelæsning Uge 5 Mandag

DM507 Algoritmer og datastrukturer

Forelæsning Uge 3 Torsdag

Problemløsning i hverdagen (1) Introduktion til objektorientering. Delegering til agenter. Problemløsning i hverdagen (2)

Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.

Forelæsning Uge 12 Mandag

Integer.parseInt(args[0]) konverterer tegnstreng (f.eks. "10") til heltal (10). if (udtryk) else

Forelæsning Uge 1 Mandag

DM507 Algoritmer og datastrukturer

Java Klasse nedarvninger

NetLogo-simuleringen. Simuleringer og fysiske modeller (henfaldsloven)

#AlleKanKode. Lektion 3 - Operatorer

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Jacob Christiansen, Institut for MAtematik og DAtalogi, Syddansk Universitet, Odense

Klasser og nedarvning

Tabelbegrebet. Klassediagrammer (III) Oversigt. Anvendelse af Tabeller. Tabeller og qualified associations

Forelæsning Uge 5 Mandag

Videregående Programmering for Diplom-E Noter

Forelæsning Uge 11. Nedarvning. Object klassen. Projektopgave om computerspil

DM507 Algoritmer og datastrukturer

BRP Kursusintroduktion og Java-oversigt

Eksamens spørgsmål i Java HTML - DataBase 3. Semester (i)

Transkript:

Forelæsning Uge 1 Torsdag Objekters tilstand og opførsel Java og BlueJ Skabelse af objekter (via new-operatoren) Iteration (gentagelser) og parametrisering Java's for løkke Parametre i metoder Forskellige slags variabler Feltvariabler Lokale variabler

Objekters tilstand og opførsel i Java Tilstand Objekters tilstand er defineret ved et sæt af feltvariabler (fields) Feltvariablerne er fastlagt i klassens erklæring Alle objekter (af en given klasse) har de samme feltvariabler Hvert objekt har sin egen tilstand (værdier af feltvariabler) Opførsel Objekters opførsel er defineret ved et sæt konstruktører og metoder Konstruktører og metoder er fastlagt i klassens erklæring Alle objekter (af en given klasse) har de samme konstruktører og metoder 2

Objekters tilstand 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; Tilstand beskrives ved hjælp af feltvariabler Navn Type Access modifier (private) public void setname(string n) { name = n; public int getage() { return age; public void birthday() { age= age + 1; System.out.println("Happy birthday " + name + "!"); 3

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

Hoved 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) { name = n; public int getage() { return age; Navn Konstruktører: klassens navn Parameterliste Kan være tom: () Returtype Kan være tom: void Konstruktører: mangler Access modifier (public) Navn + parametrenes typer = signatur Signaturen bestemmes af hovedet Returtypen indgår ikke i signaturen public void birthday() { age= age + 1; System.out.println("Happy birthday " + name + "!"); 5

Feltvariabler, konstruktører og metoder public class Person { private String name; private int age; public Person(String n, int a) {... Feltvariabler (attributter) bestemmer objektets tilstand erklæres altid private kan kun tilgås fra klassens egne konstruktører og metoder (vedkommer ikke andre) public int getage() {... public void birthday() {... Konstruktører og metoder bestemmer objektets opførsel grænseflade til omverdenen erklæres oftest public kan kaldes fra objekter af alle klasser 6

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 Person og String klasserne er eksempler på objekt typer Navne på objekt typer (klasser) skrives med stort begyndelsesbogstav (Person og String) Primitive typer Har simple værdier, der ikke er objekter Eksempler: heltal (int), reelle tal (double) og sandhedsværdier (boolean) Navne på primitive typer skrives med lille begyndelsesbogstav (int, double og boolean) 7

Objekters tilstand og opførsel i BlueJ person1 "Peter" 24 n personens navn a personens alder n skal have typen String a skal have typen int 8

Lad os lave endnu et Person objekt person2 "Anna" 18 De to objekter har de samme feltvariabler, men med forskellige værdier 9

Lad os højreklikke på person2 10

Kald af metoden getage (accessor) 11

Kald af metoden setname (mutator) "Maria" 12

Kald af metoden birthday (mutator) 13

Kald af metoden isteenager (accessor) 14

Lad os kalde metoden birthday igen 15

Lad os kalde metoden isteenager igen 16

Java kode for Person klassen 17

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;... Nu med 4 feltvariabler private Person p1; p1 = new Person("Susan", 42, true); p1:person name age Person 42 0 String "Susan" female false true father 18

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

Metoden setfather (mutator) p1.setfather(p2); public void setfather(person p) { father = p; p2:person name age Person 69 String "Peter" female father false UML Objektdiagram OPFØRSEL (dynamisk) p1:person name age Person 42 String "Susan" female true father 20

Metoden birthday (mutator) p1.birthday(); public void birthday() { age = age + 1; System.out.println( "Happy birthday " + name + "!" ); Kald af metode i Java s klassebibliotek (udskriver linje på BueJ's terminal) Sammensætning af tekststrenge (konkatenering) p1:person name age Person 42 43 String "Susan" female true father 21

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

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

Iteration og parametrisering Skildpadden kan dirigeres rundt på et lærred Den tegner en streg, hvor den kommer frem (hvis pennen er nede) Stregens farve kan skifte undervejs Skildpaddens tilstand Position: (x, y) Vinkel: 270 180 0 (360) (0,0) 90 Farve::... Pen status: up/down Lærred Skildpadde (600,600) Eksempel på tilstand ((350, 300), 0, blue", down) 24

Programmering af skildpadden Vi antager, at Turtle klassen stiller en række simple metoder (tegneoperationer) til rådighed Flyt, drej, pen op/ned,... Dem vil vi supplere med nogle mere komplekse metoder Kvadrat, polygon, cirkel, Turtle move(double distance) turn(double degrees) penup() pendown()... square(double size) polygon(int n, double size) circle(double radius)... Typen double repræsenterer reelle tal Alle steder, hvor I skal bruge en double kan I i stedet bruge en int Det omvendte gælder ikke Hvis I vil indtaste et reelt tal indsættes et punktum 360.0 er af typen double, mens 360 er af typen int 25

Gentagelser af kode // Tegn kvadrat move(100); turn(90); move(100); turn(90); move(100); turn(90); move(100); turn(90); // Tegn kvadrat gentag 4 gange { move(100); turn(90); // Tegn tolvkant 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);... move(100); turn(30); // Tegn tolvkant gentag 12 gange { move(100); turn(30); Hurtigere at skrive Nemmere at læse og forstå Lettere at vedligeholde (rette i) 26

for løkke i Java Start ERKLÆRING + INITIALISERING Lokal variable i af type int med startværdi 0 TEST (boolsk udtryk) Falsk Sand Keyword (reserveret ord) KROP (de ting, der skal gentages) move(100); turn(90); for( int i=0 ; i<4 ; i++ ) { move(100); turn(90); OPDATERING i++ i = i+1 27

Metode: kvadrat med længde 100 public class Turtle {... // Tegn kvadrat med sidelængde 100 public void square100() { for( int i = 0; i < 4; i++ ) { move( 100 ); Længden 100 indsat direkte i metoden... turn( 90 ); 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 28

Metode: kvadrat med vilkårlig størrelse public class Turtle {... // Tegn kvadrat med sidelængde size public void square(double size ) { for( int i = 0; i < 4; i++ ) { move( size ); Parameter i square turn(90); Argument til move... Det ville være smartere at lave en metode, der kan tegne regulære figurer med et vilkårligt antal sider 29

Metode: polygon med vilkårligt antal sider public class Turtle {... // Tegn regulær n-kant med sidelængde size public void polygon(int n, double size) { for( int i = 0; i < n; i++ ) { move( size ); turn( 360.0 / n); Reelt tal 30

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 Turtle {... // Tegn regulær n-kant med sidelængde size public void polygon(int n, double size) {... // Tegn kvadrat med sidelængde size public void square(double size) { polygon(4, size); // Tegn cirkel med den angiven radius public void circle(double radius) { polygon(100, 2 * radius * Math.PI / 100)); Konstanten (fra klassen Math) 31

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 32

Forskellige slags variabler Klasser har feltvariabler Tilhører objektet Lever og dør med dette Bruges til værdier der skal gemmes mellem metodekald private som access modifier public class Turtle { private String color;... public void polygon( int n, double size ) { double angle = 360.0 / n; for( int i = 0; i < n; i++ ) { move(size); turn(angle);... 33

Forskellige slags variabler (fortsat) Metoder og konstruktører har lokale variabler Tilhører metoden/konstruktøren Lever og dør med det enkelte kald af metoden/konstruktøren Kan ikke bruges til at gemme resultater mellem metodekald Ingen access modifier (kan aldrig tilgås udenfor metoden/konstruktøren) public class Turtle { private String color;... public void polygon( int n, double size ) { double angle = 360.0 / n; Parametre for( int i = 0; i < n; i++ ) { Hjælpevariabel move(size); Løkkevariabel turn(angle);... 34

Opsummering Objekters tilstand og opførsel Java og BlueJ 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 Forskellige slags variabler Feltvariabler Lokale variabler 35

Objektorienteret programmering I objektorienteret programmering benyttes metaforer fra dagligdagen Et program er en model, der simulerer (beskriver) opførslen af en del af verden (reel eller imaginær) OO-modellering beskriver virkeligheden ved hjælp af: Klasser modellerer begreber (f.eks. Menneske) Objekter er instanser af klasser (fx. Peter Hansen, Anne Petersen,.) Ovenstående definitioner stammer fra sproget Simula 67 og er dermed 50 år gamle Kristen Nygaard (1926-2002) grundlægger af objektorienteret modellering og programmering (sammen med Ole-Johan Dahl) gæsteprofessor på Aarhus Universitet i en årrække, hvor han havde stor betydning for opbygningen af datalogi Nygaard-bygningen i IT-parken er opkaldt efter Kristen 36

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 4. september 2017 vil I modtage en mail på jeres aumailadresse 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 i løbet af få dage ellers bliver I udmeldt af studiet 37

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 fem sjove udfordringer inden for programmering De skal løses hen over efteråret (første aflevering 17. 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 studerende 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/ 38

Husk at forberede jer til øvelserne Ved øvelserne i Uge 2 skal I beskæftige jer med opgaverne i kapitel 2 og 3 i BlueJ bogen Opgaverne skal løses, mens I læser kapitlerne Ved øvelserne vil instruktorerne så tage fat i de opgaver, hvor I har problemer Der vil selvfølgelig også være muligt at få hjælp til tvivlsspørgsmål i kapitlernes tekst Derudover skal I (ved anden øvelsesgang) arbejde videre med raflebæger projektet Nu skal I lave nogle metoder til aftestning af raflebægeret Derudover skal I generalisere løsningen, således at en terning kan have et vilkårligt antal sider (større end eller lig med 2) 39

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