OOMPA 2D1359 Föreläsning 7

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

OOMPA 2D1359 Föreläsning 3

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

Java: kort introduktion. Trådar. Något om mutex, Dekkers algoritm och monitorer. Javas ("inbyggda monitor") synchronized.

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

Repetition av viktiga begrepp inom objektorienterad programmering

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

1 Repetition av viktiga begrepp inom objektorienterad programmering

..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 8 - del 2: Objektorienterad programmering - avancerat

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

DAT043 Objektorienterad Programmering

Objektorienterad programmering i Java

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

Polymorfi. Objektorienterad och komponentbaserad programmering

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

JAVA Mer om klasser och objektorientering

TENTAMEN OOP

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

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

Laboration 1: Figurer i hierarki

OOMPA 2D1359 Föreläsning 8

Tentamen OOP

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

OOP Tenta

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

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

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

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

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

Tentamen , Introduktion till Java, dtaa98, dtea53

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

OOP Objekt-orienterad programmering

Objektorienterad Programmering (TDDC77)

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

Lösningsförslag till tentamen i OOP, HI1027 Fredag 21 oktober 2011

TENTAMEN OOP

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

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

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

TENTAMEN OOP

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Outline. Objektorienterad Programmering (TDDC77) Åsidosättning. Signatur. Åsidosättning. Abstrakta klasser. Ahmed Rezine.

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

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

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

Att skriva till och läsa från terminalfönstret

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

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

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

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

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

1 Egna klasser. 1.1 En punkt-klass

Föreläsning 9: Arv och UML

Tentamen, EDAA20/EDA501 Programmering

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Konstruktion av klasser med klasser

Algoritmer. Två gränssnitt

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

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

Föreläsning 5-6 Innehåll

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

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

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

Klasshierarkier - repetition

Föreläsning 13 Innehåll

Målen med OOSU. Objektorienterad programmering. Objektorienterad programmering. Karlstads Universitet, Johan Öfverberg 1

Att använda Java SE JDK 6

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

Tentamen. Grundläggande programmering i Java A 5p, DTAA

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

OOP Omtenta

Språkkonventioner och redigering av tal.

Laboration 1 - Grunderna för OOP i Java

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

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

Lösningsförslag tentamen FYTA11 Java

Exempel på användning av arv: Geometriska figurer

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

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

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

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 Tentamen

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

TDDC77 Objektorienterad Programmering

DAT043 - Föreläsning 7

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

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

Klasshierarkier. Klasser kan byggas på redan definierade klasser

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

Upplägg. Introduktion. Examination. Mål. Konsekvenser. Java. Kursen heter konstruktion, ej design eller formgivning.

Transkript:

OOMPA 2D1359 Föreäsning 7 Objektorienterad Modeering Programmering och Anays Innehå Pragmatisk översikt av Java Java kort översikt Kasser: attribut, metoder, konstanter, arv Abstrakta kasser Interface Exempe - 1 - Java Java är konstruerat på SUN Första versionen säpptes 1995 Starkt typat Dvs det går att avgöra typkompatibiitet av aa uttryck i programmet vid kompieringstifäet. Virtue maskin (VM) som gör det maskinoberoende En specie VM per pattformstyp överbryggar oikheter i pattformarnas arkitektur Kassbibiotek språkkasser, stränghantering, grafik, gränssnitt, fönster, nät, händesehantering, processer, coections, mm Bindning ti WWW med appets och iknande Har fått sin huvudsakiga spridning via Internet Syntax som C, semantik och kasser mer som Smatak - 2-1

