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



Relevanta dokument
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

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

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

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

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

Java, klasser, objekt (Skansholm: Kapitel 2)

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

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

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

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

Laboration 1 - Grunderna för OOP i Java

JAVA Mer om klasser och objektorientering

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

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

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 )

Lösningsförslag övning 2.

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

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

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016

Malmö högskola 2008/2009 CTS

2D1339 Programkonstruktion för F1, ht 2004

Lab5 för prgmedcl04 Grafik

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

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

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

Klasshierarkier - repetition

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

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

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

5. En metod som anropar sig själv a) får inte förekomma i Java-program b) kallas destruktiv c) kallas iterativ d) kallas rekursiv 6. Vilka värden har

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

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

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

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

DAT043 - Föreläsning 7

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

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.

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

Klasser och objekt. Henrik Johansson. August 20, 2008

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

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

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

ITK:P1 Föreläsning 4. Grafiska gränssnitt i Java. AWT-komponenter

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

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

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

KARLSTADS UNIVERSITET 12/8/09 informatik & datavetenskap Johan Öfverberg, Kerstin Andersson Laboration 4, ISG A04 och DVG A08 HT-09

Mer om grafiska komponenter. Händelsestyrda program

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

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt

Föreläsnings 11 - GUI, Händelsestyrda program, MVC

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

Föreläsning 3: Händelsestyrda program och användargränssnitt

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

Objekt och klasser - Introduktion

Föreläsning 13 Innehåll

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

Att bekanta dig med NetBeans programmeringsmiljö och skriva några enkla program med programmeringsspråket Java.

Objektorienterad programmering i Java

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

ID1004 Laboration 3, 5-6 November 2012

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

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

Att prova på en enkel Applet och att lära sig olika sätt att hämta data från tangentbordet. Du får även prova på att skapa din första riktiga klass.

Enkla variabler kontra referensvariabel

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

TENTAMEN OOP

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

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

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

System.out.println("Jaså du har "+ antaldollar + " stycken.");

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

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

Föreläsning 3-4 Innehåll

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

Objektorienterad Programmering DAT043. Föreläsning 5 29/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

TENTAMEN OOP

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Objektorienterad programmering i Java

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

DD1342 Programkonstruktion för F1,

Objekt och referenser

Konstruktion av klasser med klasser

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

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

Kopiering av objekt i Java

Objektorientering: Lagring och livstid

Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se

2 b) Följande finns definierat: import java.awt.*; public class Uppgift1b public static void main(string[] mupp) Color färg = Color.blue; Bil[] bilar

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

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Objektorienterad programmering

TUTORIAL: KLASSER & OBJEKT

Objektorienterad Programkonstruktion. Föreläsning 3 9 nov 2015

Transkript:

Kort om klasser och objekt En introduktion till GUI-programmering i Java Klasser En klass är en mall för hur man ska beskriva på något. Antag att vi har en klass, Bil. Den klassen innehåller en lista på egenskaper (attribut, variabler) som en bil har, till exempel marke modell arsmodell farg korstracka En klass innehåller ofta dessutom ett antal metoder. En metod är något som beskriver ett skeende (något utförs, något beräknas, något förändras ) I klassen Bil finns kanske metoderna korframat() backa() beraknaandrahandsvarde() beraknabensinatgang() Egenskaperna beskriver hur en bil ÄR Metoderna beskriver vad en bil GÖR eller vad som GÖRs med en bil. I varje klass som är definierad i ett javaprogram finns en speciell metod som har samma namn som klassen. Om vår klass Bil existerar i ett javaprogram så finns metoden Bil() Den här speciella metoden kallas konstruktor och används när man skriver kod som skapar objekt ur klassen. Nu ska vi lära oss vad ett objekt är: Objekt Jag beskriver min bil, och jag använder klassen Bil som mall: minbil marke: Morgan modell: PlusFour arsmodell: 1969 farg: British Racing Green miltal: 7350 minbil korframat(){ här finns en beskrivning på hur bilen gör när den går framåt } backa() { här finns en beskrivning på hur bilen gör när den backar } getandrahandsvarde(){ här beräknas andrahandvärdet } getbensinatgang(){ här beräknas bensinåtgång } Klassen Bil är en mall för hur jag ska beskriva en bil. När jag ger egenskaperna värden och definierar vad metoderna innehåller så är det ju ett speciellt exemplar av en bil jag talar om. Ett sådant speciellt exemplar kallas för ett objekt. minbil är ett objekt ur klassen Bil. I stället för ordet objekt ur en klass använder man ibland ordet instans av en klass. När man skapar ett objekt säger man ibland att man instansierar ett objekt. Egenskaperna (attributen, variablerna) i ett objekt kallas ofta instansvariabler. Nu: Beskriv ännu ett objekt av klassen Bil. Beskriv din (dröm)bil! dinbil - 1 -

