Next previous Föreläsning ii - Mer om Java bla this och konstruktorer Av Björn Eiderbäck Adress: Rum 1641, 6tr NADA Osquars Backe.

Slides:



Advertisements
Liknande presentationer
Next previous Björn Eiderbäck NADA, KTH Innehåll Klassdiagram i mer detalj Visibility och modifierare (vilka.
Advertisements

Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
Array Skriv ett program som frågar följande: ”Hur många tal vill du mata in?” användaren matat in ett tal t.ex n. då frågar programmet n ggr följande.
Klasser och objekt.
Föreläsning 3 Lista Array/länkad lista Lista implementerad som länkad lista Inlämningsuppgifter.
Next previous Internetprogrammering 2000 Internetprogrammering 2000 Föreläsning 10 Distribuerad programmering med Javas RMI, Remote Method Invocation.
Next previous Innehåll Klassen URL Arbeta med URLer, exempel Referenser Harold,”Java Network Programming”, Elliotte Harold Hall, "CORE Web Programming"
Klassarv och inkapsling
OOP Objekt-orienterad programmering
Objektorienterad utveckling Lektion 2 Objekt, överlagring, överskuggning, klasshierarkier och dynamisk bindning KTH Peter Mozelius.
Metoder i java Det finns två typer av metoder i java
2D1311 Programmeringsteknik med PBL Föreläsning 5 Skolan för Datavetenskap och kommunikation.
Arv.
Välkommen Vahid Mosavat
Programmeringsteknik för K och Media
Programmeringsteknik för K och Media
Föreläsning 13 Allt om tentan. Sistaminutenhjälp: På fredag 17 december kl 12 sitter Linda i kemi-fiket och svarar på frågor.
Programkodens uppbyggnad
Att programmera i språket Java
Next previous Lite mer om synkronisering. Mer om Java och trådar. RMI Objektorienterad Realtidsprogrammering 2000 Objektorienterad Realtidsprogrammering.
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
Next previous Innehåll Klassen URL Arbeta med URLer, exempel Speciella referenser (som används i här) Harold, dvs kursboken ”Java Network Programming”
Java Nätverks API URL sockets.
Next previous Introduktion till Java Av Björn Eiderbäck Adress: Rum 1641, 6tr NADA Osquars Backe 2 Tel: OOMPAE 2000.
1 Föreläsning 6 Klass Object, instans av klass public/private Klassvariabler och klassmetoder.
Exception Handling Kapitel 9. Agenda Exceptions try, throw and catch Skapa en egen exception-klass Multipla throw / catch Slänga vidare en exception Olika.
Föreläsning 11 Arrayer.
Objektorienterad programmering i Java
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Variabler: Datatyp - grundläggande : int, double, char, boolean eller
Programmering i C# 3. Klasser.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Klasser och objekt Klasser, objekt och instansvariabler
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Metodik för problemlösning Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar.
Objektorienterad Modellering Programmering och Analys
Arv.
Programmeringsteknik för Media1 & K1
1 Föreläsning 7 Repetition Instansvariabler och klassvariabler Klassmetoder och Instansmetoder.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
Föreläsning 8 Arv och abstrakta klasser. Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen ( extends.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
Riktade listor i C och Java Lösning till gruppövning 1.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Föreläsning 10 Stränghantering.
Next previous RMI, Remote Method Invocation Om du har boken av Marty Hall, läs avsnitt 15.8 För fler exempel se:
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Föreläsning 9 Gränssnitt. Super Super kan användas till anrop av en omdefinierad metod Super kan användas till anrop av konstruktorer i superklassen Super.
TILLÄMPAD DATALOGI (TILDA) Övning 3
Föreläsning 12 Om slutprovet. Repetition –deklaration av variabler –skapande av objekt (instansiering) –Vektorer och Vector-klassen –Klasser –Instans-/klassvariabler.
Föreläsning 4 Klasser Och Objekt.
PROGRAMMERINGSTEKNIK Övningsgrupp 3 Marcus Hjelm
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
Class VattenKraft{ public static void main(String[] args){ int num=150; int i, totflöde, maxflöde; int[] fall = new int[num]; //vattenflödet i vattenfallen.
Köer -- Kapitel 16. Principen med en kö Köer är FIFO datastrukturer  First In – First Out  enqueue() Lägg till data i kön (först)  dequeue() Hämta.
TILLÄMPAD DATALOGI (TILDA) Övningsgrupp 2 Marcus Hjelm
TILLÄMPAD DATALOGI (TILDA) Övning 1 Marcus Hjelm
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
Övning 3. Repetition Metoder class RepetitionMetoder { public static void main(String [] args) double längd = 2.0; double bredd = 1.0; double area =
TILLÄMPAD DATALOGI (TILDA) Övning 2
TILLÄMPAD DATALOGI (TILDA) Övning 2
Föreläsning 5 Objekt Klasser Konstruktorer Metoder Minnesbilder av objekt.
Programmeringsteknik för K och Media
Föreläsning 5 Klasser och instanser
Föreläsning 7 Repetition Sammansatta datatyper –vektor (hakvektor, array) –matris.
OOP - teori1 OOP del II– Föreläsning 5 vecka 6. OOP - teori2 Klasser Substantiv i singularis stavat med stor bokstav till exempel Human Dog Account Circle.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
Presentationens avskrift:

next previous Föreläsning ii - Mer om Java bla this och konstruktorer Av Björn Eiderbäck Adress: Rum 1641, 6tr NADA Osquars Backe 2 Tel: OOMPAE 2000

previous next 2 Introduktion Java: del 2 Exempel: lampa Light1 # isOn : boolean + turnOn() : void + turnOff() : void + isOn() : boolean + toggle() : void + main(String []) : void onoff toggle

previous next 3 Introduktion Java: del 2 … 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();} public static void main (String args[]) { 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 4 Introduktion Java: del 2 Exempel: lampa2, med start i on-läge onoff toggle

previous next 5 Introduktion Java: del 2... Light2, Javakod public class Light2 { // defultvärde för isOn kan anges vid deklarationen protected boolean isOn = true; // medlemsmetoderna som förut... public static void main (String args[]) { Light2 light; light = new Light2(); System.out.println(light2.isOn()); //true light.toggle(); System.out.println(light.isOn()); //false }

previous next 6 Introduktion Java: del 2 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 = ; }

previous next 7 Introduktion Java: del 2 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 public static void main (String args[]) { Light3 light; light = new Light3(); System.out.println(light.isOn()); light.toggle(); System.out.println(light.isOn()); }

previous next 8 Introduktion Java: del 2 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 9 Introduktion Java: del 2 … 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 10 Introduktion Java: del 2 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 11 Introduktion Java: del 2 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 12 Introduktion Java: del 2 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 13 Introduktion Java: del 2 … 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 14 Introduktion Java: del 2 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;} public static void main (String args[]) { 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 15 Introduktion Java: del 2 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 16 Introduktion Java: del 2 Exempel: Light5 (en konstruktor använder en annan) public class Light5 { /* … */ public Light5() {this(false);} public Light5(boolean isOn) {this.isOn = isOn;} public static void main (String args[]) { 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 17 Introduktion Java: del 2 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;} public static void main (String args[]) { 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 18 Introduktion Java: del 2 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 19 Introduktion Java: del 2... 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 20 Introduktion Java: del 2 Inkludera klasser från andra filer // inkludera kod från bibliotek med import import java.awt.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;} importera Point

previous next 21 Introduktion Java: del 2 testa public static void main (String args[]) { //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 22 Introduktion Java: del 2 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 23 Introduktion Java: del 2 … test public class LinkableTestB{ public static void main (String args[]) { 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 24 Introduktion Java: del 2 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 25 Introduktion Java: del 2 … public class DoubleLinkableTest{ public static void main (String args[]) { 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()); }