Virtue maskin käkod kompiera (javac) java bytekod kör (java) en virtue maskin per pattformstyp Pc VM Mac VM Unix VM - 3 - Java: mitt första "program" Skapa en fi med namnet MyFirstProgram.java Skriv föjande kod i fien: import java.io.*; pubic cass MyFirstProgram{ pubic static void main (String [] args) { System.out.printn("Mitt första program!"); - 4-2

... kompiera och kör Kompiera >javac MyFirstProgram.java Då genereras en körbar fi MyFirstProgram.cass Kör genom att starta Javas virtuea maskin med program/kassnamnet som argument >java MyFirstProgram Mitt första program! Regen är att kassens static void main-metod atid exekveras - 5 - Ett "Javaprograms" struktur Kaas också för medemmar En kass ser ut på föjande sätt pubic cass KassNamn extends SuperKassNamn{ attribut (instans- och kassvariaber) metoder (instans- och kassmetoder) konstruktörer En metod modifierare returtyp funktionsnamn(argument){ programsatser - 6-3

Konstruera kass Kassnamn = finamn En kass ska ha samma namn som den fi den paceras i Kassen Circe i fien Circe.java En fi kan innehåa fera kasser men bara en av dem kan vara dekarerad pubic, Det är den pubika kassens namn som motsvarar fiens Definition av kass, ma pubic cass KassNamn extends SuperKassNamn{ attribut (instans- och kassvariaber) metoder (instans- och kassmetoder) konstruktörer - 7 - Dekarera och instansiera Dekaration av instans KassNamn variabenamn; Instansiering variabenamn = new KassNamn(); aternativt, både dekaration och instansiering på en gång KassNamn variabenamn = new KassNamn(); - 8-4

Kompiera och köra Environmentvariabe Gör först (NADA) modue add java Hemma bör du expicit sätta path (se systemdokumentation) Om du har en egen java-kataog kan det vara idé att sätta environmentvariaben CLASSPATH setenv CLASSPATH $HOME/MyJAVA:. Kompiera med javac finamn javac Kassnamn.java om at går bra skapas då en fi med namnet Kassnamn.cass Kör med java kassnamn java Kassnamn - 9 - Exempe: Kass // Kassdefinition (utan extends medför subkass ti Object) pubic cass Circe {pubic doube x, y; attribut pubic doube r; pubic doube circumference(){return 2 * 3.14 * r; pubic doube area(){return 3.14 * r * r; metoder // för att testa skriver vi en static main-metod // som används då man kör från termina pubic static void main (String args[]) { //Vi dekarerar en temporär variabe Circe circe; // och instansierar circe = new Circe(); - 10-5

... forts... //vi ändrar några värden circe.x = 100; circe.y = 200; circe.r = 20; // vi gör några testutskrifter System.out.printn("Cirkens x-koordinat: " + circe.x + " och dess y-koordinat: " + circe.y); System.out.printn("den har en radie också: " + circe.r); System.out.printn( "genom anrop av metoden circumference: " + circe.circumference() + " fick vi omkretsen"); System.out.printn("och med area:" + circe.area() + " dess area"); - 11 -... och så sparar vi, kompierar och kör Spara Spara fien med samma namn som kassen med extension.java, dvs här Circe.java Kompiera javac Circe.java Skapar en fi Circe.cass Kör java Circe - 12-6

Exempe: Eka argument Skapa fi Echo.java (som ekar givna argument) pubic cass Echo { pubic static void main(string[] argv) { for(int i = 0; i < argv.ength; i++) System.out.print(argv[i] + " "); System.out.print("\n"); System.exit(0); Kompiera javac Echo.java Kör java Echo detta är input - 13 - Syntax sammanfattning kassdefinition superkass (kan uteämnas om Object ska vara superkass) vektor med strängar pubic cass Echo extends Object{ kassmetod pubic static void main(string[] argv) { "begin" med static for-oop for(int i = 0; i < argv.ength; i++) skriv ut på termina System.out.print(argv[i] + " "); System.out.print("\n"); System.exit(0); "end" metoden main beskriver huvudprogrammet (då man kör från termina) pubic anger att kass eer metod är synig för aa kasser, metoder och variaber måste atid dekareras med typ - 14 - ny rad avbryt programmet 7

Fera konstruktörer // Kassdefinition med fera konstruktörer pubic cass Circe { //... attribut som tidigare... Argumenten kan ha samma namn som instansvariaberna pubic Circe (doube x, doube y, doube r){ // men då måste vi referera instansvariaberna mha this.ivar this.x = x; this.y = y; this.r = r; definition av en konstruktör som tar en annan cirke som argument pubic Circe(Circe c){x = c.x; y = c.y; r = c.r; oika typer av argument ger oika metoder (överagring) pubic Circe(doube r){this.r = r;... - 15 - Exempe: ampa1 pubic cass Lamp1 { protected booean ison; pubic void turnon() {ison = true; pubic void turnoff() {ison = fase; pubic booean ison() {return ison; pubic void togge() {ison =!ison(); pubic static void main (String args[]) { Lamp1 amp; amp = new Lamp1(); System.out.printn(amp.isOn()); //fase amp.togge(); System.out.printn(amp.isOn()); - 16-8

Exempe: ampa2 pubic cass Lamp2 { // defutvärde för ison kan anges vid dekarationen protected booean ison = true; // medemsmetoderna som förut... pubic static void main (String args[]) { Lamp2 amp; amp = new Lamp2(); System.out.printn(amp2.isOn()); //true amp.togge(); System.out.printn(amp.isOn()); - 17 - Kassvariabe // Kassvariabe med static pubic cass Circe { kassvariabe pubic static doube defautr = 5; vi kan använda kassvariaben för att tex initiera instanvariaber pubic doube x = 0, y = 0, r = defautr; konstant (som ej kan ändras) med fina pubic static fina doube PI = 3.14159265358979323846; - 18-9

Exempe: ampa3 pubic cass Lamp3 { // statisk/kass variabe som deas av aa instanser private static booean defautonvaue = fase; protected booean ison = defautonvaue; //... metoderna som förut pubic static void main (String args[]) { Lamp3 amp; amp = new Lamp3(); System.out.printn(amp.isOn()); amp.togge(); System.out.printn(amp.isOn()); - 19 - Exempe: ampa4 (med def av konstruktörer) pubic cass Lamp4 { // medemsmetoderna som förut // Vi definierar "egna" konstruktörer pubic Lamp4() {ison = fase; pubic Lamp4(booean boo) {ison = boo; pubic static void main (String args[]) { Lamp4 amp1 = new Lamp4(); Lamp4 amp2 = new Lamp4(true); System.out.printn("Lampa 1: " + amp1.ison() + ", Lampa 2: " + amp2.ison()); amp1.togge(); amp2.togge(); System.out.printn("Lampa 1: " + amp1.ison() + ", Lampa 2: " + amp2.ison()); - 20-10

Konstruktör som använder annan konstruktör använd konstruktionen this(...) först i annan konstruktör // vi kan använda en av dom andra konstruktörerna pubic Circe(doube x, doube y){this(x, y, 3); pubic Circe(){this(12, 13); //test pubic static void main (String args[]) { Circe c1 = new Circe(); c1.r = 1000; Circe c2 = new Circe(c1); Circe c3 = new Circe(17, 18); Circe c4 = new Circe(500); - 21 - main (forts) // testutskrifter System.out.printn("c1 x: " + c1.x + " y: " + c1.y + " r: " + c1.r); System.out.printn("c2 x: " + c2.x + " y: " + c2.y + " r: " + c2.r); System.out.printn("c3 x: " + c3.x + " y: " + c3.y + " r: " + c3.r); System.out.printn("c4 x: " + c4.x + " y: " + c4.y + " r: " + c4.r); utmatningen bir: c1 x: 12 y: 13 r: 1000 c2 x: 12 y: 13 r: 1000 c3 x: 17 y: 18 r: 3 c4 x: 0 y: 0 r: 500-22 - 11

Exempe: ampa5 (en konstruktör använder en annan) pubic cass Lamp5 { //... pubic Lamp5() {this(fase); pubic Lamp5(booean ison) {this.ison = ison; pubic static void main (String args[]) { Lamp5 amp1 = new Lamp5(); Lamp5 amp2 = new Lamp5(true); System.out.printn("Lampa 1: " + amp1.ison() + ", Lampa 2: " + amp2.ison()); amp1.togge(); amp2.togge(); System.out.printn("Lampa 1: " + amp1.ison() + ", Lampa 2: " + amp2.ison()); - 23 - Exempe: Book pubic cass Book { private String tite, author, isbn; pubic Book(String name, String author, String isbn) { tite = name; this.author = author; this.isbn = isbn; pubic Book(String name) {this(name, ""); pubic Book(String name, String author) {this(name, author, ""); pubic String tostring() {return "Tite: " + tite + " Förf: " + author + " ISBN: " + isbn; pubic static void main (String args[]) { Book book1 = new Book("XXX with Java", "Budd"); Book book2 = new Book("Y Undistied"); System.out.printn("Bok 1: " + book1); System.out.printn("Bok 2: " + book2); - 24-12

Inkudera kasser från andra fier // inkudera kod från bibiotek med import import java.awt.point; importera Point pubic cass Figure { // med protected kan variaben enbart äsas av instanser // eer instanser av subkasser protected Point position = new Point(10, 20); // fast vi kan ge en pubik inspektor pubic Point position() {return position; // en annan metod kan anropa direkt pubic int x() {return position().x; this underförstått // eer med this.meddelande pubic int y() {return this.position().y; - 25 - testa pubic static void main (String args[]) { //Vi dekarerar en temporär variabe Figure f = new Figure(); System.out.printn("pos: " + f.position() + " x: " + f.x() + " y: " + f.y()); Resutat pos: java.awt.point[x=10,y=20] x: 10 y: 20-26 - 13

Subkass // arv med extends. Vi antar att vi skrivit kass Figure pubic cass Circe extends Figure{ pubic static void main (String[] args) { //Vi kan dekarera en variabe som tihörande typen Figure Figure v1 = new Figure(); //Vi kan dekarera variabe som tihörande typen Circe Circe v2 = new Circe(); //eer typen Figure Figure v3; // men ändå instansiera den som en Circe v3 = new Circe(); - 27 - och en test System.out.printn("pos: " + v1.position() + " x: " + v1.x() + " y: " + v1.y()); System.out.printn("pos: " + v2.position() + " x: " + v2.x() + " y: " + v2.y() + " area: " + v2.area()); // i v3 som är dekarerad som Figure kan vi inte använda area() // trots att den nu är en Circe System.out.printn("pos: " + v3.position() + " x: " + v3.x() + " y: " + v3.y()); // men med en typecast går det typecast System.out.printn(" area: " + ((Circe) v3).area()); // aternativt kan en metod med samma namn definieras i Figure // och då kommer ändå Circe:s area() användas vid v3.area() eftersom metoder binds dynamiskt Utmatning: pos: java.awt.point[x=10,y=20] x: 10 y: 20 pos: java.awt.point[x=12,y=13] x: 12 y: 13 area: 78.5398 pos: java.awt.point[x=12,y=13] x: 12 y: 13 area: 78.5398-28 - 14

Exempe: kassen Rect med subkass pubic cass Rect { //instansvariaber pubic int x1, y1, x2, y2; //konstruktörer pubic Rect(int x1, int y1, int x2, int y2) { this.x1 = x1; this.y1 = y1; this.x2 = x2; this.y2 = y2; pubic Rect(int width, int height) { this(0, 0, width, height); pubic Rect() { this(0, 0); - 29 -... // metoder pubic void move(int detax, int detay) { x1 += detax; x2 += detax; y1 += detay; y2 += detay; pubic booean isinside(int x, int y) { return ((x >= x1) && (x <= x2) && (y >= y1) && (y <= y2)); pubic Rect union(rect r) { return new Rect((this.x1 < r.x1)? this.x1 : r.x1, (this.y1 < r.y1)? this.y1 : r.y1, (this.x2 > r.x2)? this.x2 : r.x2, (this.y2 > r.y2)? this.y2 : r.y2); - 30-15

... pubic Rect intersection(rect r) { Rect resut = new Rect((this.x1 > r.x1)? this.x1 : r.x1, (this.y1 > r.y1)? this.y1 : r.y1, (this.x2 < r.x2)? this.x2 : r.x2, (this.y2 < r.y2)? this.y2 : r.y2); if (resut.x1 > resut.x2) { resut.x1 = resut.x2 = 0; if (resut.y1 > resut.y2) { resut.y1 = resut.y2 = 0; return resut; pubic String tostring() { return "[" + x1 + "," + y1 + "; " + x2 + "," + y2 + "]"; - 31 -... och en test (i en separat testkass)... pubic cass RectTest { pubic static void main(string[] args) { Rect r1 = new Rect(1, 1, 4, 4); Rect r2 = new Rect(2, 3, 5, 6); Rect u = r1.union(r2); Rect i = r2.intersection(r1); if (u.isinside(r2.x1, r2.y1)) System.out.printn("(" + r2.x1 + "," + r2.y1 + ") is inside the union"); System.out.printn(r1 + " union " + r2 + " = " + u); System.out.printn(r1 + " intersect " + r2 + " = " + i); - 32-16

... och subkassen DrawabeRect pubic cass DrawabeRect extends Rect { pubic DrawabeRect(int x1, int y1, int x2, int y2) { super(x1,y1,x2,y2); pubic void draw(java.awt.graphics g) { g.drawrect(x1, y1, (x2 - x1), (y2-y1)); - 33 - Kass Person med definition av printrutin import java.uti.date; pubic cass Person { pubic String name = ""; pubic Date dateofbirth; pubic Person(String name, Date date) {this.name = name; dateofbirth = date; pubic Person(String name) {this(name, new Date()); pubic int age(){ Date now = new Date(); return now.getyear() - dateofbirth.getyear(); // med tostring definierar vi hur objektet presenterar sig pubic String tostring(){ return "Namn: " + name + " född: " + dateofbirth; - 34-17

och så prövar vi ba tostring pubic static void main (String args[]) { Person p1 = new Person("Kae"); System.out.printn(p1); utmatning: Namn: Kae född: Mon Sep 21 15:45:01 MET 1998-35 - Med super kan vi använda metoder i superkass pubic cass Empoyee extends Person { // en statisk (kassvariabe) används för att räkna // anstäda (dvs egentigen anta instanser) static int numberofempoyers = 0; pubic int number; // Med super kommer vi åt superkassens definition pubic String tostring(){return super.tostring() + " anstäningsnummer: " + number; // för att använda superkassens konstruktör används också //super som ska stå först, med syntax: super(argument) pubic Empoyee(String name) {super(name); numberofempoyers = numberofempoyers + 1; number = numberofempoyers; - 36-18

Abstrakt kass eer metod pubic abstract cass ForceOverride { genom att dekarera en metod abstrakt kan vi tvinga subkasser att omdefiniera (annars kan dom inte instansieras) pubic abstract String myname(); pubic String tostring() {return "Namn: " + myname(); - 37 - I packages kan vi definiera kasser som hör ihop och senare kan importeras tisammans package MinaFigurer; //ska stå först import java.awt.point; pubic abstract cass Figure { protected Point position = new Point(10, 20); pubic Point position() {return position; pubic int x() {return this.position().x; Namnet på en package ska vara detsamma som den kataog fien befinner sig i viket ba medför att oika kasser i en viss package befinner sig i samma kataog - 38-19

andra kasser i samma package Circe.java Rectange.java package MinaFigurer; pubic cass Circe extends Figure{ private doube r = 10; pubic doube radius(){return r;; pubic void radius(doube newr){r = newr; package MinaFigurer; import java.awt.point; pubic cass Rectange extends Figure{ pubic Rectange(){ position = new Point(100, 200); - 39 - Interface Ett interface definierar ett gränssnitt Detta kan sedan användas av oika kasser i systemet Ett sätt att behåa statisk typning fast ändå tiåta att oika kasser dear på ett gränssnitt utan att tvinga dem att ha gemensam superkass eer införa mutipet arv pubic interface Drawabe{ pubic void setcoor(coor c); pubic void setposition(point p); pubic void draw(window dw); ett interface impementeras av en kass pubic cass VisuaComponent impements Drawabe{... - 40-20

... Interface pubic DrawabeRectange extends Rectange impements Drawabe{ private Coor c; private Point pos; pubic void setcoor(coor c) {this.c = c; pubic void setposition(point p){pos = p; pubic void draw(window dw){dw.drawrect(pos.x, pos.y, height, width); Ett interface kan utökas pubic interface Transformabe extends Scaabe, Rotateabe, Refectabe { eer innehåa konstanter interface Constants {static fina int Weekdays = 7; - 41 - TextIO (och undantagshantering) import java.io.*; cass ReadCharTest { pubic static void main(string[] args) { System.out.printn("Java!"); // Läs ett tecken innan programmet avsutas try { int ch = System.in.read(); catch (IOException e) { // Ignorera - 42-21

Med Ström Vi kan också äsa in mha en ström och buffert //Prompt System.out.print(">"); //Läs in BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); ine = reader.readline(); //Sen kan vi testa vad som matades in if (ine.equas("sut")) //...; - 43 - Exempe: en egen sumptasgenerator pubic cass Randomizer { static fina int m = 233280; static fina int a = 9301; static fina int c = 49297; int seed = 1; pubic Randomizer(int seed) { this.seed = seed; pubic foat randomfoat() { seed = (seed * a + c) % m; return (foat)seed/(foat)m; pubic int randomint(int max) { return Math.round(max * randomfoat()); pubic static void main(string[] args) { Randomizer r = new Randomizer((int)new java.uti.date().gettime()); for(int i = 0; i < 10; i++) System.out.printn(r.randomInt(100)); - 44-22

Exempe: Person med subkass Student konstant med fina pubic cass Person { pubic static fina String unspecified = "OSPECAT"; protected String name, address, phone; pubic Person(String name, String address, String phone) { this.name = name; this.address = address; this.phone = phone; pubic Person(String name) {this(name, unspecified); pubic Person(String name, String address) {this(name, address, unspecified); anropa annan konstruktör pubic String tostring() {return "Namn: " + name + " Address: " + address + " Te: " + phone; - 45 -... pubic static void main (String args[]) { Person pers1 = new Person("Kae", "Osquars Backe 2"); Person pers2 = new Person("Oe"); System.out.printn("Person 1: " + pers1); System.out.printn("Person 2: " + pers2); - 46-23

...och subkassen Student... pubic cass Student extends Person { protected String emai; Student subkass ti Person pubic Student(String name, String address, String phone, String emai) { använd superkassens super(name, address, phone); konstruktör this.emai = emai; pubic Student(String name, String address, String phone) { this(name, address, phone, unspecified); pubic Student(String name) {this(name, unspecified); pubic Student(String name, String address) {this(name, address, unspecified); använd superkassens tostring() pubic String tostring() {return super.tostring() + " Emai: " + emai; - 47 -... pubic static void main (String args[]) { Student stud1 = new Student("Kae", "Osquars Backe 2"); Student stud2 = new Student("Oe"); Student stud3 = new Student("Kae", "Osquars Backe 2", "1234", "Kae@nada.kth.se"); System.out.printn("Student 1: " + stud1); System.out.printn("Student 2: " + stud2); System.out.printn("Student 3: " + stud3); - 48-24

Exempe: Enkeänkad ista // en enkeänkad ista med metoder för att undersöka om objektet är sist, stoppa in änk samt ge avstånd ti sutet cass LinkabeObject{ pubic LinkabeObject ink; pubic Object vaue; pubic String tostring() {return vaue.tostring(); pubic LinkabeObject() {this(nu); pubic LinkabeObject(Object vaue) { ink = nu; this.vaue = vaue; pubic booean atend(){return ink == nu; pubic void insert(linkabeobject next) { ink = next; pubic int distancetoend(){ return atend()? 0 : 1 + ink.distancetoend(); - 49 - test pubic cass LinkabeTestB{ pubic static void main (String args[]) { LinkabeObject root = new LinkabeObject("ROOT"); LinkabeObject 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 LinkabeObject newlinkabe = new LinkabeObject(new Integer(i)); current.insert(newlinkabe); current = newlinkabe; current = root; whie(current!= nu) { System.out.printn(current + " distance to end: " + current.distancetoend()); current = current.ink; - 50-25

Exempe: Dubbeänkad ista cass DoubeLinkabeObject{ pubic DoubeLinkabeObject next, prev; pubic Object vaue; pubic String tostring() {return vaue.tostring(); pubic DoubeLinkabeObject() {this(nu); pubic DoubeLinkabeObject(Object vaue) {next = prev = this; this.vaue = vaue; pubic void insert(doubelinkabeobject adoubelinkabeobject) { this.next.prev = adoubelinkabeobject; adoubelinkabeobject.next = this.next; adoubelinkabeobject.prev = this; next = adoubelinkabeobject; pubic int distanceto(doubelinkabeobject adoubelinkabeobject){ return this == adoubelinkabeobject? 0 : 1 + next.distanceto(adoubelinkabeobject); pubic int ength(){return 1 + next.distanceto(this); - 51 - pubic cass DoubeLinkabeTest{ pubic static void main (String args[]) { DoubeLinkabeObject root = new DoubeLinkabeObject("ROOT"); DoubeLinkabeObject 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 DoubeLinkabeObject newlinkabe = new DoubeLinkabeObject(new Integer( i)); current.insert(newlinkabe); current = newlinkabe; current = root.next; whie(current!= root) { System.out.printn(current + " distance to root: " + current.distanceto(root)); current = current.next; System.out.printn( "ength: " + root.ength()); - 52-26