Datateknik A, Syfte: Få en förståelse för vad Java är och hur det har utvecklats fram till idag. Få en inblick i de delar vi kommer att behandla i senare lektioner. Att läsa: Kursbok, Kapitel 1 (sida 5 23) http://java.sun.com/docs/books/tutorial/getstarted
Vi ska i denna lektion titta på vad programmering är för något, och då framför allt vad programmering i Java är. Vi kommer att gå igenom historiken bakom Java och hur Java har utvecklats fram till vad det är idag. Givetvis kommer vi även att titta på hur ett program i Java skrivs. I stor sett kommer vi att gå igenom alla de olika delar som kommande lektioner behandlar. Robert Jonsson Sida 1
För att vi ska ha någon egentlig nytta av datorer så behöver vi något som kan styra datorn så som vi vill, så att den utför de uppgifter vi vill att den ska utföra. För detta ändamål finns det mängder av s.k. dataprogram. Väldigt kort beskrivit består ett dataprogram av en mängd instruktioner som berättar hur en datormaskin ska bete sig. Det finns i stort sett två olika typer av program; systemprogram (för att styra operativsystemet) och applikationsprogram (word, netscape, spel m.m.). Programmering är kunskapen att skriva dessa instruktioner till datorn så att datorn fungera på ett sätt som man i förväg har bestämt. En av de främsta anledningarna till varför man väljer att programmera är att det är kreativt och stimulerande för hjärnan. Programmering är en problemlösande aktivitet. Robert Jonsson Sida 2
Java är ett objektorienterat språk som är enklare och som många tycker är mer elegant än andra objektorienterade språk (exempelvis C++ som många anser ha blivit för komplext). Java har inbyggt stöd för att skapa exekverbart innehåll på Internet, så ett Javaprogram (en s.k. Applet) kan exekveras som en del av en webbsida. I denna kurs kommer vi inte titta så mycket på Applets, men i en av övningsuppgifterna kommer du att få prova på att skapa en egen Applet. Java är plattformsoberoende. Detta innebär att ett program som skrivs i Java kan exekveras (köras) på de flesta plattformar så som Windows, Macintosh och UNIX m.fl. Javas komponentteknik heter JavaBeans vilket innebär att den är en självständig och återanvändbar programmodul som kan användas i en mängd olika applikationer och som kan manipuleras visuellt i en utvecklingsmiljö. JavaBeans är inte något vi kommer att titta på i denna kurs. Till Java finns det tillgängligt ett stort antal programbibliotek, s.k. paket, för vanliga uppgifter som skapande av användargränssnitt, upprättande av nätverkskommunikation, hantering av fil, uppkoppling mot databaser m.m. Dessa paket är fritt tillgängliga för programutvecklare kan använda i sina applikationer. Robert Jonsson Sida 3
Ursprungligen utvecklades Java som ett språk för att skriva kompakta och plattformsoberoende program för konsumentelektronik. Inom företaget Sun fanns det ett forskningsprojekt, projekt Green, för att enklare kunna programmera inbäddade system med enklare processorer. De första försöken utgick från ifrån C++, men man fann snart att C++ inte var tillräckligt portabelt mellan olika processorer (inom konsumentelektroniksystem används många olika processorer). Därför utvecklades ett språk i C++:s anda, men som var mer portabelt och också mindre komplex. Språket, som kallades Oak, hade James Gosling (på Sun Microsystems) som sin huvudsakliga skapare och konstruktör. Men namnet Oak var redan upptaget och därför döptes språket om till Java. Var namnet kom ifrån finns det många åsikter om. En del menar att det kom till efter ett besök i en lokal kaffebutik under en fikarast. Robert Jonsson Sida 4
Sommaren 1992 skapade projektet sin första produkt baserad på det nya språket. En extremt intelligent fjärrkontroll (jämfört med vad som fanns då). Fjärrkontrollen var interaktiv, handhållen och kontrollerades genom en touchscreen. I demot så sågs maskoten Duke springa runt på skärmen och vinka m.m. medan han utförde de kommandon användaren bad om. Produkten baserades på det nya språket Oak som var processoroberoende. Dock blev produkten ingen succé. Den var helt enkelt före sin tid. Robert Jonsson Sida 5
I samband med att Internet fick allt större uppmärksamhet fick projektgruppen också en idé om att Java borde kunna användas för att utveckla plattformsoberoende program för Internet. Tekniken prövades till att börja med genom att utveckla en egen webbläsare kallad HotJava. Den skrevs helt i Java och var till skillnad från tidigare webbläsare den första som på riktigt kunde visa animationer och dynamiska sidor. Hotjava visades upp på en konferens och i början var det knappt några som rynkade på näsan åt HotJava. Men när James och de andra visade upp en sida med en molekyl som man kunde ta tag i och vrida och vända på gick det ett sus genom publiken det röde på sig. I samband med detta började tekniken med Java att också skapa ett intresse utanför Sun. Språket offentliggjordes och lanserades officiellt i november 1995 då även Netscape meddelade att man licensierat språket och avsåg att ge fullt stöd för Java i sin webbläsare. I och med detta började det stora genombrottet för Java. Tidigt bestämde man att Javasstandarden även skulle omfatta ett flertal bibliotek så att vanliga uppgifter som filhantering m.m. utförs på samma sätt oavsett plattform. Genom att tidigt definiera klassbibliotek (paket) och låta dessa vara en del av Javastandarden (till skillnad mot t.ex C++ som länge saknat standardbibliotek) så kan de flesta program utvecklas med dessa standardbibliotek. Hela tiden utvecklas dessa standardbibliotek och fler bibliotek läggs till i nya versioner av Java. 1997 släpptes v1.1, 1998 släpptes 1.2 och i dagsläget är senaste version 1.5.0 (J2SE 5.0 eller Java 2 Platform Standard Edition 5.0). Robert Jonsson Sida 6
Java är ett generellt programmeringsspråk som kan användas för alla typer av applikationer. Läser man om Java i pressen kan man få intrycket av att Java är ett specialskrivet språk för Internet och som endast kan användas i denna miljö, men så är inte fallet. Anpassningen för Internet består av ett fåtal klasser i standardbiblioteken. Det är möjligt att skriva helt vanliga applikationer i Java som inte har någonting alls med Internet att göra. Java har influerats från många andra språk. James Gosling har sagt att Java är objektorienterat som Smalltalk, numeriskt som Fortran, systemspråk som C/C++, och distribuerat på ett sätt som inget tidigare språk. Syntaxmässigt är språket mest likt C++. När ett Javaprogram kompileras så genereras s.k. bytekod som är ett standardiserat instruktionsfomat för en virtuell Javamaskin. Det är denna virtuella Javamaskinen som är nyckeln till plattformsoberoendet för Java. En virtuell Javamaskin är ett program som är skrivet för en viss plattform (Windows, UNIX, Macintosh etc) och som tolkar bytekod och utför instruktionerna i denna bytekod. I och med att bytekodens format är standardiserat kan alltså en fil med bytekod exekveras på samtliga plattformar som har en virtuell Javamaskin, och bete sig på i princip samma sätt. Det är alltså samma bytekod exekveras men olika virtuella maskiner används på olika plattformar. Mer om detta senare. Robert Jonsson Sida 7
Java har en väldigt enkel kompileringsprocess jämfört med en del andra språk. Vårt program, de instruktioner vi skriver för att få datorn att utföra det vi vill, sparas i en källkodsfil. I Java har källkodsfilen filändelsen.java. Innan programmet kan köras måste källkoden kompileras till bytekod (filändelse.class). D.v.s. våra instruktioner översätts till ett annat format.samma bytekod kan sedan exekveras i olika virtuella maskiner för olika plattformar. Robert Jonsson Sida 8
Java är betydligt enklare att lära sig än andra språk som ex. C++. Trots detta är språket komplett, inga viktiga konstruktioner saknas utan snarare är det fällorna i C++ som har tagits bort. Java är fullt ut objektorienterat i och med att det har stöd för klasser, objekt, arv och polymorfism. Ett objektorienterat språk delar in program i separata moduler (objekt), som kapslar in ett programs olika attribut och händelser. Objektorienterad programmering är det programmeringssätt många föredrar för att skapa komplexa program med. Med plattformsoberoende menas både oberoende av en viss processor, ett visst operativsystem och ett visst användargränssnitt. Detta innebär att ett Javaprogram kan köras på olika datorer utan några förändringar. Detta är en egenskap som få andra språk har, och som i Java dessutom skapas på binär nivå, d.v.s. den källkod som skapas behöver inte kompileras om för olika plattformar. Java är robust, vilket innebär att fel i ett Javaprogram inte orsakar systemkrascher lika ofta som fel i andra programspråk. Även om det slutgiltiga ansvaret för att uppnå robusthet är upp till programmeraren att se till, innebär avsaknad av pekare, automatisk minneshantering och stöd för undantagshantering att programmeraren får det betydligt enklare att utveckla robusta system. Robert Jonsson Sida 9
Många operativsystem har numera stöd för parallell exekvering genom s.k. trådar där ett program kan innehålla många samtidiga exekveringsvägar. Normalt är dessa mekanismer svåra att programmera, men inte om Java används. Java har inbyggt i språket både för att skapa och styra trådar, samt eleganta mekanismer för att synkronisera trådar med varandra. Java har en filosofi att göra hårda kontroller vid kompileringen så att fel upptäcks redan då och inte under exekvering av ett program. Bl.a. genom att svårhanterliga pekare inte finns med i språket undviks många av de typproblem som är vanliga i andra språk. Med säkerhet kan menas robusthet som nämnts tidigare, men eftersom Java ofta används över Internet så menas med säkerhet normalt skydd mot missbruk av Java så att inte någon kan skriva Javaprogram som överförs via Internet och sedan förstör eller tar reda på information. Java har därför en välutvecklad säkerhetsmodell för att låta okända program exekvera under stark kontroll och med begränsade rättigheter. Java är ett distribuerat språk, vilket menas med att program kan skrivas för att köras i nätverk. Java har inbyggda paket för nätverkskommunikation vilket gör det väldigt enkelt att bygga applikationer för Internet och WWW. Robert Jonsson Sida 10
Ett objektorienterat program består av ett antal objekt som kommunicerar med varandra genom att skicka och ta emot meddelanden. Dessa meddelanden styr programmets beteende. Ett objekt i sin tur är en programmodul som kapslar in en del av programmets egenskaper och beteende. Ett objekt efterliknar riktiga ofta objekt ute i den riktiga världen och kan vara allt från stenar och regndroppar till cyklar och personer till ett bankkonto och bankkontor. Objektorienterad programmering är ett speciellt sätt att organisera program och att designa objekt som kan arbeta tillsammans för att utföra en bestämd uppgift. Robert Jonsson Sida 11
Ett exempel kan vara när en kund ska sätta in eller ta ut pengar från sitt konto i en bank. De objekt som ingår här är bl.a. kunden ifråga, den anställde på banken som servar kunden, kontot som kunden ska sätta in pengar på och i vis mån även summan som ska sättas in. Kommunikationen mellan dessa objekt kan vara att kunden ber den anställde att sätta in en viss summa pengar på sitt konto. Den anställde ber i sin tur kunden om vilket kontonummer hon önskar sätta in pengarna på. Skulle vi skriva ett objektorienterat program för att hantera detta så skulle det innehålla alla dessa objekt. Objekten skulle kommunicera med varandra enligt vissa bestämda mönster för att utföra de uppgifter som krävs. Robert Jonsson Sida 12
Exekveringsmiljön är det sätt och den omgivning som ett Javaprogram exekverar i. Traditionellt har en applikation alltid varit skriven och kompilerad för ett visst operativsystem, som i sin tur är bundet till en viss processor. Ett operativsystem definieras med hjälp av ett antal API:er som tillhandahåller tjänster till applikationerna. Dessa API:er har hittills alltid varit olika för olika operativsystem. Java åstadkommer en total helomvändning från denna traditionella syn. Istället för att använda tjänster från operativsystemet används de generella tjänster som definierats i klassbiblioteken i Java. Från ett Javaprogram genereras sen bytekod som är oberoende av både operativsystem och underliggande maskinarkitektur. Denna bytekod tolkas av en virtuell Java-maskin (översätts i exekveringsögonblicket till maskinkod för aktuell plattform). Det finns idag virtuella maskiner skrivna och anpassade för de flesta operativsystem. Den virtuella maskinen och standardbiblioteken tillhandahåller all funktionalitet som tidigare varit operativsystemets uppgift att tillhandahålla. Robert Jonsson Sida 13
Utvecklingsmiljön är den miljö i vilken utvecklare skriver sina Javaprogram. Miljön definieras dels av de API:er, klassbibliotek och komponenter som finns tillgängliga för Java, dels av de miljöer i vilken Javaprogram editeras, kompileras, avlusas och testas. De grundläggande API:erna (klassbiblioteken) för Java täcker alla centrala områden som användargränssnitt, databaser, nätverk, matematik etc. Java och Sun arbetar också väldigt hårt på att ta fram API:er/klassbibliotek för andra viktiga områden som säker handel över Internet, telefoni, multimedia, 3D, ljud- och bildöverföring. Den första utvecklingsmiljön från Sun var kommandobaserad, d.v.s. programmen skrevs i en vanlig texteditor och kompilerades och exekverades direkt ifrån operativsystemets kommandotolk. Företag som Symantech, Microsoft och Borland har tagit fram integrerande miljöer som använder Java som utvecklingsspråk. Dessa utvecklingsmiljöer innehåller editor, kompilator och avlusare, som gör att det går enkelt och snabbt att utifrån en utförd källkodsändring testa programmet. Dessa utvecklingsmiljöer innehåller också ofta stöd för visuell programmering där delar av programmet kan utvecklas genom att användaren drar och släpper komponenter på fönster och visuellt förbinder objekt med varandra. Stora delar av programmet kan alltså utvecklas genom att användaren inte skriver kod utan visuellt ritar upp sitt användargränssnitt. Robert Jonsson Sida 14
I en kommandobaserad miljö skriver utvecklarna Javaprogram i en vanlig texteditor (Notepad, TextPad, UltraEdit). För att sen kompilera och exekvera sina program skriver man kommandon i t.ex. kommandoprompten. Det är enligt detta arbetssätt vi i början av kursen kommer att jobba. Robert Jonsson Sida 15
I en integrerad utvecklingsmiljö gör man oftast allting i ett och samma program. Man skriver källkoden, kompilerar och exekverar den utan att växla till andra program. Många integrerade miljöer erbjuder även visuell kodning, vilket innebär att mycket av koden kan automatgenereras. För att bygga upp ett användargränssnitt är det i stort sett bara att dra-och-släppa komponenter till en rityta. Senare i kursens lektioner kommer vi att använda oss av en s.k. IDE för att utveckla våra program. Denna editor kommer dock inte att ha stöd för visuell programmering. Robert Jonsson Sida 16
Den grundläggande utvecklingsmiljön för Java, och även den första som släpptes, är Java Development Kit (JDK). Det är en kommandobaserad miljö som innehåller den senaste versionen av Java, kompilator, virtuell maskin och standardbiblioteken för Java. Denna miljö är gratis och finns att laddas ner från java.sun.com tillsammans med aktuell dokumentation. Den första versionen släpptes 1996 och sen dess har nya versioner kommit med jämna mellanrum. De nya versionerna innehåller förbättringar av befintliga klasser och paket (snabbare fönsterhantering, säkrare trådar och nätverkskommunikation m.m.), men även nya tillägg som utökar standardbiblioteken. Den senaste versionen är i dag 1.5.0 (2005), men den anses innehålla så stora förändringar och nyheter att versionsnumret döps om till 5.0. Fullständigt uttalat lyder versionen: Java 2 Platform Standard Edition 5.0 eller bara JDK 5.0 (JDK J2SE Development Kit). Det är denna (eller senare verisoner) vi kommer att använda i kursen. Kompilatorn i JDK/SDK heter javac. Denna kompilerar java källkod till bytekod. Den virtuella maskinen heter java och används för att exekvera den kompilerade bytekoden. Robert Jonsson Sida 17
Ett Javaprogram finns i två olika former: applikationer och Applets. En Java-applikation är ett program som exekveras fristående ifrån andra program (men som naturligtvis kräver en virtuell Javamaskin på den aktuella plattformen). En Java-applikation beter sig som vilket annat program som helst, fast det råkar vara skrivet i Java och använder sig av Javas API:er för att komma åt tjänster från operativsystemet. En Applet är ett program som alltid exekverar inifrån ett annat program, normalt en webbläsare som t.ex. Internet Explorer. Java Applets är formen för att distribuera Javaprogram över Internet eller ett intranät. Robert Jonsson Sida 18
Som nämnts tidigare definieras ett javaprogram i en eller flera källkodsfiler. Dessa kompileras sedan till s.k. bytekod som den virtuella Javamaskinen kan exekvera. Enligt Javadefinitionen är det teckensnitt som används Unicode, vilket innebär att tecken som å, ä, ö (t.o.m. specialtecken) är tillåtna i namn på identifierare för variabler och klasser. Men då det är osäkert att alla utvecklingsmiljöer hantera Unicodetecken brukar inte å, ä, ö m.m. användas vid utskrifter i kommandopromten. Robert Jonsson Sida 19
Alla Javaprogram bygger på klasser. Även det minimala programmet ovan innehåller en klass. Klassen heter FirstApp och den fil i vilket källkoden ligger heter då FirstApp.java (Java skiljer på små och STORA bokstäver vilket är viktigt att komma ihåg!). Programmet börjar med en klassdeklaration i form av nyckelorden public class följt av namnet på klassen. Klassdeklarationen är innesluten i matchande klammertecken { och } inom vilka klassens medlemmar (instansvariabler och metoder) finns. I detta exempel har klassen inga instansvariabler utan endast en metod, den s.k. Mainmetoden som är den metod i vilket exekveringen av en Java-applikation startar. Main-metoden (eller metod deklarationen överlag) är precis som klassen innesluten i matchande klammertecken. I det här fallet innehåller metoden main endast en sats, och här används en klass System från java.lang paketet. Objektet out är av klassen PrintStream vilket är en klass för att skriva meddelanden. På out anropas metoden println som skriver ut en variabel (i detta fall en sträng). Detta kan låta krångligt vilket är förståeligt. Det räcker för tillfället att veta att en programsats av typen System.out.println skriver till konsolfönstret. När main-metoden är slut är också programmet slut, och programmets exekvering avslutas. I Övning 1 kommer du att få prova på att skriva ditt egna första program i Java. Vill du prova detta programexempel finner du källkod och bytekod i exemplen som tillhör lektionen. Robert Jonsson Sida 20
Main-metodens definition kan till en början se väldigt komplex ut. De olika delarna kommer vi att gå igenom allt eftersom. Nu från början så är det här ytterligare en sak du bara får acceptera att så här skriver man. public innebär att metoden är tillgänglig utanför klassen, vilket main-metoden naturligtvis måste vara om programmet ska kunna köras igång. static innebär att det är en statisk s.k. klassmetod, en metod som kan anropas direkt på klassen utan att något objekt av klassen har skapats. Att main-metoden är statisk är naturligt eftersom något objekt inte kan skapas före main-metoden körs. void innebär att main-metoden inte returnerar något returvärde. Normalt så returnerar en metod ett värde när den har exekverat alla satser som tillhör metoden. När main metoden är klar så avslutas programmet och det finns därför ingen anledning till att returnera något. main är namnet på metoden. String[] args är en array av strängar döpt till args. Denna array kommer att innehålla de eventuella argument som angetts på kommandoraden till programmet. Man kan alltså skicka in vissa värden som programmet kan tänkas behöva när vi startar det. För att skriva ut det första argumentet som skickats in till programmet kan koden längst ner användas. Startar vi programmet enligt följande: java MittProgram hejsan så är det hejsan som skrivs ut på skärmen. Har vi fler argument så kommer vi åt dessa genom args[1], args[2] osv. Vill du prova detta exempel kan du kompilera och köra Argument.java (se exemplen). Robert Jonsson Sida 21
Oavsett vilket programmeringsspråk som används måste ett program kommenteras för att vara läsbart för andra. Kommentarer kan också vara bra för att man som programmerare själv ska komma ihåg vad man har gjort för något. Det kommer visa sig att du glömmer otroligt fort vad det är du har gjort och varför. I Java finns det tre olika typer av kommentarer: Enradskommentarer som börjar med // och löper till radens slut. Blockkommentarer som kan löpa över flera rader. Börjas med /* och avslutas med */. Är väldigt användbart när man vill kommentera bort vissa rader i koden vid felsökning m.m. Dokumentationskommentarer används för att automatgenerera dokumentation i Java. Verktyget javadoc används för detta ändamål och genererar dokumentationen i HTML-format. Mer om javadoc kommer senare i kursen. Robert Jonsson Sida 22
En identifierare kan ses som ett eget namn på saker där saker är variabler, metoder eller klasser. I Java (och många andra språk) så kan en identifierare bestå av en blandning av bokstäver, siffror, understräck (_) och tecknet &. I Java finns det ingen begränsning vad gäller antalet tecken, dock får en identifierare inte börja med en siffra. Viktigt att tänka på är Java skiljer på STORA och små bokstäver. T.ex. är identifieraren antal inte samma som identifieraren Antal. Exempel på identifierare vi hittills har stött på är FirstApp som identifierar vår första klass. Dessutom har vi stött på main som identifierar metoden med samma namn i klass i FirstApp. Robert Jonsson Sida 23
Java har stöd för ett antal fördefinierade typer, som brukar kallas språkets primitiva typer. De är fördefinierade genom att deras namn är reserverade och hanteras speciellt av kompilatorn. Av dessa primitiva typer kan vi deklarera variabler som vi sen använder i vårt program. String är inte en primitiv typ men har så stora likheter att den kan hanteras precis som en primitivtyp. En variabel av typen String kan lagra ett valfritt antal tecken av valfri sort. På svenska är det vanligt att säga sträng i stället för String. Robert Jonsson Sida 24
En variabel i Java är en plats i datorns minne där vi kan lagra ett värde av en viss typ. Denna plats är namngiven med en identifierare som vi använder för att komma åt värdet som lagrats. Innan vi kan använda en variabel i ett program måste vi deklarera den. Med en variabeldeklaration talar man om vilken typ av data vi vill lagra och vilket namn vi vill använda för att manipulera eller komma åt det lagrade värdet. I samband med deklarationen kan vi även tilldela variabeln ett värde. Man säger att man initierar variabeln. I bilden ovan ges olika exempel på deklarationer och tilldelningar. Robert Jonsson Sida 25
I Java finns det ett antal specialtecken som kan användas inuti en text för att skriva ut vissa tecken som annars inte vore möjligt. Ett exempel är tecknet. Den text som ska skrivas ut måste omslutas med detta tecken och vill vi i texten skriva ut just det tecknet blir det problem. Vi kan t.ex. inte göra så här: System.out.println("Peter "Foppa" Forsberg"); Och tro att utskriften ska bli Peter "Foppa" Forsberg. Här får vi använda specialtecknet \". De övriga som finns att tillgå är listade i första rutan. System.out.println("Peter \"Foppa\" Forsberg"); Det uppstår även problem när ni vill skriva ut text på skärmen som innehåller å, ä eller ö. För att råda bot på detta kan vi i våran källkod byta ut å, ä och ö mot ett andra tecken. Dessa erhålls genom att man håller in den vänstra alt-knappen och samtidigt trycker in en sifferkombination på det numeriska tangentbordet (det fungerar inte med de vanliga siffrorna). T.ex. får vi bokstaven å genom att hålla in alt samtidigt som vi trycker in 0902. Observera att detta är endast testat med Windows. Det kan t.ex. se ut så här i vår källkod: System.out.println(" ror till f rs ljning"); Ta en titt på Javaprogrammet Smeknamn.java (finns bland exemplen) för att se olika deklarationer och tilldelningar. Robert Jonsson Sida 26
Till typer hör också operatorer som kan användas i uttryck där operander av de fördefinierade primitiva datatyperna ingår. Operatorerna kan delas in i följande grupper: Aritmetiska: +, -, /, * (samt ++ och vilket innebär addition och subtraktion med ett) Jämförelseoperatorer: >, <, <=, >=, ==,!= (jämförelse mellan element av andra typer) Booleska operatorer: &&,,! (för att kombinera uttryck med varandra) Bitoperatorer: &,, ~ (operatorer för att läsa eller skriva individuella bitar i ett heltal) Skiftoperatorer: << >> >>> (operatorer för bitvis skiftning av bitar i ett heltal) Tilldelningsoperatorer: = (för tilldelning, som också kan kombineras med de aritmetiska operatorerna) Ta en titt på Javaprogrammet TestAvOperatorer.java (finns bland exemplen) för att se test av olika operatorer. Robert Jonsson Sida 27
Konstruktioner för kontrollflöde styr hur programmet exekveras, d.v.s. vilka programsatser som skall exekveras vid ett visst tillfälle. Precis som i andra programmeringsspråk så är kontrollflödeskonstruktionerna i java: Villkorskonstruktioner: if-else och switch som testar ett uttrycks värde och avgör exekveringen utifrån detta. Iteration: while, do-while och for upprepar exekvering av en programsats(er) så länge ett visst villkor är uppfyllt. Avbrott: break, continue och return avbryter exekvering av en viss iteration eller metod. Ta en titt på Javaprogrammet TestAvKontrollFloden.java (finns bland exemplen) för att se exempel på kontrollflödeskonstruktioner. Robert Jonsson Sida 28
Java är ett objektorienterat språk, vilket innebär att alla Javaprogram beskrivs i termer av klasser. En klass programmeras i en källkodsfil i Java, och filens namn måste vara detsamma som klassens namn. En klass är en egendefinierad typ, d.v.s. en typdefinition av någonting som vårt program skall hantera. En klass definieras i termer av instansvariabler och metoder. Dessa variabler och metoder kan göras mer eller mindre synliga (åtkomliga) för andra klasser, vilket görs genom speciella åtkomstmodifierare (mer om detta i kommande lektioner). Instansvariabler är data som ska associeras till klassen och dess objekt. Kallas även för medlemsvariabler eller fält och kan vara namn, ålder, kön m.m. i en Person-klass, eller bredd och höjd i en Rektangel-klass, eller filnamn, filtyp och storlek i en Filklass. Metoder är operationer som ska kunna utföras på objekt av klassen. T.ex. öppna, stänga och spara i Fil-klassen, sätta höjd och beräkna area i Rektangel-klassen. Det är i metoderna det egentliga arbetet utförs, det är här vi skriver vår kod. Denna kan bestå av satser av olika slag, t.ex. variabeldeklarationer, villkorssatser och iterationer. Robert Jonsson Sida 29
En klass är som sagt en typdefinition av någonting som programmet ska hantera. Av denna klass skapas förekomster, objekt, som är de faktiska begrepp som manipuleras i programmet. Ett objekt är en förekomst av en viss klass (t.ex. kan klassen Person ha objekten Kalle, Pelle och Stina som då alla är unika förekomster av klassen Person). Ett objekt är av en viss klass är på samma sätt som en variabel är av en viss typ i ett traditionellt programmeringsspråk. Variabeln minint kan vara av typen int på samma sätt som objektet minperson är av typen Person. T.ex. kan vi skapa klassen Person för att i vårt program hantera olika Personer. Det vi vill lagra om personerna är namn och personnummer. Detta blir klassens instansvariabler. De operationer vi vill kunna utföra är att sätta namn och personnummer samt att hämta (visa) namn och personnummer. Detta blir klassens metoder. De olika personer vårt program sen hanterar är alla förekomster av vår Person-klass. Alla objekt är helt unika och har inget med varandra att göra (även om personerna har samma namn), d.v.s. de olika objekten delar inte på variablerna eller innehållet i dessa. Robert Jonsson Sida 30
Det kan vara intressant att se hur en enkel klass egentligen är uppbyggd som. Jag ger inte någon förklaring av koden utan det kommer att förklaras allt eftersom längre fram i lektionerna. Det som kan sägas är att först kommer klassdeklarationen (public class), därefter deklarerar vi våra instansvariabler (private int pnr och private String namn) och till sist metoderna (public void setnamn() och public String getnamn()). Robert Jonsson Sida 31
Det finns ytterligare ett par operatorer i Java. Man kan se dessa som special operatorer. new används för att skapa objekt av en klass. Mer om detta i lektioner längre fram. Det finns operator för att ändra typ på ett uttryck, en s.k. Cast-operator. T.ex. kan vi konvertera ett decimaltal till ett heltal. Viktigt att tänka på här är att vi tappar decimaldelen när vi konverterar ett decimaltal till ett heltal. Det utförs heller ingen avrundning utan decimaldelen kapas helt enkelt bort. instanceof används för att avgöra typen på ett objekt, d.v.s. av vilken klass objektet är skapat ifrån. Robert Jonsson Sida 32
Utifrån en existerande klass kan nya klasser skapas genom arvs-mekanismen. En klass som ärver en annan klass utgår ifrån samma egenskaper (instansvariabler och metoder) som den ärvda klassen, men lägger till ytterligare egenskaper eller omdefinierar implementationen (som det så fint heter) av en viss egenskap (d.v.s. en viss metod utförs på ett annat sätt i den nya klassen). Vid arv skapas olika klass-hierarkier som man kan illustrerar enligt bilden. Pilen pekar mot den klass som ärvs. I det här fallet ärver klassen Sportbil alla egenskaper från klassen Personbil, som i sin tur ärver sina egenskaper från klassen Fordon. De klassbibliotek som medföljer Java är alla uppbyggda med liknande klasshierarkier. Arv är en ytterst central egenskap vid objektorienterad programmering. Det var allt för lektion 1. Du kan nu övergå till övning 1 där du bl.a. får ladda hem och installera den utvecklingsmiljö vi ska använda i kursen. Robert Jonsson Sida 33