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



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

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

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

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.

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

Laboration 1 - Grunderna för OOP i Java

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

Lösningsförslag övning 2.

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

OOP Objekt-orienterad programmering

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

Malmö högskola 2008/2009 CTS

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

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

Föreläsning 3-4 Innehåll

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

TENTAMEN OOP

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

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

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

Klasser och objekt. Henrik Johansson. August 20, 2008

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

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

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

Objektorienterad programmering i Java

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

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

(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

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

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

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

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

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Java, klasser, objekt (Skansholm: Kapitel 2)

Tentamen OOP

Tentamen i Programmeringsteknik I,, KandMa/Fy,

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

TENTAMEN OOP

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

Chapter 4: Writing Classes/ Att skriva egna klasser.

TDDC77 Objektorienterad Programmering

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

Del A (obligatorisk för alla)

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.

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

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

Det finns en referensbok (Java) hos vakten 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

Föreläsning REPETITION & EXTENTA

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]

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

TENTAMEN OOP

Objektorienterad programmering Föreläsning 5

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

Del A (obligatorisk för alla)

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

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

Objektorienterad Programmering DAT043

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

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

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?

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

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

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

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

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

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

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

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

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

JAVA Mer om klasser och objektorientering

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

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

Det finns en referensbok (Java) hos vakten 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

JAVAUTVECKLING LEKTION 11

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

Tentamen i Programmeringsteknik I

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

Tentamen i Programmeringsteknik I

TUTORIAL: KLASSER & OBJEKT

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.

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

DELPROV 1 I DATAVETENSKAP

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

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

Föreläsning 6: Metoder och fält (arrays)

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

Övningar Dag 2 En första klass

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

OOP Objekt-orienterad programmering

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.

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

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

OOP Objekt-orienterad programmering

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

Transkript:

Programmeringsteknik och Matlab Övning 4 Dagens program Övningsgrupp 2 (Sal Q22/E32) Johannes Hjorth hjorth@nada.kth.se Rum 4538 på plan 5 i D-huset 08-790 69 02 Kurshemsida: http://www.nada.kth.se/kurser/kth/2d1312 Övningsanteckningar: http://www.nada.kth.se/ hjorth/teaching/prgi05 Samla data och tillhörande metoder i objekt 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 Mer om konstruktorn Vår klass kan ha mer än en konstruktor Arrayer, ArrayList och Jacuzzi Triangeldramat fortsätter Sammanfattning inför Lab5 Kolla dig själv! Objektorienterad programmering Vad är vitsen med att ha både metoder och data i objekten? Datorer är bra på att behandla stora mängder data. Vi vill kunna göra olika saker med informationen beroende på vad det är. En bank har konton som man bör kunna föra över pengar mellan. En börs har aktiekurser som ändras och som vi kanske vill kunna analysera. Det här är tillfällen då det kan vara en bra idé att gruppera data tillsammans med metoder som kan behandla den. Vi kan skapa objekt som innehåller både data och tillhörande metoder. 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 huvudet, 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 om 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.

