F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

Relevanta dokument
F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

F1 - Introduktion. ID1004 Objektorienterad programmering Fredrik Kilander

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Tentamen ID1004 Objektorienterad programmering December 15, 2012

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Objekt och klasser - Introduktion

Java, klasser, objekt (Skansholm: Kapitel 2)

Objektorienterad programmering i Java

OOP Objekt-orienterad programmering

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

F3 Klasser och objekt. ID1004 Objektorienterad programmering Fredrik Kilander

Tentamen ID1004 Objektorienterad programmering May 29, 2012

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

F7 - Arrayer. ID1004 Objektorienterad programmering Fredrik Kilander

Tentamen ID1004 Objektorienterad programmering October 29, 2013

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

OOP Objekt-orienterad programmering

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

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Enkla variabler kontra referensvariabel

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

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

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

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

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

Lösningsförslag övning 2.

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

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

TENTAMEN OOP

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

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

Typkonvertering. Java versus C

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

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

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

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

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 )

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

TENTAMEN OOP

Tentamen OOP

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

Föreläsning 3-4 Innehåll

Klasshierarkier - repetition

JAVAUTVECKLING LEKTION 11

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

Parameteröverföring. Exempel. Exempel. Metodkropp

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

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

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

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

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

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

OOP Objekt-orienterad programmering

F4. programmeringsteknik och Matlab

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

TDDC77 Objektorienterad Programmering

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

TDIU01 - Programmering i C++, grundkurs

(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

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

Chapter 4: Writing Classes/ Att skriva egna klasser.

JAVA Mer om klasser och objektorientering

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

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

Introduktion till Java

TDIU01 - Programmering i C++, grundkurs

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.

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

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

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]

Objektorienterad Programmering (TDDC77)

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

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

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

Konstruktion av klasser med klasser

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

Programmeringsteknik I

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

Föreläsning 3: Booleans, if, switch

Inledande programmering med C# (1DV402) Tärningarna ska kastas

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

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

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

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

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

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

Föreläsning 2, vecka 8: Repetition

Malmö högskola 2008/2009 CTS

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

Transkript:

F4 Klasser och Metoder ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se

Klasser och objekt Klasser definierar (utgör idén) Objekt instantierar (utgör förekomsten) En klassdefinition Många instanser från samma definition Dog Fido Karo Rex Heidi

