Handboken / Programmering / Java

Storlek: px
Starta visningen från sidan:

Download "Handboken / Programmering / Java"

Transkript

1 Handboken / Programmering / Java I denna guide ska jag försöka hålla mig kortfattat eftersom Java är ett så pass stort ämne. Det ska inte bli någon bok och allt kommer inte att gås igenom 100-procentigt. Det blir många exempel eftersom det är ett bra sätt att uttrycka mycket med få ord. Jag tror och hoppas att det ska gå att hänga med bra även om man inte är bekant med programmering sedan tidigare. Jag har för avsikt att följa detta förslag till svenska Javaterminologi. Om jag misslyckas med detta på något ställe får du gärna upplysa mig om detta. Ursprung Java började utvecklas av SUN under ledning av James Gosling runt Det var tänkt att Java, eller Oak som det först kallades, skulle användas i olika typer av elektronik, till exempel en brödrost. Vad är Java för typ av språk? Java är ett objektorienterat, statiskt typat, imperativt, kompilerat (eller semikompilerat) och plattformsoberoende programmeringsspråk. Objektorienterat Java är strikt objektorienterat, det är inte påklistrat i efterhand som fallet är med PHP och Perl. Java är från grunden utvecklat i enlighet med det objektorienterade tänkandet. Statiskt typat och imperativt Java är liksom C++ statiskt typat och imperativt. Att Java är statiskt typat (jo, det är svengelska) innebär i praktiken att variabler måste deklareras innan de används och att Javatolken kommer att protestera om du försöker associera till exempel ett decimaltal till en heltalsvariabel. Det finns mycket mer att orda om skillnaderna mellan statiskt och dynamiskt typade språk men det gräver vi inte djupare i just nu. Plattformsoberoende och kompilerat Java är kompilerat på så vis att din Javakod måste kompileras innan du exekverar programmet. Det kompileras dock inte till maskinkod utan till ett mellansteg, bytekod som i sin tur interpreteras av en Javatolk (JVM, Java Virtual Machine). Detta har den uppenbara fördelen att ditt Javaprogram kan köras i de operativsystem som har en Javatolk portad till sig. Eftersom det finns en JVM portad till alla vanligt förekommande operativsystem kan man möjligen hävda att Java är plattformsoberoende. Java på webbservern - utvecklingsmiljö och kompilering För tillfället körs Java på webbservern. Du kan kontrollera själv vilken version som körs: webbservern.se :: - 1 -

