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

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

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

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

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

OOMPA 2D1359 Föreläsning 7

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

..arv Arv kan delas in i två huvudtyper Arv för specifikation dvs arv av protokoll Arv av kod dvs arv av beteende och struktur. 2203$ ) UHOlVQLQJ.

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

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

Tentamen OOP

Föreläsning 13 Innehåll

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

Classes och Interfaces, Objects och References, Initialization

JAVA Mer om klasser och objektorientering

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

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

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

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

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

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

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

Malmö högskola 2008/2009 CTS

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

Laboration 1 - Grunderna för OOP i Java

Lösningsförslag övning 2.

TENTAMEN OOP

Laboration 1: Figurer i hierarki

Arrayer. results

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

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

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

Objektorienterad programmering i Java

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

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

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

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Modeller, Objekt och Klasser

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

TENTAMEN OOP

DAT043 - Föreläsning 7

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

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

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

Java, klasser, objekt (Skansholm: Kapitel 2)

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

Objektorienterad Programmering DAT043

TDDD78 Viktiga begrepp, del 2

TENTAMEN OOP

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

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

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

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

Objektorienterad Programmering (TDDC77)

Enkla variabler kontra referensvariabel

OOP Objekt-orienterad programmering

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

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

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

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

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

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

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

Tentamen. Lösningsförslag

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

Objektorienterad Programmering (TDDC77)

Konstruktion av klasser med klasser

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 )

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Lösningsförslag. 1 Lösningsförslag. Uppgift 1

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

Lösningar till tentamen i EDAF25

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

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.