Klasser och objekt public class Dog { String myname; public Dog (name) { myname = name; Dog d1 = new Dog( Fido ); Dog d2 = new Dog( Karo ); Dog d3 = new Dog( Rex ); Dog d4 = new Dog( Heidi ); Dog Klass Fido Karo Rex Heidi Instanser

Objekt har tillstånd (state) Attribut Operationer class Dog { String name; int age; float hunger; void gowalkies(float km) float eat(float gramsfood) Fido 3 0.6 Fidos tillstånd class Dog { String name; int age; float hunger; void gowalkies(float km) float eat(float gramsfood) Karo 1 0.3 Karos tillstånd

äntligen TILLVERKA OCH ANVÄNDA OBJEKT

Klassen Die.java (tärning) public class Die { private final int MAX = 6; private int facevalue; public Die() { facevalue = 1; public int roll () { facevalue = (int) (Math.random() * MAX) + 1; return facevalue; public void setfacevalue(int value) { facevalue = value; public int getfacevalue() { return facevalue; public String tostring() { return Integer.toString(faceValue);

Klassen Die.java (tärning) public class Die { private final int MAX = 6; private int facevalue; public Die() { facevalue = 1; public int roll () { facevalue = (int) (Math.random() * MAX) + 1; return facevalue; public void setfacevalue(int value) { facevalue = value; public int getfacevalue() { return facevalue; public String tostring() { return Integer.toString(faceValue); Antal sidor på tärningen. Konstant

Klassen Die.java (tärning) public class Die { private final int MAX = 6; private int facevalue; public Die() { facevalue = 1; public int roll () { facevalue = (int) (Math.random() * MAX) + 1; return facevalue; public void setfacevalue(int value) { facevalue = value; public int getfacevalue() { return facevalue; public String tostring() { return Integer.toString(faceValue); Antal ögon upp. Inte åtkomlig utifrån

Klassen Die.java (tärning) public class Die { private final int MAX = 6; private int facevalue; public Die() { facevalue = 1; public int roll () { Konstruktor, initierar instansen facevalue = (int) (Math.random() * MAX) + 1; return facevalue; public void setfacevalue(int value) { facevalue = value; public int getfacevalue() { return facevalue; public String tostring() { return Integer.toString(faceValue);

Klassen Die.java (tärning) public class Die { private final int MAX = 6; private int facevalue; public Die() { Kastar tärningen facevalue = 1; public int roll () { facevalue = (int) (Math.random() * MAX) + 1; return facevalue; public void setfacevalue(int value) { facevalue = value; public int getfacevalue() { return facevalue; public String tostring() { return Integer.toString(faceValue);

Klassen Die.java (tärning) public class Die { private final int MAX = 6; private int facevalue; public Die() { facevalue = 1; public int roll () { facevalue = (int) (Math.random() * MAX) + 1; return facevalue; public void setfacevalue(int value) { facevalue = value; public int getfacevalue() { return facevalue; public String tostring() { return Integer.toString(faceValue); Sätter tärningens värde

Klassen Die.java (tärning) public class Die { private final int MAX = 6; private int facevalue; public Die() { facevalue = 1; public int roll () { facevalue = (int) (Math.random() * MAX) + 1; return facevalue; public void setfacevalue(int value) { facevalue = value; public int getfacevalue() { return facevalue; public String tostring() { return Integer.toString(faceValue); Returnerar tärningens värde

Klassen Die.java (tärning) public class Die { private final int MAX = 6; private int facevalue; public Die() { facevalue = 1; public int roll () { facevalue = (int) (Math.random() * MAX) + 1; return facevalue; public void setfacevalue(int value) { facevalue = value; public int getfacevalue() { return facevalue; public String tostring() { return Integer.toString(faceValue); Returnerar en sträng som beskriver tärningen

Reflektioner? public class Die { private final int MAX = 6; private int facevalue; public Die() { facevalue = 1; public int roll () { facevalue = (int) (Math.random() * MAX) + 1; return facevalue; public void setfacevalue(int value) { facevalue = value; public int getfacevalue() { return facevalue; public String tostring() { return Integer.toString(faceValue);

Reflektioner? public class Die { private final int MAX = 6; private int facevalue; public Die() { facevalue = 1; public int roll () { facevalue = (int) (Math.random() * MAX) + 1; return facevalue; public void setfacevalue(int value) { facevalue = value; public int getfacevalue() { return facevalue; public String tostring() { return Integer.toString(faceValue); Vilket värde som helst accepteras. facevalue kunde lika gärna vara public...

Dice.java (tärningar) public class Dice { private Die die1 = new Die(); private Die die2 = new Die(); public int roll() { return die1.roll() + die2.roll(); public int getvalue() { return die1.getfacevalue() + die2.getfacevalue();

^_^ METODER I DETALJ

Metoder innehåller kod Programsatser utförs enligt sekvens: a; b; c;... selektion: if (villkor) t-stmt ; else f-stmt ; iteration: while (villkor) a; Programsatser Tilldelning: variabel = uttryck ; Metodanrop Kontrollstruktur: if, switch, while, for, do,... Satsblock: {a; b; c;

Sekvens System.out.print(count); System.out.print( : ); System.out.print(s); System.out.println();

Selektion if else if (upperlimit < x) { if (c == a ) { else { if (c == a ) { else if (c == b ) {

Selektion switch case switch(c) { case a : break; case b : break; case c : break; default: break; Switch-uttrycket skall ge en primitiv datatyp Case-konstanterna skall matcha typen Fr o m Java version 7 är även String tillåten

Selektion switch case switch(c) { case a : break; case b : break; case c : break; default: break; if (c == a ) { else if (c == b ) { else if (C == c ) { else {

Iteration - for for (<initiering>;<villkor>;<uppdatering>) { for (int i = 0; i < limit; i++) {

Iteration for each for (<variabel> : <datasamling>) { for (String s : args) {

Iteration while while(<villkor>) { while(i < limit) {

Iteration do do { while(<villkor>); do { while (i < limit);

Loopkontroll break hoppa till slutet av närmast omgivande for, while, do eller switch continue hoppa till början av den närmast omgivande for, while eller do

Parameteröverföring Metodens deklaration char calc(int num1, int num2, String message){ int sum = num1 + num2; char result = message.charat(sum); return result;

Parameteröverföring Varsitt uttryck av typen int En referens till en sträng Metodens deklaration char calc(int num1, int num2, String message){ int sum = num1 + num2; char result = message.charat(sum); return result;

Parameteröverföring Anrop Varsitt uttryck av typen int En referens till en sträng Metodens deklaration char calc(int num1, int num2, String message){ int sum = num1 + num2; char result = message.charat(sum); return result; Lokala variabler Existerar bara medan metoden anropas

Parameteröverföring Varsitt uttryck av typen int En referens till en sträng Metodens deklaration char calc(int num1, int num2, String message){ int sum = num1 + num2; char result = message.charat(sum); return result; Tilldelas vid anropet

Parameteröverföring Varsitt uttryck av typen int En referens till en sträng Anrop ch = obj.calc(25, count, Hello ); Metodens deklaration char calc(int num1, int num2, String message){ int sum = num1 + num2; char result = message.charat(sum); return result;

Parameteröverföring Varsitt uttryck av typen int En referens till en sträng Anrop ch = obj.calc(25, count, Hello ); Metodens deklaration char calc(int num1, int num2, String message){ int sum = num1 + num2; char result = message.charat(sum); return result; Parameteröverföring i Java är by-value (ekvivalent med vanlig tilldelning) Primitiva datatyper kopieras Objektreferensen kopieras men inte objektet som refereras!

Returvärde - return Anrop ch = obj.calc(25, count, Hello ); Metodens deklaration Metodens deklarerade typ char calc(int num1, int num2, String message){ int sum = num1 + num2; char result = message.charat(sum); return result; Uttrycket efter return måste ha samma typ som metoden. Kompilatorn klagar om return fattas eller har fel typ. Man kan ha fler än en return-sats. Om metodens typ är void så krävs inte return (men return; är ok)

Metoder och signaturer Varje metod har en signatur (kännetecken) Signaturen bestäms av metodens klass namn parametrarnas typ och ordningsföljd Dessa metoder är alltså olika: remove(int index) remove(object o)

Metoder och signaturer Kompilatorn använder signaturen för att hitta rätt metod att anropa: PrintStream.print(boolean b) PrintStream.print(char c) PrintStream.print(char[] c)... Metodens returtyp ingår inte i signaturen: int foo(int x) long foo(int z) Kompilatorn kan inte avgöra vilken som avses i t ex foo(99);

Konstruktorn Konstruktorn anropas när instansen skapas Konstruktorn initierar och returnerar instansen, och har därför samma typ som klassen: public Die () { Man kan ha flera konstruktorer med olika parametrar public Die(int firstvalue) {facevalue = firstvalue;

Lincoln.java (igen) //******************************************************************** // Lincoln.java Author: Lewis/Loftus // Demonstrates the basic structure of a Java application. //******************************************************************** public class Lincoln { public void printquote() { System.out.println ("A quote by Abraham Lincoln:"); System.out.println ("Whatever you are, be a good one."); //----------------------------------------------------------------- // Prints a presidential quote. //----------------------------------------------------------------- public static void main (String[] args) { Lincoln abe = new Lincoln(); abe.printquote();

Metodanrop och kontrollflöde public Lincoln() { Lincoln abe = new Lincoln(); abe.printquote(); public void printquote() {

igen SLUT PÅ BILDER

rocket science INKAPSLING

Inkapsling Gränssnitt* Objekt Klient Metoder Data * Begreppet interface har en väldefinierad betydelse i Java

Åtkomstskydd till variabler och metoder Graden av inkapsling av ett objekt styrs med hjälp av åtkomstskydd: public (synlig för alla klasser) -(default) (synlig inom sitt package) protected (synlig i underklasser) private (synlig i den egna klassen) Skyddet gäller variabler, metoder och klasser Det är inte meningsfullt för lokala variabler

Dice.java (tärningar) public class Dice { private Die die1 = new Die(); private Die die2 = new Die(); public int roll() { return die1.roll() + die2.roll(); public int getvalue() { return die1.getfacevalue() + die2.getfacevalue();

Åtkomstskydd till variabler och metoder Klasser är nästan alltid public public class Person {... Instansvariabler oftast private eller protected private int errorcount; Metoder är oftast public eller protected public String getname() protected void setlazystate()

Åtkomstskydd till variabler och Läs av nedräkningen metoder Korrekt kod Endast läsning public int countdown; Ond kod Läsning och skrivning

Åtkomstskydd till variabler och metoder Korrekt kod Endast läsning private int countdown; public int getcountdown() Ond kod Läsning och skrivning Kompileringsfel!

Åtkomstskydd public (default) protected private Variabler Ingen inkapsling Inkapsling i package Inkapsling i klass och underklasser Inkapsling i klass Metoder Gränssnitt för alla klienter Stödfunktion i package Stödfunktion i klass och underklasser Stödfunktion i klass

Åtkomstskydd Börja restriktivt och öppna upp vid behov. public (default) protected private Variabler Ingen inkapsling Inkapsling i package Inkapsling i klass och underklasser Inkapsling i klass Metoder Gränssnitt för alla klienter Stödfunktion i package Stödfunktion i klass och underklasser Stödfunktion i klass

Åtkomstskydd till variabler och metoder Om en instansvariabel kan läsas utifrån är den också skrivbar! Såvida det inte är en konstant (public final) import java.awt.color;... setcolor(color.blue);... setcolor(color.gray);...

Metodanrop och kontrollflöde main dothis helpme obj.dothis(); helpme();