2 Emacs är den rekommenderade utvecklingsmiljön eftersom det lämpar sig väl att köras via SSH över nätverk. Den som vill kan även pröva Eclipse. Grunderna i Java Ett komplett program Innan vi dyker in bland variabler och allt annat tar vi ett komplett, enkelt men framför allt traditionsenligt Javaprogramexempel. Det kan vara bra att känna till strukturen för ett komplett Javaprogram om du vill provköra någon kodsnutt nedan. Byt då bara ut innehållet i main-metoden. class Hello { public static void main(string[] args) { System.out.println("Hello World!"); Om du skulle vilja provköra exemplet skriver du in de fem raderna i en fil. Sparar den som ren text och ger den filnamnet Hello.java. För att kompilera Hello.java och sedan köra programmet skriver du: javac Hello.java java Hello Variabler och datatyper Java är som sagt statiskt typat och när du skapar en variabel ska du ange vilken datatyp du vill ha. Det beror förstås på vad för data du vill associera till din variabel. Nedan har du en tabell med vilka du har att välja på: Typ Beskrivning byte heltal, [ ] short heltal, [ ] int heltal, [ ] long heltal, [ ] float double boolean char flyttal, [-3.4E38-3.4E38] flyttal, [-1.7E E308] boolsk variabel [antingen true eller false] tecken (lagras som Unicode, 16 bitar) webbservern.se :: - 2 -

3 Det går även att tilldela variabeln ett värde direkt vid deklareringen. Vi tar några exempel (där det också framgår hur man kommenterar och avslutar satser): byte fingers; //Antalet fingrar short result1, result2; int hair = ; long gatesmoney, distancetomooninmillimetres = ; float average, height; boolean ismore = false, isempty = true; char favouriteletter = J, tab = \t ; Det kan även vara bra att veta att det går att till explicit omvandla en variabels datatyp till en annan. Man skriver på följande vis för att omvandla från en integer till en float: int a = 10; float flyttal = (float) a // flyttal = 10.0; Lite aritmetik Java är en kraftfull miniräknare och det går att räkna hejvilt. Dessa aritmetiska operatorer finns att tillgå. Operator Betydelse + Addition - Subtraktion / Division * Multiplikation % Modulus Det mesta fungerar som man kan förvänta sig och det går bra att använda parenteser för att specificera evalueringsordningen (precedensen med ett fint ord). Exempel är bra. double average, quantity = 50, total = 547.6; average = total / quantity; System.out.println("Per styck: " + average); // Java skriver ut: Per styck: I förbigående passar vi på att notera att utskrifter sker via System.out.println. Modulusoperatorn kanske du inte stött på tidigare. Den ger dig resten vid en heltalsdivision. Exempelvis är "11 modulus 6" lika med 5. int a = 11 % 6; // a = 5 webbservern.se :: - 3 -

4 Det finns ett gäng operatorer till men de kan du läsa om på annat håll. Lägg även märke till deras inbördes prioritetsordning. Strängar Siffror i all ära men strängar, en bunt alfanumeriska tecken alltså, är också bra att kunna hantera. Strängar är inte en vanlig datatyp i Java, det är en instans av String-klassen. Det där med objektorienterad programmering har vi inte kommit till ännu så du har inte missat nåt om "instans" känns som ett främmande ord. Vi tar ett exempel som vanligt. String greeting = "Tjena!\n", body, bye = "Hejdå!"; body = "Jag mår bra. Hur mår du?\n"; System.out.println(greeting + body + bye); Javatolken tittar på satserna ovan och skriver ut följande: Tjena! Jag mår bra. Hur mår du? Hejdå! Kommentarer Du bör ta som vana att kommentera allt som inte är uppenbart i din kod. Vad som är uppenbart är individuellt och dynamiskt men hellre en kommentar för mycket än en kommentar för lite. Om du vill infoga en mindre kommentar används två snedstreck, //, och därefter kommentaren. Det som kommer efter snedstrecken på den raden antas vara en kommentar. Om du vill infoga en längre kommentar omgärdar du kommentaren med /* och */. Så här skulle några kommentarer (med något kommenterbart) se ut: // Beräknar medelvärde double average = (totalamount / noofparticipants); String command = program + " " + arguments; // Hela kommandot. /* Metoden nedan kan starkt ifrågasättas men i nuläget finns annat som är viktigare att korrigera. */ Det finns även något som kallas dokumentationskommentarer. Om du nyttjar dig av sådana kan du med hjälp av javadoc skapa en separat dokumentation för ditt program. webbservern.se :: - 4 -

5 En dokumentationskommentar börjar med /** och slutar med */. Det finns ett antal nyckelord som man kan använda sig av för att dokumentera metoder och klasser i ett standardformat. Vi kikar som brukligt är på ett exempel: /** * Krypterar med IDEA-algoritmen och * sparar den nya filen under nytt namn. Arne Anka filename filnamnet för filen som ska krypteras< * docompress anger om filen ska krypteras eller ej absoluta sökvägen till den krypterade filen */ public String crypt(string infile, boolean docompress) { // Lite kod som gör det som utlovas. Villkorsstyrning Naturligtvis finns den (förhoppningsvis) bekanta if...else-konstruktionen implementerad i Java. Även om den inte är bekant bör den vara lätt att ta till sig: Om ett villkor är uppfyllt, gör si, i annat fall kan vi testa mot ett annat villkor och göra något annat, om inget av villkoren är uppfyllda kan vi välja att göra ytterligare något annat. Ett exempel (om än småfjantigt) säger mer än tusen ord som vi säger på webbservern.se: short grade = 3; if (grade < 3) { System.out.println("Nja, inte riktigt bra."); else if (grade == 3) { System.out.println("Okej, det funkar."); else { System.out.println("Stabilt! Fortsätt så."); I exemplet ovan används "else if" och "else" för att testa ytterligare villkor men dessa två är inte obligatoriska. Exemplet ovan skulle även kunna implementeras med hjälp av en switch-konstruktion. Så här skulle det kunna se ut: short grade = 3; switch(grade) { case(1): { System.out.println("Nja, inte riktigt bra."); break; case(2): { System.out.println("Nja, inte riktigt bra."); break; case(3): { webbservern.se :: - 5 -

6 System.out.println("Okej, det funkar."); break; case(4): { System.out.println("Stabilt! Fortsätt så."); break; default: { if (grade == 5) { System.out.println("Stabilt! Fortsätt så."); else { System.out.println("Märkligt betyg."); break; Loopar En loop gör att du kan köra en sats eller ett block (ett gäng satser) upprepade gånger. Vi ska titta på tre konstruktioner: for, while samt do while. I alla dessa tre varianter kan break och continue användas. Break hoppar ut ur loopen medan continue hoppar till nästa iteration i loopen. For For-loopen är kompakt och praktiskt i många fall. Den används till exempel ofta för att iterera över en listas element. I det enkla exemplet nedan loopar vi runt 10 gånger och skriver ut vilken iteration vi befinner oss på för tillfället. for (int i = 0; i < 10; i++) { System.out.println("Iteration: " + i); While While-loopen är enkel till sin natur. Den ligger nära vårt vardagliga sätt att tänka: Gör si så länge ett villkor är uppfyllt. int i = 0; while (i < 10) { System.out.println("Iteration: " + i); i++; webbservern.se :: - 6 -

7 Do-While Do-loopen nedan kontrollerar villkoret första gången efter att den har skrivit ut "Iteration: 0". I detta exempel är det oväsentligt men i andra tillämpningar kan det vara en viktigt skillnad. int i = 0; do { System.out.println("Iteration: " + i); i++; while (i < 10); Matriser Enkelt uttryckt låter matriser dig hantera flera variabler av samma typ via endast ett variabelnamn. Det kanske inte låter så användbart men det är det. Jag tror vi är redo för ett litet exempel där vi även knyter an till avsnittet om for-loopar ovan. Med hjälp av for-loopen kan vi loopa precis så många gånger som det finns element i matrisen (matrisnamn.length). int[] grades = {3,5,4,3,3; //Vi fyller matrisen med betygen för våra 5 kurser. for(int i = 0; i < grades.length; i++) { System.out.println("Betyg i kurs " + i + ": " + grades[i]); I exemplet ovan deklareras matrisen grades samtidigt som den initieras med betygen. Varje betyg motsvarar ett element i matrisen och kan kommas åt på formen grades[x] där x är en siffra 0-4. Det går även bra att göra flerdimensionella matriser samt naturligtvis fylla dem med annat än heltal. Metoder Det som i många andra programmeringsspråk kallas för funktioner heter i Java metoder. Metoder är bra till mycket, till exempel är det vettigt att lägga en ofta använd kodsnutt i en metod och därefter anropa metoden istället för att duplicera kodsnutten ännu en gång. Ett exempel får illustrera som så många gånger förr. public double average (int persons, double totalamount) { return (totalamount / persons); Det finns flera intressanta iakttagelser vi kan göra. För det första, public är metodens åtkomstmodifierare (fungerar på samma sätt för hela klasser) och definierar vad som ska kunna komma åt denna metod. Vi ska snart titta på vad public innebär och vad det finns för andra alternativ. Efter åtkomstmodifieraren följer vilken datatyp som metodens returvärde ska ha. Metoden "average" ovan ska returnera ett flyttal, en variabel av datatypen double. Om en metod inte ska returnerar något anges "void". webbservern.se :: - 7 -

8 Inom parenteserna finns metodens parametrar. Om metoden inte tar emot några parametrar skriver man helt enkelt ingenting mellan parenteserna En parameter definierar alltså typen för det värde som kan skickas till metoden samt namnet som kan användas för att referera till den i koden i metoden. En del blandar ihop argument med parameter. Argumentet är det värde som skickas till metoden när den körs och detta värde refereras av parameternamnet under exekvering av metoden. Vi noterar även att vi returnerar värdet från metoden med return vilket samtidigt gör att vi lämnar metoden. Om en en metod inte har något definierat returvärde kan "return" användas ensamt för att lämna metoden. Åtkomstmodifierare och paket I en statisk klassmetod (deklarerad som static) är det möjligt att referera till de andra statiska medlemmarna i samma klass medan en icke-statisk metod kan nå alla medlemmar. (Som medlem i en klass räknas fält och variabler. Ett fält är en variabel som deklarerats i en klass, med andra ord instansvaribler och klassvariabler.) Utöver ovanstående regler ska vi bekanta oss med åtkomstmodifieraren som talar om hur variabler och metoder inuti en klass är åtkomliga från andra klasser. Detta åskådliggörs enklast i tabellform. Åtkomstmodifierare Ingen åtkomstmodifierare angiven public private protected Åtkomst Från klasser i samma paket. Från alla klasser. Ingen åtkomst utanför klassen. Från klasser i samma paket och från alla subklasser. Vi stötte nu på begreppet paket. Paket är en namngiven samling klasser som används för att gruppera klasserna. Om man inte anger något paket först i filen så kommer filens klasser att tillhöra ett namnlöst paket som är gemensamt för alla filer utan paketdeklaration. Ett kortill exempel för att visa hur paketdeklarationen kan se ut. package mypackage; //På första raden i filen De filer som ska tillhöra paketet "mittpaket" måste sparas i en katalog med samma namn, det vill säga "mittpaket" (utan citationstecken). Det går även att bygga upp en hierarki med paket genom att särskilja paketen med punkter. Ett exempel till. package allmypackages.mypackage; //På första raden i filen I exemplet ovan antas "mypackage" vara en underkatalog till "allmypackages". webbservern.se :: - 8 -

9 Undantagshantering Undantag används för att signalera att något har gått på tok. Dessa signaler kan snappas upp så att du har möjlighet att parera misstaget eller helt enkelt "dö graciöst" (ruggig direktöversättning av "die gracefully"). Upplägget är följande: try { Gör det farliga; catch (Undantagsparameter) { Hantera felet (undantaget). Vi "försöker" (try) göra något som vi vet kan gå snett. Om det går snett "kastas" (throw) ett undantag. Om vi har varit förutseende kan vi "fånga" (catch) det kastade undantaget. Det går att ha flera catch-block, nästlade try-block och till och med kasta tillbaka undantag till det anropande programmet. Det är dock inget vi kikar på närmare i detta kapitel. Något vi ska titta lite på innan vi är klara med undantag är finally-blocket. Finally-blocket körs efter catch-blocken och används när du vill vara säker på att viss kod körs innan en metod avslutas. Du kan rensa upp efter det avbrutna try-blocket, exempelvis stänga öppna filer. try { Gör det farliga; catch (Undantagsparameter) { // Hantera felet (undantaget). finally { // Rensa upp. I nästa stycke om filhantering studerar vi hur undantagshanteringen kan gå till i praktiken. Läsa/skriva till fil Det är skillnad på hur text- respektive binärfiler hanteras. Vi behandlar endast fallet med textfiler men om du vill läsa/skriva binära filer går det till på liknande sätt. Vi börjar med ett exempel där vi läser en textfil och skriver ut dess innehåll till standardutenheten (skärmen i vårt fall). Det blir även ett utmärkt tillfälle att studera undandtagshantering i praktiken. import java.io.*; class ReadFile { public static void main(string[] args) { webbservern.se :: - 9 -

10 try { FileReader fr = new FileReader("testfil.txt"); BufferedReader br = new BufferedReader(fr); // Läs första raden. String stringread = br.readline(); // Läs resten av filen. while (stringread!= null) { System.out.println(stringRead); stringread = br.readline(); br.close(); catch (FileNotFoundException e) { System.out.println("Filen hittades inte!"); System.exit(0); catch (IOException f) { System.out.println("IOExecption under läsning av fil."); System.exit(0); Först skapas ett FileReader-objekt som upprättar en anslutning till den specificerade filen och Javaprogrammet. Därefter skapas ett BufferedReader-objekt som kan buffra operationer från ett annat Reader-objekt (såsom FileReader). (Klasserna i standardbiblioteket är alla subklasser till den abstrakta superklassen Reader.) När det väl är ordnat så att vi kan läsa från filen läser vi sträng för sträng tills filen är slut. Nu tittar vi istället på hur det kan se ut när vi ska skriva till en textfil. Då använder vi några smidiga subklasser till den abstrakta klassen Writer. import java.io.*; class WriteFile { public static void main(string[] args) { try { FileWriter fr = new FileWriter("testfil.txt"); BufferedWriter br = new BufferedWriter(fr); br.write("detta skrivs till filen.\n"); br.write("det här med."); catch (IOException e) { System.out.println("Det gick inte att skriva till filen."); System.exit(0); webbservern.se ::

11 I exemplet ovan skapas en ny fil med filnamnet "testfil.txt" om denna inte redan finns, i så fall skrivs den över. För att lägga till text i "testfil.txt" istället för att skriva över skapar du FileWriter-objektet enligt följande: FileWriter fr = new FileWriter("testfil.txt", true); Även i detta fall skapas "testfil.txt" om den inte redan finns. Klasser och objekt Nu är det dags att förstå sig på det här med objektorienterad programmering (OOP). Lite grand i alla fall. Det finns, som om allt annat i den här guiden, mycket att säga om OOP och bara OOP erbjuder material för ett rejäl bok. Om du tyckte att det ovanstående var klurigt och inte riktigt tagit in det ännu kan det vara klokt att vänta med objektorienteringen tills det andra känns mer greppbart. Vi ska gå igenom klasser och objekt genom en liknelse. Min erfarenhet är att OOP bäst förstås genom ett exempel som relaterar till verkligheten. Det fina i kråksången är nämligen att OOP är en tydlig analogi till verkligheten. Tänk dig begreppet bil. Vad utmärker en bil? Vi kanske kan enas kring fyra hjul, motor, färg, växellåda, ratt samt ett eller flera säten. Denna prototyp av "bil" kallar vi för en klass (även om vi senare ska se att det mer liknar en abstrakt klass). Det är den allmänna bilen som bara finns i våra hjärnor (jmfr Platons idévärld). De bilar vi ser ute på vägarna är objekt som är instanser av klassen bil. En gång till med andra ord: en klass är en specifikation för en samling objekt med gemensamma egenskaper. Det är en mall uttryckt i programkod som definierar vad en viss typ av objekt består av. Ordet instans är detsamma som ett objekt av en viss klass. När du skapar ett objekt utifrån en klass säger man att klassen instansieras. Vi lämnar bilarna ett tag och tar ett enkel exempel med rektanglar. Vi återkommer till bilarna snart. public class Rectangle { //Klassvaribel static final int noofsides = 4; //Instansvariabler double height; double width; double area() { return (this.height * this.width); De objekt som skapas från klassen Rectangle kommer att dela på klassvariabeln "noofsides" som dessutom är definierad som en konstant (final). De skapade objekten kommer dock att få varsin kopia av instansvariablerna "height" och "width" som talar om hur hög och bred rektangeln är. Vi kan även notera webbservern.se ::

12 att instansmetoden (area) har en variabel this som refererar till det aktuella objektet för vilken metoden anropas. Vi kan nu skapa rektangelobjekt på detta sätt: Rectangle myrectangle = new Rectangle(); //Bestämmer rektangelns storlek myrectangle.height = 10.5; myrectangle.width = 6.5; System.out.println("Rektangelns area: " + myrectangle.area() + " areaenheter."); Konstruktorer I exemplet ovan bestäms höjden och bredden på den skapade rektangeln efter att rektangeln skapats. Det går naturligtvis att göra så att den skapade rektangeln redan vid dess skapelse tilldelas en höjd och en bredd. Med hjälp av två konstruktorer kan vi hantera både fallet när en höjd och bredd har angivits vid skapelsen och när höjd och bredd saknas. public class Rectangle { //Klassvaribel static final int noofsides = 4; //Instansvariabler double height; double width; //Konstruktor som tar hand om fallet när höjd och bredd är angiven. Rectangle (double height, double width) { this.height = height; this.width = width; //Konstruktor som tar hand om fallet när höjd och bredd inte är angiven. Rectangle() { this.height = 10; this.width = 5; double area() { return (this.height * this.width); Abstrakta klasser Som det nämndes tidigare finns det något som heter abstrakta klasser. Bilklassen som diskuterades i exemplet ovan skulle behöva implementeras som en abstrakt klass eftersom bilarna skiljer sig åt på en del punkter, Car-klassen svarar inte mot något objekt i verkligheten. Exempelvis finns det bilar med manuell respektive automatisk växellåda och det vore då lämpligt att inte specificera exakt hur det går till när man växlar. Det är upp till subklasserna som ärver från den abstrakta klassen att definiera dessa funktioner. Lugn bara lugn så ska vi snart räta ut eventuella frågetecken. webbservern.se ::

13 Vi ska nu titta på hur bilklassen kan se ut i ett exempel där vi även stöter på en del andra nyheter. public abstract class Car { static final int wheels = 4; //Klassvariabel med ett fast värde. //Instansvariabler String engine; String gearbox; String colour; int seats; //Instansmetoder void horn() { System.out.println("Tut tut!"); void gas() { System.out.println("Wrooom!"); //Instansmetoder som deklareras men inte definieras abstract void steer (double degree); abstract void changegear (int gear); Vi noterar att den definierade klassen är abstrakt, den börjar med "public abstract class...". Den är abstrakt eftersom det finns två abstrakta metoder, steer() och changegear(), som är deklarerade men inte definierade. Det går inte att skapa objekt direkt från denna abstrakta klass. Istället måste subklasserna ärva från superklassen "Car". Vi tittar på ett exempel där vi skapar två subklasser varav en (V70) inte är abstrakt. public abstract class Volvo extends Car { static final String brand = "Volvo"; class V70 extends Volvo { static final String model = "V70"; boolean manualgearbox = true; //Konstruktor V70 (String colour) { this.colour = colour; System.out.println("Tjena V70:n här, jag är " + this.colour + "."); void steer (double degree) { //Ställ in hjulens vinklar. void changegear (int gear) { //Växla webbservern.se ::

14 Nu har vi skapat en klass, V70, som går att instansiera. Vi ska titta på hur detta går fill. //Skapar en ny V70. V70 minvolvov70 = new V70("röd"); System.out.println("Jag är en " + minv70.brand + "."); minv70.gas(); minv70.horn(); Java-tolken svarar: Tjena! V70:n här, jag är röd. Jag är en Volvo. Wrooom! Tut tut! Exemplet ovan gör inte anspråk på att vara det bästa upplägget när man ska modellera bilar i allmänhet och Volvo V70 i synnerhet men förhoppningsvis illustrerar det något av kraftfullheten med OOP. Grafiska gränssnitt I vissa sammanhang krävs ett grafiskt gränssnitt. Javakodens komplexitet ökar naturligtvis men vi ska ändå titta på några exempel för att få ett hum om hur det fungerar. Vi ska använda oss av Swing vilket är ett klassbibliotek för att skapa grafiska gränssnitt som bygger föregångaren AWT (Abstract Windowing Toolkit). Ett enkelt fönster Vi börjar med att skapa ett fönster helt enkelt. import javax.swing.*; public class SimpleFrame extends JFrame { public SimpleFrame() { // Top-Level Container, en JFrame JFrame myframe = new JFrame ("Ett fönster"); myframe.setsize (400, 300); myframe.setvisible (true); public static void main (String args[]) { new SimpleFrame(); Programmet ovan är inte bra till mycket annat än att visa hur man skapar ett fönster. Vi ser att en JFrame skapas och döps till myframe. Denna JFrame är en så kallad Top-Level Container. En Top-Level Container kan även bestå av en JDialog eller JApplet. webbservern.se ::

15 I exemplet bestämmer vi fönstrets storlek och säger att det ska visas. Som standard kommer fönstret då att hamna längst upp till vänster vilket motsvarar koordinaterna (0,0). Positionen kan bestämmas genom setlocation (x, y). Som vanligt symboliserar x koordinaten i sidled och y koordinaten i höjdled. Vi utvidgar nu exemplet något ger det lite mer funktionalitet. import javax.swing.*; public class SimpleFrame extends JFrame { public SimpleFrame() { // Top-Level Container, en JFrame JFrame myframe = new JFrame ("Ett fönster"); // Gör så att det går att stänga fönstret på vanligt vis myframe.setdefaultcloseoperation (JFrame.EXIT_ON_CLOSE); myframe.setsize (400, 300); myframe.setlocation (200, 100); myframe.setvisible (true); public static void main (String args[]) { new SimpleFrame(); I exemplet ovan gjorde vi det möjligt att stänga fönstret på vanligt sätt genom användandet av setdefaultcloseoperation (JFrame.EXIT_ON_CLOSE). Ett fönster med innehåll Det finns en del att hålla reda på nu när vi tar ytterligare ett steg och det är förstås nödvändigt att ha lite grundläggande koll på detta om resultatet ska bli lyckat. Att skapa tomma fönster kan vara kul men de är som sagt inte så användbara alla gånger. Nu ska vi lägga in några komponenter (typ knappar, menyer, textinmatningsrutor och etiketter). Komponenter som ska visas måste placeras i en container. JFrame, som vi redan använt, är en container (till och med Top-Level Container som du minns) och i Swing är även en komponent en container. Varje container har en layout manager som bestämmer hur komponenternas ska placeras ut i containern. Det finns ett antal olika layout managers men vi nöjer oss med den som är standard för en JFrame, nämligen Border Layout. import javax.swing.*; import java.awt.event.*; public class SimpleFrame extends JFrame { public SimpleFrame() { // Skapar en knapp. JButton mybutton = new JButton("Klicka på mig!"); // Ger knappen ett kortkommando, Alt-K mybutton.setmnemonic(keyevent.vk_k); // Skapar en JPanel att ha knappen i. webbservern.se ::

16 JPanel mypane = new JPanel(); // Lägger till knappen i panelen. mypane.add(mybutton); // Top-Level Container, en JFrame JFrame myframe = new JFrame ("Ett fönster"); // Gör så att det går att stänga fönstret på vanligt vis myframe.setdefaultcloseoperation (JFrame.EXIT_ON_CLOSE); myframe.setcontentpane(mypane); myframe.setsize (400, 300); myframe.setlocation (200, 100); myframe.setvisible (true); public static void main (String args[]) { new SimpleFrame(); I exemplet ovan kopplade vi ett kortkommando till knappen och för att göra det var vi tvungna att importera från klassbiblioteket AWT som du ser på näst översta raden. I övrigt hoppas jag att kommentarerna i koden räcker för att förstå vad som händer. Hantera händelser Vi har skapat ett fönster med en knapp men det är ingen funktionalitet kopplad till knappen. Inte så bra kan man tycka. För att snappa upp klicket på knappen måste vi koppla ett lyssnarobjekt till komponenten. Lyssnaren ligger och lyssnar efter klick på knappen. När den tror sig höra ett klick kan vi reagera på användarens knappklickande och göra något passande. I exemplet nedan ska vi göra så att man bara kan klicka på knappen en gång. Lyssnaren rapporterar det första klicket och sen är det klippt. import javax.swing.*; import java.awt.event.*; public class SimpleFrame extends JFrame { private JButton mybutton = null; private JPanel mypane = null; private JFrame myframe = null; public SimpleFrame() { // Skapar en knapp. mybutton = new JButton("Klicka på mig!"); // Ger knappen ett kortkommando, Alt-K mybutton.setmnemonic(keyevent.vk_k); // Skapar en lyssnare mybutton.addactionlistener(new ButtonListener()); // Skapar en JPanel att ha knappen i. JPanel mypane = new JPanel(); // Lägger till knappen i panelen. webbservern.se ::

17 mypane.add(mybutton); // Top-Level Container, en JFrame JFrame myframe = new JFrame ("Ett fönster"); // Gör så att det går att stänga fönstret på vanligt vis myframe.setdefaultcloseoperation (JFrame.EXIT_ON_CLOSE); myframe.setcontentpane(mypane); myframe.setsize (400, 300); myframe.setlocation (200, 100); myframe.setvisible (true); // Knappens händelsehanterare public class ButtonListener implements ActionListener { public void actionperformed(actionevent e) { // Inaktivera knappen mybutton.setenabled(false); public static void main (String args[]) { new SimpleFrame(); För att låta klassen ButtonListener komma åt knappen har vi lyft ut deklarationen av "mybutton" utanför metoden main. För att göra ett grafiskt Javaprogram med lite mer vettig funktionalitet blir det raskt mycket kod. Eventuellt fyller jag på med ett lite större exempelprogram senare. Applets och JAR-arkiv Applets har uppmärksammats en hel del, även utanför programmerarkretsar, och är Java-program som körs i en webbläsare. Det medför att de är lite begränsade till sin natur men vi låter oss inte nedslås av det utan kikar på ett simpelt applet. import javax.swing.*; public class SimpleAppletill extends JApplet { public void init() { getcontentpane().add(new JLabel("Webbservern.se introducerar applets.")); Det är klokt att paketera appleten i ett JAR-arkiv för att effektivisera både nedladdningen och exekveringen av appleten. I vårt fall har vi vara en.class-fil men vi gör ett JAR-arkiv ändå: jar cf SimpleApplet.jar SimpleApplet.class webbservern.se ::

18 Det går alltså bra att paketera flera.class-filer i ett JAR-arkiv, byt helt enkelt ut "SimpleApplet.class" till "*.class" eller något annat passande. För att bädda in appleten i en webbsida när JAR-arkivet ligger i samma katalog som webbsidan skriver du så här: <head><title>simpleapplet</title></head> <body> <applet code=simpleapplet.class archive=simpleapplet.jar width=400 height=100> </applet> </body> Servlets För en introduktion till servlets rekommenderas Java-servlets-kapitlet. Läs mer på annat håll Allt om JVM: Förslag till svensk Javaterminologi: Java-historia: SUNs nybörjarguide: SUN undervisar om GUI och JFC/Swing: Den här filen ändrades senast Wednesday, 23-Jul :28:32 CEST. Respons i någon form mailas till webmaster at webbservern.se webbservern.se ::

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

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning. Programmering med Java Programmering med Java Programspråket Java Källkodsexempel Källkod Java API-exempel In- och utmatning Grunderna Ann Pan panda@nada.kth.se Rum 1445, plan 4 på Nada 08-7909690 Game.java

Läs mer

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

Kort om klasser och objekt En introduktion till GUI-programmering i Java 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å

Läs mer

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

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk

Läs mer

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

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016 Objektorienterad Programkonstruktion Föreläsning 3 7 nov 2016 Klass/instans Med hjälp av nyckelordet static kan vi bestämma att en metod eller ett fält ska tillhöra själva klassen i stället för en specifik

Läs mer

F4. programmeringsteknik och Matlab

F4. programmeringsteknik och Matlab Programmeringsspråk Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer 1 Ett program är en eller flera instruktioner

Läs mer

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

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p UMEÅ UNIVERSITET Datavetenskap 010530 LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p Betygsgränser 3 21,5-27 4 27,5-33,5 5 34-43 Uppgift 1. (4p) Hitta de fel som finns i nedanstående klass (det

Läs mer

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

Objektorienterad Programkonstruktion. Föreläsning 3 9 nov 2015 Objektorienterad Programkonstruktion Föreläsning 3 9 nov 2015 Kursnämnd Namn kommer... UML: Klassdiagram UML: Relationer Ärver från superklass Implementerar gränssnitt Dubbelriktad eller oriktad relation

Läs mer

(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

(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 (Man brukar säga att) Java är... Denna föreläsning Allmänt om Java Javas datatyper, arrayer, referenssemantik Klasser Strängar enkelt baserat på C/C++ objekt-orienterat från början dynamiskt utbyggbart

Läs mer

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

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Johan Falkenjack johan.falkenjack@liu.se Linköpings universitet Sweden December 4, 2013 1 Innehåll Arv och andra viktiga begrepp Abstrakta

Läs mer

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

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C. Idag Javas datatyper, arrayer, referenssemantik Klasser Arv, polymorfi, typregler, typkonvertering Strängar Tänker inte säga nåt om det som är likadant som i C. Objectorienterad programmering Sida 1 Ett

Läs mer

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition. Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Vem är vem på kursen Objektorienterad programvaruutveckling GU (DIT011) Kursansvarig : Katarina Blom, tel 772 10 60 Rum: 6126 (E-huset)

Läs mer

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

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA för SY2 1999-03-17, kl 14.00-18.00 Hjälpmedel: En lärobok i Java programmering Återlämningstillfälle:

Läs mer

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6 Laboration 2 Objektorienterad programmering i Java I Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6 Syfte: Att kunna använda sig av olika villkors- och kontrollflödeskonstruktioner

Läs mer

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

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... } En klassdefinition class A extends B {... Arv definierar en klass A som ärver av B. Klassen A ärver alla fält och metoder som är definierade för B. A är en subklass till B. B är en superklass till A. class

Läs mer

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

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten? Programmeringsteknik och Matlab Övning 4 Dagens program Övningsgrupp 2 (Sal Q22/E32) Johannes Hjorth hjorth@nada.kth.se Rum 4538 på plan 5 i D-huset 08-790 69 02 Kurshemsida: http://www.nada.kth.se/kurser/kth/2d1312

Läs mer

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner 732G11 Linköpings universitet 2011-01-21 1 2 3 4 5 6 Skapa program Kompilera: Källkod Kompilator bytekod Köra: Bytekod Virtuell maskin Ett riktigt program Hej.java class Hej { public static void main (

Läs mer

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling metoder Föreläsning 2 Objektorienterad programmering DD1332 Array [modifierare] String metodnamn (String parameter) Returtyp (utdata typ) i detta fall String Indata typ i detta fall String 1 De får man

Läs mer

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

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 AID-nummer: Datum: 2014-12-18 Kurskod: 725G61 Provkod: LAB1 Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 Skrivningstid: 2014-12-18 klockan 8.00-10.00. Hjälpmedel: Inga. För varje fråga

Läs mer

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

Att skriva till och läsa från terminalfönstret Att skriva till och läsa från terminalfönstret Oftast används grafiska komponenter i Java för att kommunicera med användaren (användargränssnitt), men det finns objekt i standardbiblioteken för de tillfällen

Läs mer

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

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen. TT Kapitel 3. Husdjur & Fisk Javaklasser Translation by Leif Lourié Java program består av klasser som beskriver saker (objekt) som finns på riktigt. Även om det finns många olika sätt att skriva program

Läs mer

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. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser Föreläsning 5-6 Innehåll Exempel på program med objekt Skapa och använda objekt Skriva egna klasser public class DrawSquare { public static void main(string[] args) { SimpleWindow w = new SimpleWindow(600,

Läs mer

Programmering A. Johan Eliasson johane@cs.umu.se

Programmering A. Johan Eliasson johane@cs.umu.se Programmering A Johan Eliasson johane@cs.umu.se 1 Jag Undervisar mest grundläggande programmering på Institutionen för datavetensakap Applikationsutveckling för iphone Applikationsutveckling i Java Datastrukturer

Läs mer

OOP Objekt-orienterad programmering

OOP Objekt-orienterad programmering OOP Objekt-orienterad programmering OOP F1:1 Delkursansvarig Epost Kursens webbsidor sm@fc.dsv.su.se http://people.dsv.su.se/~sm/oop/ Föreläsning 1 Introduktion till kursen OOP Vad är Java? Ett första

Läs mer

Användarhandledning Version 1.2

Användarhandledning Version 1.2 Användarhandledning Version 1.2 Innehåll Bakgrund... 2 Börja programmera i Xtat... 3 Allmänna tips... 3 Grunderna... 3 Kommentarer i språket... 4 Variabler... 4 Matematik... 5 Arrayer... 5 på skärmen...

Läs mer

TENTAMEN OOP

TENTAMEN OOP TENTAMEN OOP 2013-08-08 ANVISNINGAR Påbörja varje ny uppgift på nytt blad. Skriv endast på ena sidan av bladen. Skriv tydligt - oläsbara svar beaktas ej. BETYGSÄTTNING Max antal poäng är 30. För att bli

Läs mer

Classes och Interfaces, Objects och References, Initialization

Classes och Interfaces, Objects och References, Initialization Classes och Interfaces, Objects och References, Initialization Objekt-orienterad programmering och design (DIT953) Niklas Broberg/Johannes Åman Pohjola, 2018 Abstract class En abstract class är en class

Läs mer

Föreläsning 5-6 Innehåll

Föreläsning 5-6 Innehåll Föreläsning 5-6 Innehåll Skapa och använda objekt Skriva egna klasser Datavetenskap (LTH) Föreläsning 5-6 HT 2017 1 / 32 Exempel på program med objekt public class DrawSquare { public static void main(string[]

Läs mer

SMD 134 Objektorienterad programmering

SMD 134 Objektorienterad programmering SMD 134 Objektorienterad programmering Dagens agenda: Typer i Java: primitiva datatyperna, referenstyper Variabler och variabeltilldelningar med primitiva typer Konstanter av de olika typerna. Heltalsräkning

Läs mer

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

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014 Introduktion till Datalogi DD1339 Föreläsning 2 22 sept 2014 Namn Fält1 Fält2 Fält3 Metod1 Metod2 Metod3 Metod4 public class { public class { Åtkomst, public betyder fullt tillgänglig utifrån public

Läs mer

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

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet ITK:P1 Föreläsning 1 Att programmera i språket Java DSV Peter Mozelius Programmering Olika typer av programmering som t ex: o Imperativ programmering (C, Pascal m fl) o Funktionell programmering (Lisp,

Läs mer

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

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning 2I1049 Föreläsning 5 Objektorienterad programmering i Java KTH-MI Peter Mozelius Objektorientering Världar uppbyggda av objekt Inte helt olikt vår egen värld Ett sätt att modularisera våra system Objekten

Läs mer

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

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel Idag Ett exempel Undantag Substitutierbarhet, subtyper, subklasser När val av metod beror av typerna hos två objekt Lite om överlagring Exempel, version 2 Notera: för samtliga figurer gäller: arean av

Läs mer

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Tentamen ID1004 Objektorienterad programmering May 29, 2012 Omtentamen för ID1004 Objektorienterad programmering HT11, 29 maj 2012, 09-13 Denna tentamen examinerar 3 högskolepoäng av kursen. Inga hjälpmedel är tillåtna. Tentamen består av 12 frågor. Varje fråga

Läs mer

Tentamen OOP 2015-03-14

Tentamen OOP 2015-03-14 Tentamen OOP 2015-03-14 Anvisningar Fråga 1 och 2 besvaras på det särskilt utdelade formuläret. Du får gärna skriva på bägge sidorna av svarsbladen, men påbörja varje uppgift på ett nytt blad. Vid inlämning

Läs mer

JAVA Mer om klasser och objektorientering

JAVA Mer om klasser och objektorientering JAVA Mer om klasser och objektorientering Begreppet package - paket Package används när man t ex vill skapa ett eget bibliotek med klasser. Sen är det då meningen att man ska importera detta paket i det

Läs mer

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

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek De åtta primitiva typerna Java, datatyper, kontrollstrukturer Skansholm: Kapitel 2) Uppsala Universitet 11 mars 2005 Typ Innehåll Defaultvärde Storlek boolean true, false false 1 bit char Tecken \u000

Läs mer

Objektorienterad programmering i Java

Objektorienterad programmering i Java Objektorienterad programmering i Java Föreläsning 4 Täcker i stort sett kapitel 6 i kursboken Java Software Solutions 1 Läsanvisningar Den här föreläsningen är uppbyggd som en fortsättning av exemplet

Läs mer

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

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016 Objektorienterad Programkonstruktion Föreläsning 4 8 nov 2016 Nästade klasser I Java går det att deklarera en klass inuti en annan klass. Vi kallar detta för att en yttre klass innehåller en inre klass.

Läs mer

Klassdeklaration. Metoddeklaration. Parameteröverföring

Klassdeklaration. Metoddeklaration. Parameteröverföring Syntax: Class Declaration Modifier Class Body Basic Class Member Klassdeklaration class Class Member Field Declaration Constructor Declaration Method Declaration Identifier Class Associations Motsvarar

Läs mer

Laboration 1 - Grunderna för OOP i Java

Laboration 1 - Grunderna för OOP i Java Uppdaterad: 2006-08-31 Laboration 1 - Grunderna för OOP i Java Inledning Laborationen går ut på att lära sig grunderna för objektorienterad programmering, samt motsvarande språkkonstruktioner i Java. Labben

Läs mer

Programmering för språkteknologer I, VT2012. Rum

Programmering för språkteknologer I, VT2012. Rum Programmering för språkteknologer I, VT2012 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.lingfil.uu.se/~evelina/uv/uv12/pst1/ Idag - Kursplan - Börja programmera - Lokala variabler - aritmetiska

Läs mer

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer Java: Utvecklingsverktyg, datatyper, kontrollstrukturer Sven-Olof Nyström Uppsala Universitet 13 juni 2005 1 Utvecklingsverktyg för Java Vi rekommenderar Suns utvecklingsverktyg (SDK, tidigare JDK), se

Läs mer

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

Programmering för språkteknologer II, HT2011. Rum Programmering för språkteknologer II, HT2011 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv11/pst2/ Kursplan Mål Efter avslutad kurs skall studenten för att förtjäna betyget

Läs mer

Lektion Java Grunder. Javas historia. Programmeringsspråket Java. Skillnaderna mellan Java och C++ JVM (Javas Virtuella Maskin)

Lektion Java Grunder. Javas historia. Programmeringsspråket Java. Skillnaderna mellan Java och C++ JVM (Javas Virtuella Maskin) Lektion Java Grunder Javas historia Ursprungligen utvecklades Java (1991) för att användas i olika typer av konsumentelektronik (mikrovågsugnar, videoapparater) av programmerare på Sun. Språket kallades

Läs mer

Lab5 för prgmedcl04 Grafik

Lab5 för prgmedcl04 Grafik Lab5 för prgmedcl04 Grafik Viktigt läs detta först:den här labblydelsen är ganska lång, detta betyder inte att labben tar lång tid.en hel del av lydelsen är anvisning om hur man går tillväga för att kunna

Läs mer

Föreläsning 8 - del 1: Objektorienterad programmering (forts.) - Exempel

Föreläsning 8 - del 1: Objektorienterad programmering (forts.) - Exempel Föreläsning 8 - del 1: Objektorienterad programmering (forts.) - Exempel Eva Blomqvist eva.blomqvist@liu.se Linköpings universitet Sweden December 1, 2013 1 Innehåll OO-programmering fortsättning Skapa

Läs mer

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Skriven av Michael Andersson Introduktion Programmering I högnivåspråk fokuserar på själv problemet (algoritmen) istället

Läs mer

TENTAMEN OOP

TENTAMEN OOP TENTAMEN OOP 2014-03-15 ANVISNINGAR Påbörja varje ny uppgift på nytt blad. Skriv endast på ena sidan av bladen. Skriv tydligt - oläsbara svar beaktas ej. BETYGSÄTTNING Max antal poäng är 30. För att bli

Läs mer

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

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl Högskolan Dalarna sid 1 av 6 DI-institutionen Hans-Edy Mårtensson Sten Sundin FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY2 2001-03-16, kl 14.00-18.00 1. Grunderna i

Läs mer

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

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 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 riktiga provet tar 45 minuter (en lektionstimme) och det

Läs mer

TDDC77 Objektorienterad Programmering

TDDC77 Objektorienterad Programmering TDDC77 Objektorienterad Programmering Föreläsning 2 Sahand Sadjadee IDA, Linköpings Universitet Hösttermin, 2018 Outline Emacs Introduktion till Objektorienterad Programmering Introduktion till Java Variabler

Läs mer

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

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Kursinformation Imperativa delen av

Läs mer

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

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList. Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 3 Innehåll Lite om felhantering och Exceptions Mer om variabler och parametrar

Läs mer

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

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDE10 TDDE11, 725G90/1 Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Introduktion OOP Instanser, instansvariabler, instansmetoder

Läs mer

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

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här: Att skapa en klass kvadrat Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här: public class Kvadrat { private int sida; Det var väl inte

Läs mer

Laboration 1: Figurer i hierarki

Laboration 1: Figurer i hierarki Laboration 1: Figurer i hierarki Bakgrund Två grundläggande tekniker i objektorienterad konstruktion är arv och komposition. Mål Laborationen har flera avsikter: 1. Ge kunskaper i hur program kan organiseras

Läs mer

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? C är ett språk på relativt låg nivå vilket gör det möjligt att konstruera effektiva kompilatorer, samt att komma nära

Läs mer

TENTAMEN OOP

TENTAMEN OOP TENTAMEN OOP 2014-01-19 ANVISNINGAR Påbörja varje ny uppgift på nytt blad. Skriv endast på ena sidan av bladen. Skriv tydligt - oläsbara svar beaktas ej. BETYGSÄTTNING Max antal poäng är 30. För att bli

Läs mer

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

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34 Tentamen Datalogi I, grundkurs med Java 10p, 2D4112, 2002-2003 Lördagen den 30 november 2002 kl 9.00 14.00, salar E33, E34 Inga hjälpmedel 30 poäng ger säkert godkänt, 40 poäng ger betyg 4 50 poäng ger

Läs mer

a. Vilka av följande påståenden är riktiga? Observera att felaktigt valda påståenden ger poängavdrag. (4p)

a. Vilka av följande påståenden är riktiga? Observera att felaktigt valda påståenden ger poängavdrag. (4p) TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för Sy 2 2002-03-15, kl 09.00 13.00 Hjälpmedel: Endast bifogat kompendium Max: 66 poäng, för godkänt krävs 50%. Skriv tydliga och kortfattade svar 1. Grunderna

Läs mer

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning Varför? 732G11 Linköpings universitet 2011-02-08 Varför? 1 2 3 Varför? 4 5 Medelvärde av 5000 tal Varför? while-loopen int nrofints = 5000; int [] integers = new int [ nrofints ]; int pos = 0; while (

Läs mer

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

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes Idag statiska metoder och variabler private/public/protected final, abstrakta klasser, gränssnitt, delegering wrapper classes ett lite större exempel Objectorienterad programmering Sida 1 Vad vi vet om

Läs mer

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

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering. EDAA20 Programmering och databaser Mål komprimerat se kursplanen för detaljer Läsperiod 1 7.5 hp anna.aelsson@cs.lth.se http://cs.lth.se/edaa20 Mer information finns på kursens webbsida samt på det utdelade

Läs mer

Klasshierarkier - repetition

Klasshierarkier - repetition Klasshierarkier - repetition Klasser kan byggas på redan denierade klasser, egna och/eller färdigskrivna, genom: I att klassobjekt används som attribut (instansvariabler): har-relation. Exempel: traksystemet

Läs mer

Applets med komponenter

Applets med komponenter 5 Applets med komponenter Knappar Om gränssnitt (interface) Händelser Måla om appletytan Etiketter och textrutor Förvandla strängar till tal Aritmetik Omvandla datatyper med cast Felhantering Kap 5: Sid

Läs mer

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Tentamen ID1004 Objektorienterad programmering October 29, 2013 Tentamen för ID1004 Objektorienterad programmering (vilande kurs), 29 oktober 2013, 9-13 Denna tentamen examinerar 3.5 högskolepoäng av kursen. Inga hjälpmedel är tillåtna. Tentamen består av tre sektioner.

Läs mer

Tentamen , Grundläggande programmering i Java

Tentamen , Grundläggande programmering i Java Institutionen för informationsteknologi och medier Sid:1(3) Grundläggande programmering i Java Martin Kjellqvist Lösningsförslag, lösningsansatser Tentamen 2006-01-20, Grundläggande programmering i Java

Läs mer

DAT043 - Föreläsning 7

DAT043 - Föreläsning 7 DAT043 - Föreläsning 7 Model-View-Controller, mer om klasser och interface (arv, ) 2017-02-06 Designmönstret Observer avläser Observer Observable meddelar Observer avläser En eller flera objekt registrerar

Läs mer

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) Tid: Onsdagen 15 december 2004, 8:30 till 13:30 Plats: M Ansvarig lärare: Katarina Blom, tel 772 10 60. Läraren besöker tentamen kl

Läs mer

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

Grundläggande programmering med C# 7,5 högskolepoäng Grundläggande programmering med C# 7,5 högskolepoäng Provmoment: TEN1 Ladokkod: NGC011 Tentamen ges för: Omtentamen DE13, IMIT13 och SYST13 samt öppen för alla (Ifylles av student) (Ifylles av student)

Läs mer

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

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else Förkunskaper från tidigare föreläsningar: Objektorienterad Programmering (TDDC77) Föreläsning IX: Klasser och Objekt, Instantiering Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2015 I STONE I Variabler,

Läs mer

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

Är en-relation. Har en-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde Föreläsning 7 "Har en"-relation Arv "Har en" "Är en" Superklassen Object Överskuggning Fordonsexempel Seminarium 2 Relevanta uppgifter Uppgift 31 I exemplet Boll från förra föreläsningen gällde följande

Läs mer

Lösningsförslag övning 2.

Lösningsförslag övning 2. Objektorienterad programmering, Z1 Lösningsförslag övning 2. Uppgift 1. public class SIUnits { public static double yardspermeter = 1.093613; public static double poundperkilo = 2.204623; public static

Läs mer

Editering, Kompilering och Exekvering av Javaprogram

Editering, Kompilering och Exekvering av Javaprogram UMEÅ UNIVERSITET Institutionen för informatik B.1, Programmeringens grunder, 5 poäng Editering, Kompilering och Exekvering av Javaprogram Introduktion Syftet med kursmomentet Programmeringens grunder (B.1)

Läs mer

OOP F1:1. Föreläsning 1. Introduktion till kursen OOP Vad är Java? Ett första Java-program Variabler Tilldelning. Marie Olsson

OOP F1:1. Föreläsning 1. Introduktion till kursen OOP Vad är Java? Ett första Java-program Variabler Tilldelning. Marie Olsson OOP F1:1 Föreläsning 1 Introduktion till kursen OOP Vad är Java? Ett första Java-program Variabler Tilldelning OOP Objekt-orienterad programmering Delkursansvarig: First Class-konferens: Kursens webbsidor:

Läs mer

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander F2 Datatyper och variabler ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Datatyper Java är ett starkt typat språk Varje slags data har en datatyp Datatyp Javasyntax Exempel Teckensträng

Läs mer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning II: utmatning, variabler, typer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Kompilera och köra programmet under terminal 2: I Skapa Hej.java

Läs mer

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

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt Programmeringsteknik II - HT18 Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt 18-09-28 1 Förra gången: Arv och klasshierarkier Vi såg hur

Läs mer

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander F5 Selektion och iteration ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Boolska uttryck Boolska uttryck använder sig av jämförelseoperatorer < > = ==!= Resultatets datatyp är boolean

Läs mer

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

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 5 Innehåll Subklasser och arv Inledning till grafik (JFrame och JPanel).

Läs mer

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program Kompilera och köra programmet Objektorienterad Programmering (TDDC77) Föreläsning II: utmatning, variabler, typer Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 under terminal 2: I Skapa Hej.java

Läs mer

Enkla variabler kontra referensvariabel

Enkla variabler kontra referensvariabel Enkla variabler kontra referensvariabel En variabel är ett namngivet minnesutrymme i datorns primärminne. En variabel som används för att representera en primitiv datatyp kallas för enkel variabel. Deklarationssatsen

Läs mer

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

Administrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering Programmeringsteknik för I1 Övning 2 Administrativt Övningsgrupp 2 (Sal E32/D32) Johannes Hjorth hjorth@nada.kth.se Rum 4538 på plan 5 i D-huset 08-790 69 02 Kontrollera att ni har fått Lab2 inrapporterad

Läs mer

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

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Mer om Interface Generiska klasser Undantag Nästlade klasser 1

Läs mer

Klassen javax.swing.timer

Klassen javax.swing.timer Klassen javax.swing.timer I Swing finns en klass Timer som man kan använda för att upprepa en vis kodsekvens med jämna tidsmellanrum. Ett objekt av klassen Timer exekveras som en egen tråd. Ett objekt

Läs mer

TUTORIAL: KLASSER & OBJEKT

TUTORIAL: KLASSER & OBJEKT TUTORIAL: KLASSER & OBJEKT I denna tutorial lär vi oss att använda klasser och objekt samt hur vi bygger en enkel applikation kring dessa. I tutorialen kommer det finnas en mängd kod som du antingen kan

Läs mer

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

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering Institutionen för Datavetenskap CTH HT-16, TDA540 Dag: 2017-01-09, Tid: 14.00-18.00 Uppgift 1 a) class används för en klassdeklaration

Läs mer

Lösningsförslag tentamen FYTA11 Java

Lösningsförslag tentamen FYTA11 Java Lunds universitet FYTA11 Institutionen för Teoretisk fysik HT 10 Lösningsförslag tentamen FYTA11 Java Måndag 10:e januari 2011, 09:00 13:00 Instruktioner Hjälpmedel: enkla ritverktyg och Javadoc-genererade

Läs mer

Exempel på användning av arv: Geometriska figurer

Exempel på användning av arv: Geometriska figurer (9 maj 2014 Klasshierarkier 1 ) Exempel på användning av arv: Geometriska figurer Uppgift: Skriv ett program som kan hantera några olika geometrisk figurer: linjer, cirklar och rektanglar. (9 maj 2014

Läs mer

Föreläsning 3-4 Innehåll

Föreläsning 3-4 Innehåll Föreläsning 3-4 Innehåll Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer Datavetenskap (LTH) Föreläsning 3-4 HT 2017 1 / 36 Diskutera Vad gör programmet programmet? Föreslå

Läs mer

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

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc Föreläsning 5 (6) Metoder Metoder Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc Metoder Deklarera public void setnamn(string n) Åtkomstmodifierare Returtyp

Läs mer

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

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Abstract class En abstract class är en class som inte kan skapa några objekt. Syfte:

Läs mer

LÖSNINGSFÖRSLAG TENTAMEN

LÖSNINGSFÖRSLAG TENTAMEN LÖSNINGSFÖRSLAG TENTAMEN OBJEKTORIENTERAD PROGRAMMERING I JAVA 5P FRISTÅENDE KURS, DAG (ITM - ÖSTERSUND) MÅNDAG 2 JUNI, 2003, KL. 8-13 TID: 5 TIMMAR ANTAL UPPGIFTER: 8 MAX POÄNG: 43 BETYGSKALA: UNDERKÄND

Läs mer

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

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel Programmeringsteknik för Bio1 och I1 Övning 2 Kort repetition Övningsgrupp 3 (Sal E33) Johannes Hjorth hjorth@nada.kth.se Rum 4538 på plan 5 i D-huset 08-790 69 02 Kurshemsida: http://www.nada.kth.se/kurser/kth/2d1310/

Läs mer

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

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck Betrakta följande uttryck a +(b + c) d + e (f + g h) Parsing med Recursive Descent, Avbildningsklasser Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 22 november 2010 Beräkning med regler: multiplikation

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Sammanfattning period 1 Eric Elfving Institutionen för datavetenskap 1 oktober 2013 Översikt Ett C++-programs uppbyggnad Variabler Datatyper Satser Uttryck Funktioner

Läs mer

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

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering och metoder Introduktion till objektorienterad programmering Markus Saers markus.saers@lingfil.uu.se orientering Deklarativ programmering Beskriver förutsättningarna för något Prolog Imperativ programmering

Läs mer

Parallellism, återblick

Parallellism, återblick Parallellism, återblick Josef Svenningsson December 11, 2012 Lab7 Det är problem med lab7. Gå med i den grupp som ni använt tidigare. DEMO Flera saker händer samtidigt Ofta hanterar program olika indata

Läs mer

Objektorienterad programmering i Java

Objektorienterad programmering i Java bild 1 Objektorienterad programmering i Java Föreläsning 1 Kapitel 1-3 i kursboken Java Software Solutions bild 2 Läsanvisningar Kapitel 1 är en repetition av det ni förväntas kunna sedan tidigare. Det

Läs mer

DAT043 Objektorienterad Programmering

DAT043 Objektorienterad Programmering DAT043 Objektorienterad Programmering Detta är en exempeltenta som innehåller gamla tentauppgifter av ungefär liknande slag som ni kan förvänta er se på ordinarie tenta i Del 1 respektive Del 2. Dock är

Läs mer