Forelæsning Uge 4 – Torsdag

Slides:



Advertisements
Lignende præsentationer
Velkommen til Softwarekonstruktion
Advertisements

T1 – OPGAVE 14.2 LINETT & SABRINA Klasse Varer namespace Opgave_14._2 { class Varer { private string vare; private string farve; private double.
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Grundlæggende programmering Efterår 2001
Hvordan man skriver koden.
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.
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
Begreber og Redskaber 5. Plan for idag Overblik over klasser,objekter,nedarvning –Repetition fra Dat A/Indledende programmering –Centrale begreber om.
Forelæsning 3.1 Collections Javas for-each løkke
GP6, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 6 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
Fundamentale datastrukturer
GP 8, 24/ Grundlæggende programmering Efterår 2001 Forelæsning 8 onsdag 24/ kl. 9:15 – 12:00.
Oversigt Oplæg til projektuge Greenfoot gallery Program for næste uge
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
GP 3, 12/ Grundlæggende programmering Efterår 2001 Forelæsning 3 onsdag 12/ kl. 9:15 – 12:00.
Procestræ under afvikling af cp init login shell cp cp src dest.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
Forelæsning 2.2 Tilstand og opførsel (repetition)
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
Repetition af dIntProg v/ Morten D. Bech. Tour de force Variabler Løkker Comparable ImErKo-reglen Eksamenssæt dIntProg, E13.
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
Introduktion til programmering Repetition - ArrayList.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
Klassevariable- og metoder Tilstand og opførsel på klasseniveau.
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,
Trinvis forfinelse Systematisk, gradvis udvikling af programmer.
Indledende Programmering Uge 6 - Efterår 2006
Interfaces Afkobling af programkomponenter (eksempel: Comparable)
Kari Rye Schougaard, Ph.d.-stud. Værktøjer og Teknikker, 2006 A A R H U S U N I V E R S I T E T DATALOGISK INSTITUT Java på 20 minutter (eller lidt mere)
DAIMIIntroducerende objektorienteret programmering4A.1 Kontrakter og Design Kontraktbaseret design, JavaDoc dokumentation.
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.
DAIMIIntroducerende objektorienteret programmering4A.1 Kontrakter og Design Kontraktbaseret design, JavaDoc dokumentation,
Klassevariable- og metoder Funktionalitet på klasseniveau.
 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.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
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 5 – Mandag
Forelæsning Uge 2 – Torsdag
Forelæsning Uge 3 – Torsdag
Forelæsning Uge 4 – Mandag
Forelæsning Uge 6 – torsdag – repetition
Quiz – Uge 4 – torsdag – første time
Forelæsning Uge 3 – Mandag
Klasser og objekter (Afsnit i manualen).
Forelæsning Uge 2 – Torsdag
Forelæsning Uge 2 – Torsdag
Quiz – Uge 4 – torsdag – første time
Forelæsning Uge 3 – Mandag
Quiz – Uge 4 – torsdag – første time
Forelæsning Uge 2 – Mandag
Forelæsning Uge 2 – Mandag
Quiz – Uge 4 – torsdag – første time
Forelæsning Uge 4 – Torsdag
Præsentationens transcript:

Forelæsning Uge 4 – Torsdag Klassevariabler og klassemetoder Levetid for variabler og parametre Virkefeltsregler Projektopgave Kaninjagt Lommeregner (for MAT studerende) int i; int j; int k; i = i+j; Sequence s; String s;

● Klassevariabler og klassemetoder Instansvariabler og instansmetoder Hvert objekt har sine egne feltvariabler Metoder kaldes ved at bede objekter om at udføre dem Det er imidlertid muligt at erklære feltvariabler og metoder som tilhører klassen Klassevariabler og klassemetoder erklæres med keywordet static Klassevariabler bruges til at modellere egenskaber for klassen, f.eks.: myndighedsalder for personer, fælles rentesats for alle konti Klassemetoder bruges til at modellere operationer, der er uafhængige af objekters tilstande

Har I set dem før? Hvor har I mødt klassemetoder? new TestDriver() void run() Open Editor Compile Inspect Remove Klassemetode kan kaldes uden at lave et objekt af typen TestDriver Hvor har I mødt klassevariabler? System.out.println(……); Klasse i java.lang (importeres automatisk) Klassevariabel af type PrintStream Metode i PrintStream udskriver parameteren på "standard" output stream (BlueJ's terminal)

Eksempler fra java.lang.Math public class Math { public static final double PI = 3.141592653589793 ... /** 0.0 ≤ random() < 1.0 */ public static double random() {...} /** sqrt(a) == a */ public static double sqrt(double a) {...} /** pow(a,b) == ab */ public static double pow(double a, double b) {...} } konstant (kan ikke ændres) navne på konstanter skrives med store bogstaver og "underscores", fx MAX_NO

Eksempel på statics public class Account { private static double interestRate; private int balance; private Person owner; public static void setInterestRate (double rate) { interestRate = rate; } public void addInterest() { balance = (int) (balance * interestRate); ... Klassemetoder har kun adgang til klassevariabler og klassemetoder Almindelige metoder har adgang til alle feltvariabler og alle metoder uanset om disse er static eller ej

Brug af klassevariabler og klassemetoder Klassevariable og klassemetoder tilgås via klassen Math.PI; Math.random(); Account.setInterestRate(2.65); Kan også tilgås via objekt, men det er "dårlig stil" og kan være forvirrende Account myAccount = new Account(...); myAccount.setInterestRate(2.65); Metoden kaldes på en specifik bankkonto, men det er rentesatsen for alle konti, der ændres

● Levetid for variabler og parametre Feltvariabler modellerer tilstand for objekter levetid er den samme som objektets Lokale variabler hjælpevariabler i en metode/konstruktør levetid er metode/konstruktør kaldet Parametre parametrisering af metode/konstruktør lokale variabler hvor startværdien leveres af kalderen Klassevariabler programudførelsen ClickerQuiz

● Virkefeltsregler (fortolkning af navne) Et navn fortolkes i en kontekst, som er med til at definere navnets betydning. Nogle eksempler: Duncan spillede blændende i søndags! Ring til Kirsten og sig at ... Beskeden “Ring til Kirsten og sig at ...” fortolkes vidt forskelligt på arbejde og hjemme! I Java (og andre program- meringssprog) er der præcise, utvetydige regler for fortolkning af navne int i; int j; int k; i = i+j; Sequence s; String s;

Navne i Java Hvad betyder følgende? i = i + 1; Det kommer an på konteksten: public class Scope { private int i = 0; public void pip() { i = i + 1; } String i = "";

Erklæringer i Java For at bruge et navn skal det erklæres eller importeres Navne fra java.lang importeres automatisk Klasserne String, Math og System Wrapper klasserne for de primitive typer En masse andet…(se i Java API) Variabler kan erklæres som feltvariabler i klasser og som lokale variabler i metoder/konstruktører Som vi skal se i det følgende, er der lidt forskel på hvilke regler, der gælder de to steder

Tre slags variabler Feltvariabler Parametre Lokale variabler public class Date { private int day; private int month; private int year; public void addDays(int d) { for ( int i=0; i<d; i++ ) { setToNextDate(); } private int daysInMonth() { int[] daysInMonth = {0,31,28,31,…}; int res; res = daysInMonth[month]; // handle leap year if (month == 2 && isInLeapYear()) { res++; return res; Samme navn for metode og lokal variabel

Feltvariabler public class Scope { public Scope() { i = 0; } public void addTwo() { addOne(); addOne(); private int i; public void addOne() { i = i + 1; public int getValue() { return i; Style guide: Feltvariabler bør erklæres i begyndelsen af klassen En klasse definerer et navnerum, hvor alle navne erklæret i klassen er tilgængelige overalt i klassen

Metoder public class Scope { public Scope() { i = 0; } public void addTwo() { addOne(); addOne(); private int i; public void addOne() { i = i + 1; public int getValue() { return i; En klasse definerer et navnerum, hvor alle navne erklæret i klassen er tilgængelige overalt i klassen

Parametre public void addDays( int d ) { for ( int i=0; i < d; i++ ) { setToNextDate(); } En metode definerer et navnerum, hvor parametre til metoden er tilgængelige overalt i metoden

Pause Lokale variabler X public void pip() { x = x++; int x = 0; x++; } X Fejl (medmindre der er en feltvariabel x) I en metode/konstruktør definerer en blok {...} et navnerum, hvor alle navne erklæret i blokken er tilgængelige fra og med erklæringen og indtil blokkens afslutning Pause

Indre blokke En blok kan have indre blokke { ... { ... } ... } public void pip() { int i = 0; { i++; System.out.println(i); int x = 0; x = i; x++; System.out.println(x); } Reglen for indre blokke er den samme som reglen for blokke i metoder (forrige slide), dvs. lokale variabler er tilgængelig fra og med erklæringen og indtil afslutningen af den indre blok

Et navn virker også inde i indre blokke public void pip() { int i = x; int x = 0; ... { i++; System.out.println(i); x++; System.out.println(x); } Fejl (medmindre der er en feltvariabel x)

Et navn kan “skygge” for et andet public class Scope { private int i; public Scope() { i = 0; } public void pip() { i++; { i++; System.out.println("a " + i ); int i = 0; i++; System.out.println("b " + i ); public void testMethod() { Scope s = new Scope(); s.pip(); Gør livet lettere for alle: Brug forskellige navne Brug beskrivende navne a 2 b 1 this.i Hvad gør denne metode?

Virkefeltsregler i Java (opsummering) En feltvariabel erklæret i en klasse virker overalt i klassen med undtagelse af virkefeltet for eventuelle ens-benævnte lokale variabler erklæret i blokke i klassens metoder En lokal variabel erklæret i en blok virker overalt i blokken med undtagelse af den del af blokken, der går forud for erklæringen virkefeltet for eventuelle ens-benævnte lokale variabler erklæret i indre blokke i blokken

Kontrolvariabel i for-løkker Konstruktionen for ( int j=0 ; j<4; j++) { System.out.println(j); } svarer til { int j; for (j=0; j<4; j++) { System.out.println(j); } For-each løkke for ( Person p : persons) { System.out.println(p); }

Hvilken variabel? Antagelse: Feltvariabler er erklæret øverst i klassen (jvf. style-guide) Søg opad og udad indtil en erklæring nås (spring indre blokke, løkker og metoder/konstruktører over) public class Scope { private int i = 0; public Scope ( int i ) { i = i + 1; this. i++ System.out.println("a " + i ); } public void pip() { System.out.println("b " + i ); for ( int i = 0; i < 3; i ++){ System.out.println("c " + i ); System.out.println("d " + i ); ...

ClickerQuiz Hvad gør testMethod? Gør livet lettere for alle: Brug forskellige navne Brug beskrivende navne public class Scope { private int i = 0; public Scope ( int i ) { i = i + 1; this.i++ System.out.println("a " + i ); } public void pip() { System.out.println("b " + i ); for ( int i = 0; i < 3; i ++){ System.out.println("c " + i ); System.out.println("d " + i ); public void testMethod() { Scope s = new Scope(1); s.pip(); a 2 b 1 c 0 c 1 c 2 ClickerQuiz d 1

● Projektopgave: Kaninjagt buske ræv kanin Dyrene kan kigge i 8 retninger Kaninen kan gemme sig bag buske og i de hvide felter, hvor den ikke kan ses Opgaven Programmér hjernen på kaninen, så den bliver god til at undslippe ræven Kaninen skal også kunne gå bersærk og jagte ræven – sammen med andre kaniner Opgaven løses i BlueJ

MAT studerende på 1. år: Lommeregner Implementere to lommeregnere i BlueJ Først laves en lommeregner for heltal Addition Subtraktion Multiplikation Inverse element Potensopløftning Dernæst laves en lommeregner, der kan regne med modulo restklasser (og udføre de samme operationer) MAT-ØK studerende aftaler med deres instruktor, hvilken opgave de løser

Konkurrence De bedste projekter præmieres Vi kigger på Instruktorerne nominerer den bedste gruppe fra hvert hold Jeg udvælger vinderne (i samarbejde med Morten) Vinderne offentliggøres ved sidste forelæsning Vi kigger på Hvor godt opgaven er løst (dvs. hvor længe kaninen overleverer og hvor godt lommeregneren fungerer) Hvor pænt koden er skrevet Hvor god dokumentationen er Originale idéer

● Opsummering Klassevariabler og klassemetoder Klassevariabler bruges til egenskaber for klassen, f.eks.: myndighedsalder for personer, fælles rentesats for alle konti Klassemetoder bruges til operationer, der er uafhængige af objekters tilstande Levetid for variabler og parametre Virkefeltsregler Søg opad og udad Projektuge Rabbit Hunt Lommeregner (for MAT studerende)

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