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

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

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

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

Lösningsförslag övning 2.

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

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

Idag ska vi gå igenom. Programmeringsteknik för S, 2004 Grupp IV. Vad är en klass? Klasser och instanser

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Laboration 1 - Grunderna för OOP i Java

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

Föreläsning 5-6 Innehåll

Objektorienterad Programmering DAT043

725G61 - Laboration 5 Grundläggande objektorientering. Johan Falkenjack

Vad är ett objekt? Tillstånd och beteende. Vad är ett objekt? Exempel

JAVA Mer om klasser och objektorientering

Dagens program. Programmeringsteknik och Matlab. Viktiga datum. Ett första exempel. Programmall, vad behöver vi i ett javaprogram?

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

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

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

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Java, klasser, objekt (Skansholm: Kapitel 2)

Enkla variabler kontra referensvariabel

Programmeringsteknik för Bio1 och I1. Dagens program. Så här tillämpar vi det på J-uppgifterna. Allmänna programmeringstips. Övningsgrupp 3 (Sal E33)

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

Dagens program. Programmeringsteknik och Matlab. Administrativt. Viktiga datum. Kort introduktion till matlab. Övningsgrupp 2 (Sal Q22/E32)

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

Malmö högskola 2008/2009 CTS

Laboration 3, uppgift En klass för en räknare

Objektorientering: Lagring, räckvidd och livstid

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

(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

Objektorientering: Lagring och livstid

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

Objektorienterad programmering

TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

Programmeringsteknik I. Föreläsning 3: Klasser och arrayer

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]

Programmering för språkteknologer II, HT2011. Rum

Föreläsning 8 - del 1: Objektorienterad programmering (forts.) - Exempel

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

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

TUTORIAL: KLASSER & OBJEKT

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

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Övningar Dag 2 En första klass

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

TDDC77 Objektorienterad Programmering

Klasser och objekt. Henrik Johansson. August 20, 2008

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

JAVAUTVECKLING LEKTION 11

Objekt och referenser

Namn: Personnr: 1 2D1310 Programmeringsteknik i Java för B,V (1p) 13 januari 2001, kl Hjälpmedel: En Javabok. För betyget godkänt krävs at

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

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

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

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

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

Sammanfattning och repetition utgående från typiska tentamensuppgifter

TENTAMEN OOP

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

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

DAT043 - Föreläsning 7

Mer om klasser och objekt

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

Lab5 för prgmedcl04 Grafik

Objektorienterad programmering Föreläsning 5

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

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

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

Objektorienterad programmering i Java

Objekt och klasser - Introduktion

EnKlass. Instans 3 av EnKlass. Instans 2 av EnKlass

Objektorienterad programmering i Java

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

TDDD78 Objektorientering: Lagring och livstid

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

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

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

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

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

Tentamen i Programmeringsteknik I

Föreläsning 7: Objektorienterad programmering - introduktion

Objektorienterad programmering D2

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

Sammanfattning och repetition utgående från typiska tentamensuppgifter

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

Laboration 1: Figurer i hierarki

Tentamen i Programmeringsteknik I

Föreläsning 4. Klasser och objekt

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

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

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

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

Tentamen i Grundläggande programmering STS, åk 1 fredag

Chapter 4: Writing Classes/ Att skriva egna klasser.

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Transkript:

Programmeringsteknik för I1 Övning 2 Administrativt Övningsgrupp 2 (Sal E32/D32) Johannes Hjorth hjorth@nada.kth.se Rum 4538 på plan 5 i D-huset 08-790 69 02 Kontrollera att ni har fått Lab2 inrapporterad i res-systemet genom att skriva >res show prgi04 RAPPORTERADE RESULTAT FÖR: ÅÅMMDD-XXXX Efternamn, Förnamn ANVNAMN: namn STUDIESTATUS: I-04 GRUPP: 2 Moment Nr Datum Resultat Rapp av lab 2 041112 G hjorth Kurshemsida: http://www.nada.kth.se/kurser/kth/2d1310/ Övningsanteckningar och diagnostiska prov: http://www.nada.kth.se/ hjorth/teaching/ Säg till om något är fel! Dagens program Objektorienterad programmering Java är objektorienterat Hur klasser och instanser hänger ihop Kort repetition av metoder Parametrar, lokala variabler, synlighet Hur skapar vi klasser och instanser? Några korta illustrativa exempel Gemensamma variabler Klassvariabler och static Java är ett objektorienterat programmeringsspråk. Det betyder att vi använder oss av objekt som får representera verkliga eller fiktiva saker. Dessa objekt innehåller dels data om den saken de representerar, men inte bara det! Vi har även metoder som ligger i våra objekt. Dessa metoder kan manipulera datan som objektet innehåller. Objekt innehåller alltså både data och metoder. Mer om konstruktorn Vår klass kan ha mer än en konstruktor Sammanfattning inför Lab4 Kolla dig själv!