Klasser och instanser Kort repetition av metoder 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? Detta beskrivs i en mall. Ni har redan sett dessa mallar på föreläsningen. Vi brukar kalla mallen för en klass. I Lab4 använde 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. Vid metodanrop måste parametrarna ha rätt datatyp. I vårt fall vill sum ha två heltal (int). Vad behöver vi veta för Lab5? Vad är en klass? 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 variabler och metoder. 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. 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 { private int temperatur; // instansvariabel Jacuzzi(int parameter) { // konstruktor temperatur = parameter; public void settemperatur(int t) { // instansmetod temperatur = t; public String tostring() { // instansmetod return "Jacuzzin har temperatur " + temperatur + " grader"; Här har vi en Jacuzzi vilken har en instansvariabel temperatur, en konstruktor och dessutom två instansmetoder. Tips: Ha bara en klass per fil och se till att klassnamn och filnamn stämmer överrens.

Vad är en instans? Vi skapar vår första instans instanser / objekt lada 2005 ferrari 1983 volvo 1997 I filen TestJacuzzi.java skapar vi en instans av vår klass Jacuzzi, ändrar dess temperatur och skriver ut resultatet. public class TestJacuzzi { klass / mall / ritning märke årgång konstruktor Instanserna är de objekt 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. Det går att skapa fler olika instanser utifrån en och samma klass. public static void main(string[] argument) { Jacuzzi palmsprings = new Jacuzzi(41); // Konstruktorn anropas System.out.println(palmsprings); palmsprings.settemperatur(42); // Nu höjer vi temperaturen System.out.println(palmsprings); 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 kompilerar och kör... Vi kan instansiera flera objekt 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 Vi har här skapat en instans av vår Jacuzzi klass med temperaturen 41 och skrivit ut den. Därefter har vi höjt dess temperaturen till 42 och skrivit ut instansen igen. Vi kan enkelt skapa flera instanser av samma klass i vårt testprogram TestFleraJacuzzi.java public class TestFleraJacuzzi { public static void main(string[] argument) { Jacuzzi palmsprings = new Jacuzzi(41); Jacuzzi helsinki = new Jacuzzi(33); Jacuzzi pingvin = new Jacuzzi(4); System.out.println("Palmspringshotell: " + palmsprings); System.out.println("Helsinki: " + helsinki); System.out.println("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

En kopia av variablerna per instans Anrop av metoder i andra instanser... 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. Metoder ska ha en instans framför sig palmsprings.settemperatur(42); För exempel på hur de ser ut se main-metoden i exemplet TestJacuzzi. Tillhör metoden den instans du gör anropet ifrån behöver du inte skriva något före metodnamnet vid anrop. I vårt exempel hade våra Jacuzzi-instanser olika temperatur. Varje instans har sin egen lokala kopia av instansvariabeln temperatur. Figur 1: Alice i sin instans av Jacuzzi. Mer om konstruktorn Array med Jacuzzi Konstruktorn instansierar nya objekt av en klass. Den ser till att variablerna i den nya instansen har de värden de ska ha. public class Jacuzzi { private int temperatur; // instansvariabel private 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 Det går även att skapa arrayer fyllda med objekt! Vi skapar en array med Jacuzzi-objekt så här Jacuzzi[] lokaltparadis = new Jacuzzi[5]; Med en for-loop instansierar vi sedan alla objekt for(int i = 0; i < lokaltparadis.length; i++) { lokaltparadis[i] = new Jacuzzi(30); 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. Jacuzzi hawaii = new Jacuzzi(); // anropar konstruktor A Jacuzzi palmsprings = new Jacuzzi(41, "IKEA"); // anropar konstruktor B För att ändra temperaturen på det fjärde elementet anropar vi instansmetoden settemperatur lokaltparadis[3].settemperatur(41); Notera att fjärde elementet har index tre!

Jacuzzi-array exempel ArrayList med Jacuzzi-objekt Exempel på en array med Jacuzzi-objekt public class Badhus { public static void main(string[] args) { int i; // loopvariabel // Vi skapar en array med plats för fem Jacuzzi Jacuzzi[] lokaltparadis = new Jacuzzi[5]; // Vi instansierar de fem Jacuzzi objekten for(i = 0; i < lokaltparadis.length; i++) { lokaltparadis[i] = new Jacuzzi(30); // Vi ändrar temperaturen på det fjärde elementet lokaltparadis[3].settemperatur(41); for(i = 0; i < lokaltparadis.length; i++) { System.out.println(lokaltParadis[i]); Ifall vi inte på förhand vet hur många objekt vi behöver spara använder vi oss av ArrayList. import java.util.*; public class JacuzziVaruhus { public static void main(string[] inparametrar) { String märke = "startvärde, så vi kommer in i loopen"; int temp; ArrayList<Jacuzzi> utbud = new ArrayList<Jacuzzi>(); Scanner scan = new Scanner(System.in); System.out.print("Jacuzzi märke: "); // Fråga första märke = scan.nextline(); while(märke.length() > 0) { // Ska vi fortsätta? System.out.print("Temperatur: "); temp = scan.nextint(); scan.nextline(); // Rensa bort radslut mm. utbud.add(new Jacuzzi(temp, märke)); // spara i ArrayList Vi kompilerar och kör Badhus.java >javac Badhus.java >java Badhus Jacuzzin har temperatur 41 grader System.out.print("Jacuzzi märke: "); // Fråga nästa märke = scan.nextline(); for(int i = 0; i < utbud.size(); i++) { // Skriv ut *alla* Jacuzzi tmp = utbud.get(i); System.out.println(tmp); // här anropas tmp.tostring() Jacuzzi.java Nu har vi det vi behöver... I exemplet ovan använde vi följande version av Jacuzzi.java public class Jacuzzi { private int temperatur; // instansvariabel private String märke; // instansvariabel Jacuzzi(int temperatur, String märke) { // konstruktor this.temperatur = temperatur; this.märke = märke; Jacuzzi(int temperatur) { // konstruktor this.temperatur = temperatur; märke = "okänt"; public void settemperatur(int t) { // instansmetod temperatur = t; Nu har vi allt vi behöver för att klara Lab5. Kolla er själva... Jag vet hur man skriver en ny klass? Jag vet hur man instansierar objekt av den nya klassen med hjälp av new? Jag vet hur man anropar metoder och när man måste skriva en instans framför metodnamnet? public String tostring() { // instansmetod return "Jacuzzin av märket " + märke + " har temperatur " + temperatur + " grader"; Om något är oklart fråga! Instansvariablerna är private eftersom vi inte vill att de ska synas utifrån. Bara objektets egna metoder ska kunna ändra på deras värden.

Rita en bild här...