Skapa ett objekt På föregående sida stod det att i alla klasser finns en speciell metod som används när objekt skapas i ett javaprogram. Den metoden kallas konstruktor och har samma namn som klassen. Om vi tänker oss att klassen Bil existerar och att vi vill skapa objektet minbil i ett javaprogram så skulle vi skriva så här: minbil = new Bil(); Man skapar (instansierar) alltså ett nytt objekt genom att anropa konstruktorn, och anropet föregås av ordet new. När detta är gjort existerar objektet minbil och kan användas. Referera till objekt Vi gav mitt objekt "namnet" minbil. Vi säger hellre referensen minbil, för vi använder detta ord när vi refererar till ett objekt, dess variabler och dess metoder. Antag att vi har målat minbil i silverfärg och att vi vill ändra värdet hos variabeln färg hos detta objekt. I ett javaprogram skriver vi så här: minbil.farg = "Silver"; Om vi vill backa emmasbil anropar vi naturligtvis metoden backa() för detta objekt: emmasbil.backa(); Skrivsättet referens.variabel eller referens.metod() kallas punktnotation. Om metoder Du har redan lagt märke till att alla metoder skrivs med parenteser efter metodnamnet, backa(), till exempel. Ibland är en metod definierad med parametrar. Då förväntar sig metoden att man skriver in något mellan parenteserna. Det man skriver inom parenteserna kallas argument. Om metoden backa() vore definierad med en heltalsparameter, så att den krävde ett heltalsargument, skulle den anropas med till exempel: emmasbil.backa(15); Argumentet påverkar naturligtvis metoden på något sätt, det beror på hur funktionen är definierad. ( Anropet emmasbil.backa(15) kanske får emmasbil att backa 15 meter exempelvis.) Vissa metoder är definierade så att den returnerar ett värde. I metoden getandrahandsvarde() sker en beräkning av bilens andrahandvärde. Beräkningen bygger nog på variablerna arsmodell och miltal. Metoden är säkert definierad så att det beräknade värdet returneras vid anrop. När en sådan funktion anropas måste vi "fånga upp" det returnerade värdet i en variabel, eller skriva ut värdet. Så här till exempel: eller begagnatpris = minbil.getandrahandsvarde(); System.out.println( Priset är + minbil.getandrahandsvarde() ); Metoder som returnerar ett värde kräver ofta ett argument. Metoden getbensinatgang()är troligen definierad så att man anger körsträckan (i kilometer) som argument och då returneras bensinåtgången i liter. Så här till exempel: literbensin = minbil.getbensinatgang(60); (Metoden returnerar hur många liter bensin som gick åt för att köra 60 km.) Metoder som bara får något att hända och som inte returnerar ett värde kallas för void-metoder. Metoder som returnerar ett värde kan man kalla icke-void-metoder. Ofta kallas sådana metoder funktioner. Metoder som returnerar ett värde inleds ofta med ordet get, t.ex getandrahandsvarde() - 2 -