Vad är vitsen med att ha både metoder och data i objekten? Klasser och instanser Den kanske viktigaste fördelen med objekt är att vi kan höja abstraktionsnivån. Antag att vi ska skriva ett stort program. Vi vill då behöva hålla så lite som möjligt i minnet, då är risken för fel som minst. Efter att vi en gång skrivit koden för ett objekt behöver inte bry oss hur det fungerar inuti, det räcker att det fungerar. Det enda som är intressant är alltså hur objektet ser ut utifrån. Det vill säga hur vi skapar objektet och sedan använder det. Instans är ett annat ord för objekt. För att kunna skapa och använda en instans behöver vi ha en mall för hur den ska se ut och fungera. Vilka variabler och metoder innehåller instansen? Ni har redan använt er av dessa mallar i både Lab2 och Lab3. Vi brukar kalla mallen för en klass. Kort repetition av metoder Vad behöver vi veta för Lab4? I Lab3 använder vi oss av metoder för att strukturera upp koden och göra den mer övergriplig. public class MetodAnrop { public static void main(string[] inparametrar) { int x = 4, y = 7; int summa = sum(x,y); // Metodanrop! System.out.println(x + " + " + y + " = " + summa); public static int sum(int a, int b) { return a + b; Variabler existerar bara innanför de måsvingar inom vilka de är deklarerade. I exemplet ovan syns inte x och y i metoden sum. Notera att värdet på parametrarna kopieras vid anrop, de lokala kopiorna inuti sum heter a och b. Ändrar vi värdet på a ändras inte värdet på x. Idag ska vi lära oss hur man skapar nya klasser. Tidigare har vi bara använt oss av en klass i vilken vi har skrivit en main-metod. Nu ska vi dessutom skriva en extra klass. Den nya klassen ska ha både instansvariabler och klassvariabler samt även klassmetoder och instansmetoder. Sedan ska vi använda vår nya klass som mall och skapa objekt utifrån den. Det vill säga vi ska instansiera flera objekt av den nya klassen. Vårt program kommer alltså använda sig av två klasser, en med main-metod och en utan någon main-metod. Vid metodanrop måste parametrarna ha rätt datatyp. I vårt fall vill sum ha två heltal (int).

Vad är en klass? Vad är en instans? En klass är vårt sätt att i programkoden beskriva hur objekten ska vara. I filen Jacuzzi.java står det, public class Jacuzzi { Jacuzzi(int parameter) { // konstruktor temperatur = parameter; Instanserna är de objekten som skapas utifrån klassens mall med hjälp av konstruktorn. Jacuzzi palmsprings = new Jacuzzi(41); När du skriver new anropar du klassens konstruktor, vilken skapar (konstruerar) en ny instans av klassen. public void settemperatur(int t) { // instansmetod temperatur = t; public String tostring() { // instansmetod return "Jacuzzin har temperatur " + temperatur + " grader"; Det går att skapa fler olika instanser utifrån en och samma klass. Här har vi en Jacuzzi vilken har en instansvariabel temperatur, en konstruktor och dessutom två instansmetoder. Tips: Ha bara en klass per fil samt se till att klassnamn och filnamn stämmer överrens. Vi skapar vår första instans Vi kompilerar och kör... I filen TestJacuzzi.java skapar vi en instans av vår klass Jacuzzi, ändrar dess temperatur och skriver ut resultatet. public class TestJacuzzi { När vi kompilerar och sedan kör programmet ser det ut så här >javac TestJacuzzi.java >java TestJacuzzi Jacuzzin har temperatur 41 grader Jacuzzin har temperatur 42 grader Jacuzzi palmsprings = new Jacuzzi(41); // Konstruktorn anropas System.out.println(palmsprings); Vi har här skapat en instans av vår Jacuzzi klass med temperaturen 41 och skrivit ut den. palmsprings.settemperatur(42); // Nu höjer vi temperaturen System.out.println(palmsprings); Därefter har vi höjt dess temperaturen till 42 och skrivit ut instansen igen. Notera hur vi höjer temperaturen. Vår instansmetod ändrar på temperaturen hos instansen. Eftersom det kan finnas många olika instanser, måste vi säga vilken instans den tillhör, här är det palmsprings. Tips: Om en klass har en tostring-metod så är det möjligt att skriva ut den direkt som vi gör ovan.

Vi kan instansiera flera objekt Gemensamma variabler Vi kan enkelt skapa flera instanser av samma klass i vårt testprogram TestFleraJacuzzi.java public class TestFleraJacuzzi { Jacuzzi palmsprings = new Jacuzzi(41); Jacuzzi helsinki = new Jacuzzi(33); Jacuzzi pingvin = new Jacuzzi(4); Palmspringshotell: " + palmsprings); Helsinki: " + helsinki); Sydpolen: " + pingvin); De olika instanserna palmsprings, helsinki och pingvin skiljer sig åt eftersom vi anropade deras konstruktorer med olika parametervärden. Vi kompilerar och kör >javac TestFleraJacuzzi.java >java TestFleraJacuzzi Palmspringshotell: Jacuzzin har temperatur 41 grader Helsinki: Jacuzzin har temperatur 33 grader Sydpolen: Jacuzzin har temperatur 4 grader Vi har nu sett hur man skapar både en och flera instanser av en klass. Vår första klass innehöll en instansvariabel temperatur samt två instansmetoder. Den ena instansmetoden settemperatur ändrade på temperaturen och den andra instansmetoden tostring returnerade en sträng med temperaturen, vilken vi skrev ut. I vårt exempel hade våra Jacuzzi-instanser olika temperatur. Varje instans har sin egen lokala kopia av instansvariabeln temperatur. I Lab4 behöver vi även kunna skapa variabler som är gemensamma för alla instanser av vår klass, så kallade klassvariabler! Det vill säga, ändrar någon av instanserna på variabeln ser alla instanser det nya värdet. Hur skapar vi klassvariabler? Exempel med en klassvariabel Genom att skriva static framför en variabel så blir det en klassvariabel. Alla instanser har en gemensam kopia av variabeln. Ändrar en instans på den ser alla ändringen eftersom de utnyttjar samma minnescell. public class LyxJacuzzi { static int lyxskatt = 0; // klassvariabel LyxJacuzzi(int parameter) { // konstruktor temperatur = parameter; public String tostring() { return "Temperatur " + temperatur + " grader" + " och lyxskatt " + lyxskatt + " kronor"; public static void nyskatt(int pengar) { // klassmetod lyxskatt = pengar; public int doppatån() { // instansmetod return temperatur; Här är klassvariabeln lyxskatt gemensam för alla instanser, vilket markeras av ordet static. Detta program skapar tre instanser och ändrar sedan på klassvariabeln lyxskatt. public class TestLyxJacuzzi { LyxJacuzzi palmsprings = new LyxJacuzzi(41); LyxJacuzzi alice = new LyxJacuzzi(45); LyxJacuzzi hummer = new LyxJacuzzi(100); * Från början ser det ut så här"); Palmspringshotell: " + palmsprings); Alice: " + alice); Hummergrytan: " + hummer); * Lyxskatten sätts till 10000"); LyxJacuzzi.nySkatt(10000); // Vi ändrar skatten för alla! Palmspringshotell: " + palmsprings); Alice: " + alice); Hummergrytan: " + hummer); Observera att klassen TestLyxJacuzzi ligger i TestLyxJacuzzi.java filen och LyxJacuzzi finns inuti LyxJacuzzi.java filen.

Vi kör vårt exempel... Anrop av metoder i andra klasser... Notera hur skatten hos alla våra instanser ändras när vi anropar nyskatt. >javac TestLyxJacuzzi.java >java TestLyxJacuzzi * Från början ser det ut så här Palmspringshotell: Temperatur 41 grader och lyxskatt 0 kronor Alice: Temperatur 45 grader och lyxskatt 0 kronor Hummergrytan: Temperatur 100 grader och lyxskatt 0 kronor * Lyxskatten sätts till 10000 Palmspringshotell: Temperatur 41 grader och lyxskatt 10000 kronor Alice: Temperatur 45 grader och lyxskatt 10000 kronor Hummergrytan: Temperatur 100 grader och lyxskatt 10000 kronor Klassmetoder anropas med klassnamnet framför sig LyxJacuzzi.nySkatt(10000); Instansmetoder ska ha en instans framför sig palmsprings.settemperatur(42); För exempel på hur de ser ut se main-metoderna i de två föregående exemplena TestJacuzzi och TestLyxJacuzzi. Tillhör metoden den klass eller instans du gör anropet ifrån behöver du inte skriva något före metodnamnet vid anrop. Figur 1: Alice i sin instans av LyxJacuzzi. Mer om konstruktorn Nu har vi det vi behöver... Konstruktorn instansierar nya objekt av en klass. Den ser till att variablerna i den nya instansen har de värden de ska ha. Nu har vi allt vi behöver för att klara Lab4. Kolla er själva... public class Jacuzzi { String märke; // instansvariabel Jacuzzi() { // konstruktor A temperatur = 0; märke = "okänd"; Jacuzzi(int temp, String märke) { // konstruktor B temperatur = temp; this.märke = märke; // exempel på hur this används Du kan ha flera olika konstruktorer till samma klass. När du anropar konstruktorn med new väljs den konstruktor vars inparametertyp passar bäst. Ni vet hur man skriver en ny klass? Ni vet hur man instansierar objekt av den nya klassen med hjälp av new? Ni vet hur man skapar klassvariabler och klassmetoder med hjälp av static? Ni vet hur man anropar både klassmetoder och instansmetoder? Om något är oklart fråga! Jacuzzi hawaii = new Jacuzzi(); // anropar konstruktor A Jacuzzi palmsprings = new Jacuzzi(41, "IKEA"); // anropar konstruktor B