Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Relevanta dokument
Föreläsning 5-6 Innehåll

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Exempel på program med objekt Klass med main-metod. Föreläsning 3-4 Innehåll. Övning Viktiga begrepp

Föreläsning 13 Innehåll

Föreläsning 3-4 Innehåll

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

1 Egna klasser. 1.1 En punkt-klass

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Föreläsning 9-10 Innehåll

Java, klasser, objekt (Skansholm: Kapitel 2)

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Repetition av viktiga begrepp inom objektorienterad programmering

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

1 Repetition av viktiga begrepp inom objektorienterad programmering

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Föreläsning REPETITION & EXTENTA

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Övningar Dag 2 En första klass

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Objekt som argument. Föreläsning 7-8 Innehåll. Hur komma åt den andra kvadratens attribut? Anropa metod på objektet självt

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

Föreläsning 7-8 Innehåll

Objekt-orientering. Java är ett objekt-orienterat programmeringsspråk

Objektorienterad programmering (OOP) Föreläsning 15 & 16. Klasser för olika slags fordon. Klasser och objekt

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

2 b) Följande finns definierat: public class Käk String titel = "Chili con carne"; Krydda[] kryddor = new Krydda[10]; kryddor[0] = new Krydda("Svartpe

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

2 b) Följande finns definierat: public class Spel String titel = "Spel"; Dice[] tärningar = new Dice[10]; tärningar[0] = new Dice("Röd"); tärningar[1]

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

Administrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering

5. En metod som anropar sig själv a) får inte förekomma i Java-program b) kallas destruktiv c) kallas iterativ d) kallas rekursiv 6. Vilka värden har

Klasser och objekt. Henrik Johansson. August 20, 2008

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Tentamen i Objektorienterad modellering och design

Malmö högskola 2008/2009 CTS

Mål Förklaring av termer

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

Enkla variabler kontra referensvariabel

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Mål Förklaring av termer

Föreläsning Innehåll. Hantera många element. Exempel: polygon Godtyckligt antal element. Exempel: polygon forts

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga.

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Objekt och klasser - Introduktion. Objekt. SparKonto.java 2. SparKonto.java 1. Konton.java. Ett objekt har: Ett bankkonto

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Typkonvertering. Java versus C

Dagens föreläsning. Arrayer och klasser. Medan ni väntar: Gå till m.voto.se/prog11 och svara på några gamla tentamensfrågor! (26 januari 2018 F3 1 )

Objektorienterad programmering i Java

Malmö högskola 2007/2008 Teknik och samhälle

Föreläsning Innehåll. Checklista. Några metoder i klassen ArrayList<E> Exempel på vad du ska kunna

OOP Objekt-orienterad programmering