(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

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

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

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

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

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

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

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

Mer om klasser och objekt

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

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

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

TDDD78 Objektorientering i Java, del 4. Hur vet man om två objekt är lika? Hur undviker man objekt och när?

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

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

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

Klasser och objekt. Henrik Johansson. August 20, 2008

OOMPA 2D1359 Föreläsning 3

OOMPA 2D1359 Föreläsning 8

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

Transkript:

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer Av Björn Eiderbäck Email: bjorne@nada.kth.se Adress: Rum 1641, 6tr NADA Osquars Backe 2 Tel: 7906277 previous next Exempel: lampa Light1 # ison : boolean + turnon() : void + turnoff() : void + ison() : boolean + toggle() : void + main(string []) : void off toggle toggle on previous next 2 Björn Eiderbäck 1999 1

Light1, Javakod public class Light1 { protected boolean ison; public void turnon() {ison = true; public void turnoff() {ison = false; public boolean ison() {return ison; public void toggle() {ison =!ison(); Light1 light; light = new Light1(); System.out.println(light.isOn()); //ska ge false light.toggle(); System.out.println(light.isOn()); // ska ge true previous next 3 Exempel: lampa2, med start i on-läge off toggle toggle on previous next 4 Björn Eiderbäck 1999 2

... Light2, Javakod public class Light2 { // defultvärde för ison kan anges vid deklarationen protected boolean ison = true; // medlemsmetoderna som förut... Light2 light; light = new Light2(); System.out.println(light2.isOn()); //true light.toggle(); System.out.println(light.isOn()); //false previous next 5 Klassvariabel // Klassvariabel anges med static public class Circle { klassvariabel public static double defaultr = 5; vi kan använda klassvariabeln för att tex initiera instanvariabler public double x = 0, y = 0, r = defaultr; konstant (som ej kan ändras) med final public static final double PI = 3.14159265358979323846; previous next 6 Björn Eiderbäck 1999 3

Exempel: Light3 public class Light3 { /* statisk/klass variabel som delas av alla instanser */ private static boolean defaultonvalue = false; protected boolean ison = defaultonvalue; //... metoderna som förut Light3 light; light = new Light3(); System.out.println(light.isOn()); light.toggle(); System.out.println(light.isOn()); previous next 7 Konstruktor En konstruktör är en speciell rutin som instansierar en klass I Java har en konstruktor samma namn som klassen Exempel: konstruktorn för klassen Circle heter Circle() och objekt av klassen skapas med hjälp av den på följande sätt Circle c1 = new Circle(); En konstruktör skrivs på samma sätt som en metod public Circle() { Observera att i Java anges inget returvärde för en konstruktor utan detta är alltid (underförstått) en instans av aktuell klass Detta gör också att vi syntaktiskt kan skilja på konstruktorer och andra metoder previous next 8 Björn Eiderbäck 1999 4

konstruktor Skriver vi ingen konstruktor för klassen så låter Java oss ändå använda en konstruktor utan argument för klassen Det finns dock vissa undantag som vi diskuterar nedan under diskussion om flera konstruktorer Varför skriva egen konstruktor? Jo, vi vill kontrollera hur ett objekt skapas och se till att dom rätta initieringarna görs previous next 9 Exempel: konstruktor för Circle som initierar instansvariabler Om vi definierar följande konstruktor public Circle (){ x = 10; y = 20; r = (x + y) / 2; Instansierar Circle c = new Circle(); Så får c.x värdet 10, c.y värdet 20 och c.r värdet 15 i samband med instansieringen previous next 10 Björn Eiderbäck 1999 5

Pseudovariabeln this För att referera aktuell instans så kan psedouvariabeln this användas Om vi tex vill skicka aktuellt objekt som argument vid en viss medelandesändning gör vi i stil med följande mottagare.meddelande(this); exempelvis vid utmatning på terminalen System.out.println(this) Om vi explicit vill förtydliga att ett meddelande skickas till aktuellt objekt kan vi skriva this.meddelande(); Vi kan också explicit referera objketets instansvariabler, tex this.r previous next 11 Flera konstruktorer Man kan skapa flera konstruktorer för en viss klass Konstruktörerna skiljer sig åt genom olika signatur, dvs olika antal argument eller olika typ på argumenten Tex är följande olika (samtidiga) konstruktorer möjliga public Klass() { public Klass(T a) { public Klass(X a) { public Klass(A a, B b) { public Klass(A a, C c) { Vilken konstruktor som används beror på vilka argument som ges vid instansieringen previous next 12 Björn Eiderbäck 1999 6

Flera konstruktorer // Klassdefinition med flera konstruktorer public class Circle { //... attribut som tidigare... Argumenten kan ha samma namn som instansvariablerna public Circle (double x, double y, double r){ // men då måste vi referera instansvariablerna mha this.ivar this.x = x; this.y = y; this.r = r; definition av en konstruktor som tar en annan cirkel som argument public Circle(Circle c){x = c.x; y = c.y; r = c.r; olika typer av argument ger olika metoder (överlagring) public Circle(double r){this.r = r;... previous next 13 Exempel: Light4 (med def av konstruktorer) public class Light4 { /* medlemsmetoderna som förut */ // Vi definierar "egna" konstruktorer public Light4() {ison = false; public Light4(boolean bool) {ison = bool; Light4 light1 = new Light4(); Light4 light2 = new Light4(true); System.out.println("Lampa 1: " + light1.ison() + ", Lampa 2: " + light2.ison()); light1.toggle(); light2.toggle(); System.out.println("Lampa 1: " + light1.ison() + ", Lampa 2: " + light2.ison()); previous next 14 Björn Eiderbäck 1999 7

Konstruktionen this( ) för att anropa annan konstruktor Ibland har man flera konstruktörer i en klass I många fall vill man då anropa en konstruktor från en annan tex skulle Light4() kunna utnyttja Light4(boolean bool)i föregående exempel Föredelen är att man bättre isolerar ett visst beteende till ett ställe. Om man senare behöver ändra något så görs det på så få ställen som möjligt I java kan man göra detta genom att använda konstruktionen this( ), tex skulle vi kunna skriva om public Light4() på följande sätt: public Light4() {this(false); Rätt konstruktor anropas beroende av antal argument och deras typ. OBSERVERA! this( ) kan bara användas en gång per konstruktor och måste stå först! previous next 15 Exempel: Light5 (en konstruktor använder en annan) public class Light5 { /* */ public Light5() {this(false); public Light5(boolean ison) {this.ison = ison; Light5 light1 = new Light5(); Light5 light2 = new Light5(true); System.out.println("Lampa 1: " + light1.ison() + ", Lampa 2: " + light2.ison()); light1.toggle(); light2.toggle(); System.out.println("Lampa 1: " + light1.ison() + ", Lampa 2: " + light2.ison()); previous next 16 Björn Eiderbäck 1999 8

Exempel: Book public class Book { protected String title, author, isbn; public Book(String name, String author, String isbn) { title = name; this.author = author; this.isbn = isbn; public Book(String name) {this(name, ""); public Book(String name, String author){ this(name, author, ""); public String tostring() {return "Titel: " + title + " Förf: " + author + " ISBN: " + isbn; Book book1 = new Book("XXX with Java", "Budd"); Book book2 = new Book("Y Undistilled"); System.out.println("Bok 1: " + book1); System.out.println("Bok 2: " + book2); previous next 17 Konstruktörer: några saker man bör vara medveten om Skriver man en egen konstruktör som tar argument kan man inte längre använda den från början givna konstruktören utan argument, dvs skriver man public Klass(Typ t) { Så kan man inte instansiera på följande sätt Klass k = new Klass(); Om man fortfarande vill använda en konstruktör utan argument så måste man explicit implementera en sådan i stil med public Klass() { previous next 18 Björn Eiderbäck 1999 9

... Observera att om en superklass implementerar en konstruktör med argument men ingen utan så kan inte heller subklasser använda defaultkonstruktören utan argument, utan måste om dom så önskar explicit implementera en konstruktör utan argument Det finns ett problem till och det är att en subklass konstruktör implicit anropar super-klassens konstruktör om inte this( ) eller super( ) explicit används previous next 19 Inkludera klasser från andra filer // inkludera kod från bibliotek med import import java.awt.point; importera Point public class Figure { /* med protected kan variabeln enbart läsas av instanser eller instanser av subklasser */ protected Point position = new Point(10, 20); // fast vi kan ge en publik inspektor public Point position() {return position; // en annan metod kan anropa direkt public int x() {return position().x; // eller med this.meddelande public int y() {return this.position().y; previous next 20 Björn Eiderbäck 1999 10

testa //Vi deklarerar en temporär variabel Figure f = new Figure(); System.out.println("pos: " + f.position() + " x: " + f.x() + " y: " + f.y()); Resultat pos: java.awt.point[x=10,y=20] x: 10 y: 20 previous next 21 Javaexempel : Enkellänkad lista /* en enkellänkad lista med metoder för att undersöka om objektet är sist, stoppa in länk samt ge avstånd till slutet */ class LinkableObject{ public LinkableObject link; public Object value; public String tostring() {return value.tostring(); public LinkableObject() {this(null); public LinkableObject(Object value) { link = null; this.value = value; public boolean atend(){return link == null; public void insert(linkableobject next) { link = next; public int distancetoend(){ return atend()? 0 : 1 + link.distancetoend(); previous next 22 Björn Eiderbäck 1999 11

test public class LinkableTestB{ LinkableObject root = new LinkableObject("ROOT"); LinkableObject current; current = root; for(int i=1; i < 5; i++) { // För att kunna använda en int som ett Object // konstruerar vi en Integer LinkableObject newlinkable = new LinkableObject(new Integer(i)); current.insert(newlinkable); current = newlinkable; current = root; while(current!= null) { System.out.println( current + " distance to end: " + current.distancetoend()); current = current.link; previous next 23 Javaexempel : Dubbellänkad lista class DoubleLinkableObject{ public DoubleLinkableObject next, prev; public Object value; public String tostring() {return value.tostring(); public DoubleLinkableObject() {this(null); public DoubleLinkableObject(Object value){ next = prev = this; this.value = value; public void insert(doublelinkableobject adoublelinkableobject) { this.next.prev = adoublelinkableobject; adoublelinkableobject.next = this.next; adoublelinkableobject.prev = this; next = adoublelinkableobject; public int distanceto(doublelinkableobject adoublelinkableobject){ return this == adoublelinkableobject? 0 : 1 + next.distanceto(adoublelinkableobject); public int length(){return 1 + next.distanceto(this); previous next 24 Björn Eiderbäck 1999 12

public class DoubleLinkableTest{ DoubleLinkableObject root = new DoubleLinkableObject("ROOT"); DoubleLinkableObject current; current = root; for(int i=1; i < 5; i++) { // För att kunna använda en int som ett Object // konstruerar vi en Integer DoubleLinkableObject newlinkable = new DoubleLinkableObject(new Integer( i)); current.insert(newlinkable); current = newlinkable; current = root.next; while(current!= root) { System.out.println(current + " distance to root: " + current.distanceto(root)); current = current.next; System.out.println( "length: " + root.length()); previous next 25 Björn Eiderbäck 1999 13