Mer om klasser och objekt

Relevanta dokument
Enkla variabler kontra referensvariabel

Enkla variabler kontra referensvariabel

Föreläsning 6. Mer om klasser och objekt. Enkla variabler kontra referensvariabel. Omslagsklassen Integer. Referensvariabler

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

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

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

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

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 övning 2.

Objekt och referenser

Objekt och klasser - Introduktion

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

Chapter 4: Writing Classes/ Att skriva egna klasser.

Föreläsning 3. Iteration while-satsen

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

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

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

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

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

Malmö högskola 2008/2009 CTS

Föreläsning 4. Klasser och objekt

Föreläsning 3-4 Innehåll

Iteration while-satsen

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

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

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 )

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

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

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

Laboration 1 - Grunderna för OOP i Java

Ett objekt... Exempel: Om ni tittar er runt i föreläsningssalen ser in många olika fysiska föremål:

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]

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

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

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

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

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

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

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.

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

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

Föreläsning 5. Föreläsning 5. Klasser och objekt. Klasser och objekt. Klasser och objekt

Objektorienterad programmering i Java

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

OOP Objekt-orienterad programmering

Föreläsning 5. Föreläsning 5

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.

Objektorienterad Programmering DAT043

JAVAUTVECKLING LEKTION 11

Tentamen OOP

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

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

Föreläsnings 9 - Exceptions, I/O

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

for-satsen Fält for-satsen Föreläsning 8 (OH-bilder 7) for-satsen for-sats är en styrsats för iterationer. for-sats har följande generella utseende:

Klasser och objekt. Henrik Johansson. August 20, 2008

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

Övningsuppgift. Bankkonton. Steg 2. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402

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.

DAT043 - Föreläsning 7

Lösningsförslag till tentamen

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

Att öva på och förstå ett program med flera samverkande klasser.

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ 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

Föreläsning 3. Iteration. while-satsen for-satsen do-satsen

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

Lösningsförslag till tentamen

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

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

Sammanfattning och repetition utgående från typiska tentamensuppgifter

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

Föreläsning REPETITION & EXTENTA

Design av en klass BankAccount som representerar ett bankkonto

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

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

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Föreläsning 6. Top-Down Design Parameteröverföring

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

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

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

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

Top-Down Design Parameteröverföring

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

Datatyper. Programmering. Att definiera datatyper i Java. Laddade partiklar. (x,y) (Rx,Ry) hh.se/db2004

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

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

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

OOP Objekt-orienterad programmering

Repetition av OOP- och Javabegrepp

Föreläsning 7. for-satsen Fält

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

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. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Del A (obligatorisk för alla)

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Repetition av OOP- och Javabegrepp

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Transkript:

Klassvariabler och klassmetoder En klass kan innehålla klassvariabler och klassmetoder. TDA143 I1 Programmerade system Föreläsning 5 (OH-bilder 5) Mer om klasser och objekt Christer Carlsson Det som skiljer en klassvariabel från en instansvaiabel och en klassmetod från en instansmetod är att: klassvariabler och klassmetoder är gemensamma för alla objekt som tillhör en klass instansvariabler och instansmetoder finns i unika uppsättningar i varje objekt som tillhör en klass. Detta betyder att metoder som påverkar någon instansvariabel eller behöver tillgång till någon instansvariabel för att kunna fullgöra sin uppgift, måste implementeras som instansmetoder. Övriga metoder bör däremot implementeras som klassmetoder. Exempel: Antag att vi har en klass Person för att avbilda personer. Antag vidare att vi i ett program skapat instanserna kalle och sture av klassen Person. I klassen Person finns vidare metoderna getvikt() och getvikt(person p) som t.ex kan anropas på följande sätt: double vikt1 = kalle.getvikt(); double vikt2 = kalle.getvikt(sture); som levererar svaren på frågorna: respektive Kalle, vad väger du? Kalle, hur mycket väger Sture? Metoden getvikt() måste vara en instansmetod, medan metoden getvikt(person p) bör vara en klassmetod. 1 2 Klassvariabler och klassmetoder Modifieraren static används för att ange att en variabel är en klassvariabel respektive att en metod är en klassmetod: private static double rate; public static final double PI = 3.1415; public static int parseint(string s) public static void main(string[] arg) Access till publika klassattribut fås genom att ange klassens namn, följt av en punkt., följt av attributets namn * Math.PI Interger.MAX_VALUE Access till publika klassmetoder fås genom att ange klassens namn, följt av en punkt., följt av metodens namn och argumentlista. String indata = JOptionPane.showInputDialog("Ge talet:"); double tal1 = Double.parseDouble(indata); double tal2 = Math.pow(tal1, 3); System.out.println("Det beräknade talet blev: " + tal2); Exempel: Klassvariabler och klassmetoder(1) Skapa en klass Account för att avbilda bankkonton. Ett konto skall innehålla uppgifter om vem som äger kontot kontonummer saldo räntesats På ett konto skall det vara möjligt att göra transaktioner (insättningar eller uttag) ta reda på räntesatsen ta reda på saldo ta reda på kontots ägare ta reda på kontots kontonummer ändra räntesats lägga till årsräntan Alla konton skall ha samma räntesats. Alla konton skall ha unika kontonummer, vilket är ett löpnummer i den ordning kontonen skapas. Har man skapat objekt av en klass kan klassvariabler och klassmetoder även refereras via dessa objekt. * de enda publika klassattribut som bör finnas är konstanter 3 4