2 b) Bodega bodegan = new Bodega(); double moms = 0.235; String namn = "Vargtass"; System.out.println(namn + " " + moms + bodegan.ändra(moms, namn); S

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Klasser och objekt i C#

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Objektorientering: Lagring, räckvidd och livstid

DAT043 - Föreläsning 7

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

JAVAUTVECKLING LEKTION 11

Del A (obligatorisk för alla)

Tentamen i Objektorienterad modellering och design Helsingborg

Mer om klasser och objekt

Grundläggande programmering med C# 7,5 högskolepoäng

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Objekt och klasser - Introduktion

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

Tentamen OOP

Objektorientering: Lagring och livstid

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 11

Introduktion till arv

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

TDDD78 Viktiga begrepp, del 2

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Lab5 för prgmedcl04 Grafik

Tentamen, EDAA20/EDA501 Programmering

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Tentamen ID1004 Objektorienterad programmering April 7, 2015

JAVA Mer om klasser och objektorientering

Laboration 1: Figurer i hierarki

Objektorienterad programmering

Transkript:

Föreläsning 5-6 Innehåll Exempel på program med objekt Skapa och använda objekt Skriva egna klasser public class DrawSquare { public static void main(string[] args) { SimpleWindow w = new SimpleWindow(600, 600, "Square"); System.out.println(sq.getArea()); I programmet skapas och används två objekt: ett SimpleWindow-objekt som beskriver ett fönster på skärmen som man kan rita i. ett Square-objekt som beskriver en kvadrat. Datavetenskap (LTH) Föreläsning 5-6 HT 2017 1 / 32 Datavetenskap (LTH) Föreläsning 5-6 HT 2017 2 / 32 Objekt Exempel: kvadratobjekt Objekt motsvarar verkliga eller tänkta saker. kvadrater fönster Attributen är variabler som lagrar objektets data. x x-koordinat för övre vänstra hörnet y y-koordinat för övre vänstra hörnet side sidlängd Ett objekt är en samling data (attribut): En kvadrat har en sidlängd och ett läge (x- och y-koordinat) för övre vänstra hörnet. Ett fönster har bredd och höjd Man kan anropa metoder på objekt: rita kvadraten i ett fönster ta reda arean x y side 20 10 40 Datavetenskap (LTH) Föreläsning 5-6 HT 2017 3 / 32 Datavetenskap (LTH) Föreläsning 5-6 HT 2017 4 / 32

Klass Objekt av samma typ beskrivs i en klass. Exempel: klassen Square som beskriver kvadrater. Klassen innehåller attribut och metoder och fungerar som mall för objekten. Exempel: klassen Square (skiss): public class Square { int x; int y; int side; Skapa objekt Man skapar objekt genom att skriva: new Klassnamn(lista med argument) Exempel: Skapa en kvadrat med läget 20,10 och sidlängden 40: new Square(20, 10, 40) Antal argument och deras typer framgår av klassens dokumentation: /** Tar reda på kvadratens area. */ public int getarea() { return side * side; Datavetenskap (LTH) Föreläsning 5-6 HT 2017 5 / 32 Datavetenskap (LTH) Föreläsning 5-6 HT 2017 6 / 32 Referensvariabel Referensvariabler När vi skapar ett objekt får vi tillbaka en referens till det. Referensen kan lagras i en variabel. Exempel: Variabeln sq refererar nu till ett kvadratobjekt och kan användas som namn på objektet: En referensvariabel har en klass som typ. Typen bestämmer vilka slags objekt variabeln får referera till. Exempel: Square sq = new Square(20, 10 40); x y side 20 10 40 Square sq = new SimpleWindow(600, 600, "Square"); sq Datavetenskap (LTH) Föreläsning 5-6 HT 2017 7 / 32 Datavetenskap (LTH) Föreläsning 5-6 HT 2017 8 / 32

Anropa metoder Diskutera Hitta fel När vi anropar en metod använder vi punktnotation: referens.metodnamn(lista med argument); Exempel: sq.move(30, 10); int a = sq.getarea(); Observera att parenteserna ska vara med även om inga argument ska skickas med. I nedanstående kod finns några fel: Rätta till felen: Square sq = new Square(20, 10); SimpleWindow w = new SimpleWindow(600, 600, "Square"); sq.move(30, 10); System.out.println("Arean: " + w.getarea()); Datavetenskap (LTH) Föreläsning 5-6 HT 2017 9 / 32 Datavetenskap (LTH) Föreläsning 5-6 HT 2017 10 / 32 Referenstilldelning Värdet null Objekt i datorns minne En referensvariabel kan även tilldelas värdet null och refererar då inte till något objekt: Square sq = null; sq null Om referensvariablen har värdet null kan man inte anropa en metod på den. sq.move(30, 10); När ett objekt skapas reserveras det plats för objektets attribut i datorns minne. Exempel på hur ett kvadratobjekt lagras i minnet: x 20 y 10 side 40 47540 47544 47548 (Numren på minnescellerna (adresserna) är bara exempel och ingenting vi normalt behöver tänka på.) Datavetenskap (LTH) Föreläsning 5-6 HT 2017 11 / 32 Datavetenskap (LTH) Föreläsning 5-6 HT 2017 12 / 32

Referensvariabel och objekt i datorns minne Det som egentligen lagras i en referensvariabel är ett heltal adressen till det objekt referensvariabeln refererar till. Pilen vi ritat i tidigare bild är motsvarar denna adress. Exempel på hur variabeln sq och det kvadratobjekt sq refererar till kan lagras i minnet. sq 47540 5200 x 20 y 10 side 40 47540 47544 47548 Diskutera Fyll i värden på variabler och attribut när följande satser exekverats: Square sq1 = new Square(50, 50, 100); Square sq2 = new Square(10, 10, 20); sq1 = sq2; sq1.move(50, 50); sq1 sq2 x y side x y side Datavetenskap (LTH) Föreläsning 5-6 HT 2017 13 / 32 Datavetenskap (LTH) Föreläsning 5-6 HT 2017 14 / 32 Specifikation För att kunna använda en klass måste vi få veta vilka metoder som finns och hur de ska anropas. Detta beskrivs i klassens specifikation. Specifikationen kan ses som ett kontrakt mellan den som implementerat (skrivit koden för) klassen och den som ska använda klassen i sin egen kod. Specifikationen kan se ut på olika sätt, men innehåller en uppräkning av klassens metoder (beskrivning, returtyp, namn, parametrar). Exempel: Specifikation Exempel på specifikation /** Skapar en kvadrat med övre vänstra hörnet i x,y och med sidlängden side. */ Square(int x, int y, int side); /** Ritar kvadraten i fönstret w. */ void draw(simplewindow w); /** Flyttar kvadraten avståndet dx i x-led, dy i y-led. */ void move(int dx, int dy); /** Tar reda på kvadratens area. */ int getarea(); Datavetenskap (LTH) Föreläsning 5-6 HT 2017 15 / 32 Datavetenskap (LTH) Föreläsning 5-6 HT 2017 16 / 32

Övning Viktiga begrepp Klass public class DrawSquare { public static void main(string[] args) { SimpleWindow w = new SimpleWindow(600, 600, "Square"); double area = sq.getarea(); System.out.println(area); Vilka variabler finns i main-metoden? Vilka typer har de? Hur många objekt skapas i programmet? Ge exempel på en metod som anropas. Ge exempel på ett argument. Programkoden delas upp i klasser. Klassen lagras normalt i en egen fil. Det finns klasser som bara innehåller statiska metoder, t.ex. klassen Math. Andra klasser beskriver objekt och innehåller då: attribut de variabler som innehåller objektets data. konstruktor/er och övriga metoder. Klassen fungerar som en mall för objekten. Datavetenskap (LTH) Föreläsning 5-6 HT 2017 17 / 32 Datavetenskap (LTH) Föreläsning 5-6 HT 2017 18 / 32 Klass Mönster Klassen Square Attribut public class Klassnamn { public class Square { private int x; private int y; private int side; attribut // deklaration av attribut // konstruktor // övriga metoder Attribut I attributen lagras objektets data. Attributen skapas då objektet skapas (med new ) och finns så länge som objektet finns. Attributen får defaultvärden då de skapas (0, 0.0, null, ). Attributen får användas i hela klassen. Attributen är normalt deklarerade private får bara användas inuti klassen. Datavetenskap (LTH) Föreläsning 5-6 HT 2017 19 / 32 Datavetenskap (LTH) Föreläsning 5-6 HT 2017 20 / 32

Klassen Square Metoderna draw och move /** Ritar kvadraten i fönstret w. */ public void draw(simplewindow w) { w.moveto(x, y); w.lineto(x, y + side); w.lineto(x + side, y + side); w.lineto(x + side, y); w.lineto(x, y); /** Flyttar kvadraten avståndet dx i x-led, dy i y-led. */ public void move(int dx, int dy) { x = x + dx; y = y + dy; public eller private Man måste bestämma var ett attribut eller en metod ska kunna användas: public kan även användas utanför klassen private är bara åtkomligt inuti i klassen protected kan bara åtkomligt i klassen och dess subklasser (kommer senare i kursen) om man inte skriver någon av dessa modifierare får attributet/metoden paketskydd och kan användas av andra klasser i samma paket. I regel är attributen privata och metoderna publika, men undantag finns, t.ex. Metoder som bara ska användas internt inuti klassen ska då deklareras private. Atrribut som är konstanter kan vara avsedda att användas utanför klassen och är då publika, t.ex. Math.PI. Datavetenskap (LTH) Föreläsning 5-6 HT 2017 21 / 32 Datavetenskap (LTH) Föreläsning 5-6 HT 2017 22 / 32 Parametrar public void move(int dx, int dy); parametrar Parametrar Parametrar är variabler som deklareras i metodens parameterlista. Parametrarna skapas då metoden anropas och försvinner när metoden är färdigexekverad. Speciellt för parametrar är att de får värden vid anropet av metoden. Argumentets värde kopieras vid anropet in i motsvarande parameter. dx dy 30 10 En parameter är bara åtkomliga inuti den metod den är deklarerad. Anropa metoder på objekt Argument Argument Argument är värden som skickas in till en metod. Exempel: Man vill kunna skapa kvadrater med olika läge och sidlängd,... public class DrawSquare { public static void main(string[] args) { SimpleWindow w = new SimpleWindow(600, 600, "Square"); double area = sq.getarea()); System.out.println(area); argument Datavetenskap (LTH) Föreläsning 5-6 HT 2017 23 / 32 Datavetenskap (LTH) Föreläsning 5-6 HT 2017 24 / 32

Klassen Square Metoderna getx, gety och getarea /** Tar reda på x-koordinaten för kvadratens läge. */ public int getx() { return x; /** Tar reda på y-koordinaten för kvadratens läge. */ public int gety() { return y; Metoder som returnerar värden Vissa metoder returnerar ett värde. De har då något annat än void som returtyp. Metoden måste också ha (minst) en return-sats. returtyp public int getarea() { return side * side; /** Tar reda på kvadratens area. */ public int getarea() { return side * side; return-sats Datavetenskap (LTH) Föreläsning 5-6 HT 2017 25 / 32 Datavetenskap (LTH) Föreläsning 5-6 HT 2017 26 / 32 Exekvering och metodanrop Ett anrop av en metod innebär att exekveringen fortsätter med den första satsen i den anropade metoden. När den anropade metoden är klar återupptas exekveringen i den metod där anropet gjordes. Klassen Square Konstruktor public Square(int xcoord, int ycoord, int sidelength) { x = xcoord; y = ycoord side = sidelength; DrawSquare public static void main { Square public void draw (SimpleWindow w) { SimpleWindow public void moveto (int x, int y) { attributet side parametern sidelength sq.draw(); w.moveto(x, y); Konstruktor Konstruktorn är en metod med samma namn som klassen Satserna i konstruktorn utförs då objektet skapas (med new ). Konstruktorn innehåller oftast satser för att ge attributen startvärden. Konstruktorn är deklarerad public är åtkomlig utanför klassen. Returtyp ska ej anges. Datavetenskap (LTH) Föreläsning 5-6 HT 2017 27 / 32 Datavetenskap (LTH) Föreläsning 5-6 HT 2017 28 / 32

this Övning Implementera klasser Det är vanligt att samma namn används på attribut och parametrar: public Square(int x, int y, int side) { this.x = x; this.y = y; this.side = side; attributet side parametern side Lägg till följande metod i klassen Square: /** Sätter sidlängden till newside */ public void setside(int newside) { this this är en referens till objektet självt. Datavetenskap (LTH) Föreläsning 5-6 HT 2017 29 / 32 Datavetenskap (LTH) Föreläsning 5-6 HT 2017 30 / 32 Övning Implementera klasser Checklista Lägg till följande metod i klassen Square: /** Returnerar true om kvadraten har större area än kvadraten other, i annat fall returneras false. */ public boolean biggerthan(square other) { Exempel på vad du ska kunna Förklara begreppen objekt och klass. Skapa objekt och anropa metoder på dem. Implementera klasser (med attribut, konstruktor och övriga metoder). Förstå vilka variabler och objekt som finns i ett program och hur de hänger ihop. Visa detta genom att rita en figur över minnessituationen med variabler och objekt med attribut Förklara begreppen specifikation och implementering. Datavetenskap (LTH) Föreläsning 5-6 HT 2017 31 / 32 Datavetenskap (LTH) Föreläsning 5-6 HT 2017 32 / 32