Privata variabler och publika metoder Ovan ändrade vi färgen hos objektet minbil med satsen minbil.farg = "Silver"; Oftast väljer man att låta egenskaperna (attributen, instansvariablerna) i ett objekt vara privata, vilket innebär att man inte kan påverka dem, t.ex. ändra dess värde, "utanför" objektet. Men om man nu vill att det ska vara tillåtet att ändra värdet på variabeln farg "utifrån" så låter man oftast detta ske via en metod. Så här kanske: minbil.setfarg("silver"); Metoden setfarg()är då definierad så att variabeln farg tilldelas det värde som skrivs in som argument. Metoder som påverkar en variabel inne i objektet har ofta ett namn som börjar med set, t.ex setfarg() Detta är typiskt för objekt: Instansvariablerna brukar vara privata (de kan endast påverkas inuti det egna objektet) medan metoderna är publika (de kan användas även "utanför" objektet ifråga). Klassmetoder och klassvariabler För instansvariabler gäller att de finns i lika många upplagor som det finns objekt. Exempel: emmasbil.farg har värdet "Röd" johansbil.farg har värdet "Grön" majasbil.farg har värdet "Vit" För metoder gäller samma sak: T.ex. metoden getandrahandsvarde() ger olika resultat för emmasbil, johansbil och majasbil. I vissa klasser finns det något som kallas klassvariabler. En sådan tillhör klassen och inte de enskilda objekten. En klassvariabel finns i endast ett exemplar. I vissa klasser finns det något som kallas klassmetoder. En sådan tillhör klassen och inte de enskilda objekten. En klassmetod opererar inte på de enskilda objekten, utan är en fristående metod. En "vanlig" variabel eller metod refererar man som bekant till med objektets referens ("objektnamnet"). En klassvariabel eller klassmetod refererar man till med klassens namn. Exempel: I Java finns en klass som heter Math. Den har bara klassmetoder och några klassvariabler (egentligen konstanter) När man använder dessa använder man klassnamnet som referens, till exempel: omkrets = 2 * Math.PI * radie; ( omkrets = 2 π radie ) d = s * Math.sqrt(2); ( d = s 2 ) Arv Tänk dig att det finns en klass med ett antal egenskaper och metoder. Antag nu att vi behöver en klass som är nästan likadan men att den borde vara försedd med ytterligare några egenskaper och kanske någon mer metod. I Java finns en företeelse som heter arv. När en klass ärver från en annan klass betyder det att den ärvande klassen får samma uppsättning instansvariabler och metoder som klassen den ärver ifrån. Dessutom kan man lägga till ytterligare variabler och metoder i den nya klassen. Den ursprungliga klassen kallas superklass, och klassen som ärver kallas subklass. I språket Java uttrycks arv med ordet extends. Exempel: Om vi vill skapa klassen Sportbil kan vi utnyttja att vi redan har en klass som heter Bil och skriva så här: public class Sportbil extends Bil {... } Konventioner Klassnamn brukar skrivas med versal i början, t.ex. Bil Referenser till objekt, variabelnamn, metodnamn brukar skrivas med gemener. Om referensen eller namnet är sammansatt låter man det andra och tredje ledet få inledande versal, t.ex getbensinatgang() Använd endast tecknen A-Z, a-z, 0-9 och eventuellt understrykningstecknet, _. - 3 -

Nu är det dags att programmera Java! Java innehåller ett stort antal färdiga klasser. Om vi vill skapa ett program med grafiskt användargränssnitt (graphic user interface) (ett GUI-program) utnyttjar vi färdiga klasser för själva programfönstret samt för knappar, textrutor, kryssrutor med mera. Klasserna ligger lagrade i "paket", packages. Klasser som har med GUI att göra (knappar, kryssrutor och andra grafiska komponenter, samt färger, grafik med mera) finns i paketen java.awt och javax.swing. För att komma åt en klass i ett paket måste man importera paketet. Det gör man allra först i ett javaprogram Varje javaprogram har som bekant en main()-metod. Det är den som kör igång då vi startar programmet. Vi ska skriva ett program som först skapar ett objekt ur klassen JFrame. Sen låter vi objektet anropa några (void-)metoder. När metoden setvisible() anropas med argumentet true så visas objektet på skärmen! Här är programmet: 1 import javax.swing.*; 2 public class VisaJFrame { 3 public static void main( String args[] ) { 4 JFrame f ; 5 f = new JFrame(); 6 f.setsize(200,300); 7 f.setlocation(100,200); 8 f.setdefaultcloseoperation(jframe.exit_on_close); 9 f.setvisible(true); 10 } 11 } Skapa klassen VisaJFrame. Skriv in koden. Spara och provkör. Ett windowsfönster visas! Läs kommentarer till programmet noga: Rad 1. Vi importerar paketet javax.swing. Asterisken (*) betyder att vi har tillgång till alla klasser i paketet (men här behöver vi bara JFrame) 2. Ordet public betyder att klassen är synlig "utifrån" andra klasser 3. main()-metoden har du använt många gånger förr. Ordet public betyder att metoden kan köras "utifrån" 4. Du vet att man måste deklarera variabler ( t.ex. int i; ). På samma sätt måste man deklarera objekt! Här deklarerar vi att vi tänker använda ett objekt ur JFrame-klassen, som har referensen f 5. Här skapas (instansieras) objektet (instansen) f genom anrop av konstruktorn i klassen JFrame och med ordet new före konstruktornamnet. Satserna på rad 4 och 5 skrivs ofta ihop, så här: JFrame f = new JFrame(); 6. Objektet f.s metod setsize() anropas med parametrarna 200,300. Objektet har instansvariabler för bredd och höjd. Dessa får nu värdet 200 resp. 300, det vill säga fönstrets storlek bestäms här. 7. Objektet f.s metod setlocation() anropas med parametrarna 100,200. Objektet har instansvariabler för placering i x-led resp y-led. Dessa får nu värdet 100 resp. 200, det vill säga fönstrets placering bestäms här. 8. Den här metoden gör så att fönstret stängs på normalt sätt när man klickar kryssrutan uppe till höger. 9. Då metoden setvisible() anropas med argumentet true visas objektet (fönstret) på skärmen! Ändra argumenten i metoderna så att fönstret får annan storlek och annan placering, - 4 -