Exempel: klassvariabler och klassmetoder(2) public class Account { private static double rate; //klassvariabel private static int currentnr = 0; //klassvariabel private double balance; //instansvariabel private String owner; //instansvariabel private int number; //instansvariabel public Account(String owner) { this.owner = owner; currentnr = currentnr + 1; number = currentnr; } //konstruktor public static void setrate(double newrate) {//klassmetod rate = newrate; } //setrate public static double getrate() { //klassmetod return rate; } //getrate public double getbalance() { //instansmetod return balance; } //getbalance public int getnumber() { //instansmetod return number; } //getnumber public String getowner() { //instansmetod return owner; } //getowner public void transaction(double amount) { //instansmetod if (amount < 0 && balance + amount < 0) System.out.println("Not money enought!!"); else balance = balance + amount; } //transaction public void addinterest(double interest) { //instansmetod balance = balance + balance*interest; }//addinterest } //Account Klassvariabler och klassmetoder Antag att följande satser har gjorts: Account konto1 = new Account("Kalle"); Account konto2 = new Account("Stina"); Account.setRate(0.024); konto1.transaction(0); konto1.transaction(300); konto2.setrate(0.021); //en klassmetod kan anropas via ett objekt Följande bild illustrerar vilka objekt som finns samt vilka värden respektive instansvariabel och klassvariabel har: konto1: Account balance owner instans av 0 Kalle double getbalance() int getnumber() String getowner() void transaction(double amount) void addinterest() Account rate 0.021 currentnr 2 void setrate(double rate) double getrate() konto1: Account balance owner instans av En klassmetod får inte referera till någon instansvariabler! Varför? 300 Stina number 1 number 2 double getbalance() int getnumber() String getowner() void transaction(double amount) void addinterest() 5 6 Skapa en klass för tärningar Vilka tillstånd kan en tärning ha? - värdet, dvs vilken siffra har ovansidan på tärningen Vilket beteende har en tärning ( = vad vill man kunna göra med en tärning)? - slå tärningen - läsa av värdet på tärningen Specifikation av klassen för tärningar Vi kallar klassen för Dice. För att handha tärningens värde behövs en instansvariabel int dots. Då värdet endast skall kunna förändras genom att kasta tärningen skall instansvariabelns synlighet vara private private int dots; För att kasta tärningen behövs en instansmetod som slumpmässigt ändrar tärningens värde public void roll() Metoden roll använder ett objekt av klassen Random för att erhålla ett slumpmässigt värde. Detta objekt görs till en klassvariabel private static Random dicerandom = new Random(); För att läsa av tärningens värde behövs en instansmetod som returnerar värdet av instansvariabeln dots public int getdots() Vi väljer att låta klassen ha två konstruktorer. Den första konstruktorn sätter tärningens startvärde till 6. public Dice() Den andra konstruktorn tillåter användaren att initera tärningen till godtyckligt startvärde. Om detta värde inte är mellan 1 och 6, sätts startvärdet till 6. public Dice(int dots) 7 8

Implementering av klassen Dice import java.util.*; public class Dice { private int dots; private static Random dicerandom = new Random(); //Observera att dicerandom är en klassvariabel!! public Dice() { dots = 6; }// konstruktor public Dice(int dots) { if (dots > 6 dots < 1) this.dots = 6; else this.dots = dots; } //konstruktor public int getdots() { return dots; } //getdots public void roll() { dots = dicerandom.nextint(6) + 1; } //roll } //Dice Exempel Använd klassen Dice för att skriv ett program som genom simulering beräknar sannolikheten för att erhålla den sammanlagda summan 7 när man kastar två tärningar. Vaför har dicerandom implementerats som en klassvariabel? Vaför finns det ingen metod setdots för att sätta värdet på instansvariabeln dots? 9 Analys: Implementation: Diskussion: För att beräkna sannolikheten görs ett tillräckligt stort antal kast med tärningarna. Vi räknar hur många gånger tärningarns sammanlagda värde blir 7. Detta antal dividerat med totala antalet tärningskast ger sannolikheten för att erhålla värdet 7. Utdata: Sannolikheten att erhålla värdet 7. Design: Algoritm: 1. Sätt antalsjuor till 0. 2. Upprepa nrofturns gånger 2.1. Kasta tärning t1. 2.2. Kasta tärning t2. 2.2. Läs av tärningarnas värden och lagra den sammanlagda summan i summa. 2.3. Om summa har värdet 7 så Öka antalsjuor med 1. 3. Skriv ut värdet av antalsjuor / nfofturns Datarepresentation: Tärningarna t1 och t2 är av klassen Dice. antalsjuor och nrofturns är av typen int. // Programmet beräknar genom simulering // sannolikheten för att erhålla värdet 7 vid // kast med två tärningar public class TestTwoDice { public static void main (String[] args) { Dice t1 = new Dice(); Dice t2 = new Dice(); final int nrofturns = 0000; int summa; int antal = 0; int i = 0; while (i < nrofturns) { t1.roll(); t2.roll(); summa = t1.getdots() + t2.getdots(); if (summa == 7) antal = antal + 1; i = i + 1; } System.out.println("Sannolikheten att få värdet 7 är " + ((double) antal) / nrofturns); } // main } //TestTwoDice 11 12

Skillnaden mellan en variabel och en Datorns minne är uppdelat i ett antal dataord, där varje dataord är associerat med en specifik adress. En variabel är ett namngivet minnesutrymme i datorns primärminne i vilket information lagras i form av bits. Resultatet av deklarationssatsen int tal = ; Adress 12345 12346 12347 12348 12350 Minne som innebär att en heltalsvariabel tal deklareras och initieras till värdet, kan illustreras med nedanstående bild: Adress Minne Skillnaden mellan en variabel och en En är en variabel i vilken en adress till datorns minne lagras. En refererar således till en annan plats i datorns minne (därav namnet ). Referensvariabler används när objekt skapas dynamiskt med operatorn new. Som exempel kan vi skapa ett objekt av klassen Integer (som är en omslagsklass till den primära datatypen int) mha deklarartionen Integer talobjekt = new Integer(); Ett objekt av klassen Integer har endast en instansvariabel, typen på instansvariabeln är int och i vårt exempel blir dess värde. Det objekt som vi skapat kommer att lagras någonstans i datorns minne och n talobjekt tilldelas adressen till denna plats i minnet. Det hela kan illustreras med följande figur: Adress Minne tal 12345 12346 12347 12348 12350 talobjekt 12345 12346 12347 12348 12350 här lagras objektet som refereras 13 14 Omslagsklassen Integer 15 16

Skillnaden mellan en variabel och en Om vi gör följand deklarationer int tal1 = ; int tal2 = ; kan detta illustreras med följande bild Skillnaden mellan en variabel och en Om vi gör följand deklarationer Integer talobjekt1 = new Integer(); Integer talobjekt2 = new Integer(); kan detta illustreras med följande bild tal1 tal2 talobjekt1 talobjekt2 Görs sedan satsen tal2 = tal1; får vi bilden tal1 tal2 Görs sedan satsen talobjekt2 = talobjekt1; får vi bilden talobjekt1 talobjekt2 17 18 Ett litet testprogram Förklarning import javax.swing.*; public class TestRectangle { public static void main (String[] args) { Rectangle rek1 = new Rectangle(, ); Rectangle rek2 = new Rectangle(150, 98); String utdata = ""; rek2 = rek1; rek1.setwidth(50); rek2.setheight(0); utdata = utdata + rek1 + rek2; JOptionPane.showMessageDialog(null, utdata); } } Rectangle rek1 = new Rectangle(, ); Rectangle rek2 = new Rectangle(150, 98); rek1 rek2 = rek1; rek1 rek2 rek2 150 98 Vad blir utskriften? 150 98 rek1.setwidth(50); rek2.setheight(0); rek1 rek2 50 0 150 98 19

När är två objekt lika? Om vi gör följand deklarationer Integer talobjekt1 = new Integer(); Integer talobjekt2 = new Integer(); kan detta illustreras med följande bild talobjekt1 talobjekt2 Vad kommer jämförelsen (talobjekt1 == talobjekt2) att få för värde? Resultatet blir false, eftersom det är referenserna till objekten som jämförs!! För att jämföra själva objekten tillhandahåller klassen Integer instansmetoden equals. Anropet talobjekt1.equals(talobjekt2) kommer att returnera värdet true. Vill man kunna jämföra två objekt av en viss klass måste klassen tillhandahålla instansmetoden equals. Utöka klassen Rectangle med instansmetoden equals som jämför om två objekt är lika! Hur skall likhet definieras? 21