Låt oss nu skriva en egen klass, MinJFrame, som ärver från JFrame. MinFrame ska visa en etikett, ett JLabel-label-objekt. En etikett visar en fast text som inte kan ändras. Så här blir klassen: 1 import javax.swing.*; 2 import java.awt.*; 3 public class MinJFrame extends JFrame { 4 JLabel etikett; 5 public MinJFrame() { 6 etikett = new JLabel("Hej världen!"); 7 etikett.setforeground(color.red); 8 this.add(etikett); 9 } 10 } Skapa klassen MinJFrame. Skriv in koden och spara. Läs kommentarer: Rad 1. Import av swing-paketet (där finns klasserna JFrame och JLabel med flera) 2. Import av awt-paketet (sdär finns klassen Color med flera) 3. MinFrame ärver från JFrame (ärver variabler och metoder från JFrame ) 4. Deklarera JLabel-objektet etikett 5. Vi definierar konstruktorn. Den är public, det vill säga den kan anropas "utifrån", från andra klasser. 6 Här skapas ett objekt, med referensen etikett, ur klassen JLabel.. 7. Vi anropar etiketts void-metod setforeground() med argumentet Color.red (en konstant i klassen Color) Texten i labeln kommer att visas med röd färg. 8. När ett objekt refererar till sig själv används referensen this. Här anropas alltså JFrame-objektets voidmetod add(). Argumentet är etikett. Anropet this.add(etikett) placerar ut etikett på this, alltså på JFrame-objektet (fönstret som vi ser). Observera att MinJFrame inte är ett program. Det finns ju ingen main()-metod. Nu skriver vi ett program vars uppgift är att skapa och visa ett objekt ur klassen MinJFrame: 1 import java.awt.*; 2 public class Start { 3 public static void main(string args[]){ 4 MinJFrame f = new MinJFrame(); 5 f.setsize(200,200); 6 f.setlocation(200,300); 7 f.setlayout(new FlowLayout()); 8 f.setdefaultcloseoperation(minjframe.exit_on_close); 9 f.setvisible(true); 10 } 11 } Skapa klassen Start. Skriv in koden, spara och kör. Läs kommentarer: Rad 1. Import av awt-paketet (som har klassen FlowLayout som används på rad 7) 4. Här skapas (instansieras) objektet f genom anrop av konstruktorn i klassen MinJFrame med ordet new före konstruktornamnet. Koden i konstruktorn MinJFrame() exekveras, det vill säga objektet etikett skapas, får röd färg och läggs ut i fönstret. 7. Grafiska komponenter kan placeras ut på en yta på olika sätt beroende på vilken layout som är vald. Detta metodanrop ger flowlayout som vi kommer att använda tills vidare. Flowlayout innebär att komponenter placeras ut centrerade, uppifrån och ned. - 5 -

Klassen MinJFrame är inte ett program. Det finns ingen main()-metod. Låt oss skriva in en main()-metod i klassen. Dess uppgift ska vara att skapa och visa ett objekt ur klassen MinJFrame. En sådan main()-metod har vi ju redan, nämligen i klassen Start! Alltså: Markera main()-metoden i klassen Start och kopiera in den i klassen MinJFrame. Så här: import javax.swing.*; import java.awt.*; public class MinJFrame extends JFrame { JLabel etikett; public MinJFrame() { etikett = new JLabel("Hej världen!"); etikett.setforeground(color.red); this.add(etikett); } } public static void main( String args[] ) { MinJFrame f = new MinJFrame(); f.setsize(200,200); f.setlocation(200,300); f.setlayout(new FlowLayout()); f.setdefaultcloseoperation(minjframe.exit_on_close); f.setvisible(true); } Spara och exekvera MinJFrame. Med denna introduktion bör du kunna arbeta med kapitel 4 och därpå följande kapitel i Java Javisst! på ett meningsfullt sätt. Programmet MinFrame kan du ha som modell för många GUI-program. Repetition Förklara för dig själv vad nedanstående ord och begrepp betyder: När används orden Klass Instansiera new Objekt Punktnotation extends Attribut Privat this Instansvariabel Publik Metod Arv Konstruktor Superklass Void metod Subklass Funktion GUI Parameter Package/Paket Argument - 6 -