Kapittel 1. Datamaskiner og programmeringsspråk. 1.1 Programmering



Like dokumenter
Kapittel 1. Datamaskiner og programmeringsspråk. 1.1 Hva er en datamaskin? En datamaskins bestanddeler

Kapittel 1: Datamaskiner og programmeringsspråk

2 Om statiske variable/konstanter og statiske metoder.

Kapittel 1: Datamaskiner og programmeringsspråk

Kapittel 1: Datamaskiner og programmeringsspråk. Java som første programmeringsspråk

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

INF1000 Metoder. Marit Nybakken 16. februar 2004

Utførelse av programmer, metoder og synlighet av variabler i JSP

Kapittel 1: Datamaskiner og programmeringsspråk. Java som første programmeringsspråk

Øving 0 - Xcode TDT4102

<?php. count tar en array som argument, og returnerer et tall som uttrykker antallet innførsler i arrayen.

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

Litt om Javas class-filer og byte-kode

TOD063 Datastrukturer og algoritmer

2 Om statiske variable/konstanter og statiske metoder.

Fra Python til Java, del 2

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?

Løse reelle problemer

NOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse. INF 5110, 10/5-2011, Stein Krogdahl

Programmering i C++ Løsningsforslag Eksamen høsten 2005

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

INF109 - Uke 1b

Hva er programmering?

Kom i gang med programmering i Java

Dagens tema Kapittel 8: Objekter og klasser

Utførelse av programmer, funksjoner og synlighet av variabler (Matl.)

Programmeringsspråket C

Shellscripting I. Innhold

NOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

Java. INF1000 : Forelesning 2. Ulike varianter for ulike behov. Java Standard Edition (Java SE) Java:

Argumenter fra kommandolinjen

Oversikt. INF1000 Uke 2. Repetisjon - Program. Repetisjon - Introduksjon

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Kom forberedt til tirsdag. INF1000 Tips til obligatorisk oppgave 4. Noen generelle tips. Oblig4: Komme igang

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

Operativsystemer og grensesnitt

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Kapittel 7: Mer om arv

Generelt om operativsystemer

Jentetreff INF1000 Debugging i Java

Javas klasse-filer, byte-kode og utførelse (og litt om C# sin CIL-kode)

Kapittel 8: Programutvikling

I dag. Rep: Oppsummering - variabler. Rep: Datatyper. INF1000 (Uke 3) Mer om uttrykk, terminal I/O, forgreninger

Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Programmeringsspråket C

Hvordan installere Java og easyio på Windows

Introduksjon til objektorientert programmering

Kapittel 1 En oversikt over C-språket

Klasser, objekter, pekere og UML. INF gruppe 13

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

TDT4102 Prosedyreog objektorientert programmering Vår 2016

UNIVERSITETET I OSLO

while-økker while-løkker gjentar instruksjonene så lenge en betingelse er oppfylt Eksempel 1: en enkel while-løkke

I denne oppgaven blir du introdusert for programmeringsspråket JavaScript. Du skal gjøre den klassiske oppgaven Hei verden, med en katt.

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

Forelesning inf Java 1

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

En oppsummering (og litt som står igjen)

INF1000: Forelesning 7. Konstruktører Static

Programmeringsspråket C

Kanter, kanter, mange mangekanter

Del 1: Overgang fra gammel hjemmeside til ny hjemmeside

Programmeringsspråk for nybegynnere. Krav til språket. Krav til språket. Krav til språket

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

Oversikt. Informatikk. INF1000: Grunnkurs i objektorientert programmering. Utenom INF1000 Informasjon & hjelp

Eksekveringsrekkefølgen (del 1) Oppgave 1. Eksekveringsrekkefølgen (del 2) Kommentar til oppgave 1. } // class Bolighus

UNIVERSITETET I OSLO

Introduksjon til dataanlegget ved Institutt for informatikk. Marc Bezem Institutt for informatikk Universitetet i Bergen

INF 1000 høsten 2011 Uke september

INF1000 : Forelesning 1 (del 2)

EKSAMEN 6108/6108N PROGRAMMERING I JAVA Alt trykt og skriftlig materiale.

Ukeoppgaver 1: 30. aug 3. sep (INF Høst 2010)

Obligatorisk oppgave nr. 3 (av 4) i INF1000, våren 2006

MAT-INF 1100: Obligatorisk oppgave 1

INF1000: Forelesning 7

Læringsmål og pensum. v=nkiu9yen5nc

Tildeling av minne til prosesser

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

INF1000 undervisningen INF 1000 høsten 2011 Uke september

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

Generiske mekanismer i statisk typede programmeringsspråk

Kodegenerering del 3: Tilleggsnotat fra AHU Samt litt om class-filer og byte-kode INF5110 V2007. Stein Krogdahl, Ifi UiO

Algoritmer og datastrukturer A.1 Filbehandling på bit-nivå

TDT4102 Prosedyreog objektorientert programmering Vår 2016

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk

JSP - 2. Fra sist. Hvordan fungerer web? Tjenerside script HTML. Installasjon av Web-tjener Et enkelt JSP-script. Ønsker dynamiske nettsider:

INF1000 : Forelesning 4

Innhold. Forord Det første programmet Variabler, tilordninger og uttrykk Innlesing og utskrift...49

Enkle generiske klasser i Java

i=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

UNIVERSITETET I OSLO

Oblig4 - obligatorisk oppgave nr. 4 (av 4) i INF1000

INF Uke 10. Ukesoppgaver oktober 2012

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 1 Introduksjon til Programmering og Python. Professor Alf Inge Wang

81,9(56,7(7(7,26/2 'HWPDWHPDWLVNQDWXUYLWHQVNDSHOLJHIDNXOWHW

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab. Rune Sætre / Anders Christensen {satre, anders}@idi.ntnu.

Transkript:

Kapittel 1 Datamaskiner og programmeringsspråk Dette kapitlet er en kort introduksjon til programmering. Vi vil se på hvordan man skriver, bygger og kjører programmer, samt illustrere noen sentrale programmeringsbegrep ved hjelp av et enkelt programeksempel. Senere kapitler vil gå grundigere igjennom begrepene som blir introdusert her. 1.1 Programmering Moderne datamaskiner utfører sekvenser av instruksjoner raskt, nøyaktig og pålitelig. Instruksjoner arrangeres på visse måter for å få datamaskiner til å utføre både avanserte og ensformige oppgaver. De fleste som bruker dagens datamaskiner er sluttbrukere. De benytter seg kun av ferdiglagde programmer for å utføre vanlige arbeidsoppgaver. De har et utvalg av programmer som de bruker til ulike formål. Tekstbehandlere for å skrive dokumenter, tegneprogrammer for å lage illustrasjoner, og regneark for å utføre beregninger. Å la datamaskinen utføre instruksjonene til et program kalles å kjøre programmet. Figur 1.1 Hovedaktiviteter ved programkodeskriving (start) Redigere kildekode [byggefeil] [mangler eller feil oppdages] (slutt) Bygge program Testkjøre program [ingen byggefeil] [programmet er komplett] Det å lage nye programmer kalles programmering. Som programmerere er det vår oppgave å fortelle datamaskiner hva de skal gjøre. Figur 1.1 viser hovedaktivitetene for å lage program-

2 Kapittel 1 Datamaskiner og programmeringsspråk mer. Man starter med å opprette kildekodefiler som inneholder tekst som beskriver nøyaktig hva maskinen skal gjøre. Fra disse kildekodefilene kan man så bygge et program i maskinkjørbar form. Eventuelle feil i kildekoden som hindrer byggingen av programmet må rettes opp før man kan gå videre. Etter at programmet har blitt bygget vil man vanligvis teste det for å se om det oppfører seg slik som forventet. Hvis man oppdager feil eller mangler i programmet går man tilbake til kildekoden for å redigere og utbedre denne. Langt mer inngår i utvikling av store programmer, men kjennskap til aktivitetene som dekkes av dette kapitlet vil la deg komme i gang med programmeringen. I Java bygger man kjørbare programmer fra kildekode ved hjelp av en kompilator. Kompilatoren oversetter kildekoden til en form som er nærmere de instruksjonene prosessoren i maskinen faktisk kommer til å utføre under kjøring. Vi skriver programmer ved hjelp av språkelementene til et høynivå-programmeringsspråk. I denne formen kalles programmet kildekode og lagres i tekstfiler. Kildekoden inneholder en høynivå-beskrivelse av hva datamaskinen skal gjøre, og må vanligvis oversettes før den kan bli utført på datamaskinen. Det finnes mange forskjellige programmeringsspråk. Program 1.1 er skrevet i språket Java, og det er dette språket hele boken vil bruke for å vise hvordan datamaskiner kan programmeres. Selv om denne boken benytter Java, kan mange av prinsippene som vises her også benyttes for andre språk. Program 1.1 Kildekoden til et enkelt program // (1) Denne kildekodefilen heter EnkeltProgram.java public class EnkeltProgram { // Skriver ut et ordtak, og antall tegn i ordtaket. public static void main(string[] args) { // (2) System.out.println("Et kjent ordtak:"); // (3) String ordtak = "Øvelse gjør mester!"; // (4) System.out.println(ordtak); int antalltegn = ordtak.length(); // (5) System.out.println("Ordtaket har " + antalltegn + " tegn."); Utskrift ved kjøring: Et kjent ordtak: Øvelse gjør mester! Ordtaket har 19 tegn. Dette kildekodeeksemplet beskriver et lite program som finner ut og forteller hvor mange

Avsnitt 1.2 Oppbygningen av programmer 3 tegn et ordtak inneholder. Det er ikke nødvendig å forstå oppbygningen av programmet på dette tidspunktet. Vi vil se nærmere på denne kildekoden så snart vi har introdusert noen begreper som lar oss beskrive hva programmet består av. 1.2 Oppbygningen av programmer Operasjoner Et program består av et sett operasjoner som blir utført når programmet blir kjørt. Operasjonene er bygget opp av sekvenser av handlinger som beskriver hva datamaskinen skal gjøre. Programmering innebærer å bruke programmeringsspråket til å beskrive operasjonene man ønsker datamaskinen skal utføre. Sluttresultatet er programmer som sluttbrukere kan benytte. Å programmere med objekter Operasjonene som må utføres for å fullføre en oppgave involverer ofte forskjellige typer objekter. Tenk på handlingene som må utføres for å lage en omelett: åpne kjøleskapet, ta ut en eggekartong, åpne eggekartongen, ta ut to egg, lukke kartongen, sette kartongen tilbake i kjøleskapet, lukke kjøleskapet, skru på stekeplaten, osv. I denne sammenhengen kan vi betrakte kjøleskapet, eggekartongen, eggene og stekeplaten som forskjellige objekter. Handlingene som utføres er operasjoner tilknyttet disse objektene. Hvilke handlinger som er tilgjengelige, avhenger av typen til objektet. Det er for eksempel mulig å åpne en eggekartong, men det er ikke mulig å åpne en stekepanne. Objektbasert programmering (OBP) innebærer å beskrive større arbeidsoppgaver ved hjelp av operasjoner som utføres på objekter. Nøyaktig hva objektene representerer er avhengig av hva programmet prøver å oppnå. For eksempel kan et program som skal holde styr på alle utlån i et bibliotek ha objekter både for fysiske gjenstander som bøker, tidsskrifter, lydkassetter o.l., og for abstrakte konsepter som selve utlånet og informasjonen som registreres om hver låntaker. I det siste tilfellet er låntakeren selv et håndgripelig objekt, dvs. en person, men samlingen av informasjonen som bibliotekprogrammet trenger, f.eks. navn og adresse til en person, er et begrepsmessig objekt. Programmer har vanligvis flere objekter av samme type. La oss gå tilbake til kjøkkenet. Vi kan ha flere objekter som representerer kakestykker. Hvert kakestykke kan håndteres uavhengig av de andre, men de har alle fellestrekk, slik som muligheten til å spise av det. Vi sier at vi har forskjellige klasser av objekter. Alle kjøleskap-objekter er konkrete tilfeller av en klasse, mens alle kakestykke-objekter er konkrete tilfeller av en helt annen klasse. Et objekt a som er et konkret tilfelle av en klasse kalles for en instans av klassen. En klasse blir definert ved å beskrive hva som er særegent for objektene av denne klassen, og hvilke operasjoner man kan utføre på dem. Et program kan bestå av både egendefinerte klasser og klasser fra andre kilder, som f.eks. standard klassebiblioteket til Java.

4 Kapittel 1 Datamaskiner og programmeringsspråk 1.3 Programmeringsspråket Java Språkelementene til programmeringsspråket Java følger en viss struktur. Denne strukturen kalles språkets syntaks. En klassedeklarasjon er et språkelement i Java som brukes til å definerer klasser, og operasjonene som defineres i disse klassene kalles metoder. Figur 1.2 Klasse- og metodedeklarasjoner klassedeklarasjon klassenavn metodedeklarasjon public class EnkeltProgram { metodenavn public static void main(string[] args) { handlinger som skal utføres i sekvens parametere Figur 1.2 fremhever syntaksen til klasse- og metodedeklarasjonene fra kildekoden til Program 1.1. Programmet har en klassedeklarasjon som beskriver en klasse ved navn Enkelt- Program. Denne klassen har en metode ved navn main. Hvert språkelement har også en bestemt mening eller semantikk (eng. semantics). Meningen med et program er dermed gitt ved meningen til språkelementene som inngår i kildekoden. Det er ønskelig at kildekode skal være leselig både for datamaskinen og for mennesker. For å hjelpe mennesker å lese kildekoden, er det anbefalt å legge inn kommentarer. Det er to former for kommentarer i Java. Den ene typen starter med // og varer ut resten av linjen. Linjen med // (1), dvs. den øverste linjen i Program 1.1, er en slik kommentar. For å gjøre det enklere å omtale spesifikke kildekodelinjer vil vi utover i denne boken henvise til kildekodelinje-kjennemerker som (n), hvor n er et nummer. Den andre formen for kommentarer består av all tekst mellom tegnsekvensen /* og */. Denne formen er ikke brukt i dette programeksemplet, men vil bli brukt i senere kapitler. Kommentarer som har flere linjer med tekst blir som regel skrevet med denne formen. Kompilatoren ignorerer fullstendig kommentarer og en del spesialtegn som mellomrom og linjeskift. For kompilatorens del, så kan gjerne main()-metoden ved (2) i eksemplet skrives som: public static void main(string[]args){system.out.println( "Et kjent ordtak:");string ordtak="øvelse gjør mester!";system.out. println(ordtak);int antalltegn=ordtak.length();system.out.println( "Ordtaket har "+antalltegn+" tegn.");

Avsnitt 1.3 Programmeringsspråket Java 5 Programmet vil oppføre seg helt likt, men det er vanlig å sette opp kildekoden slik at den er lett å forstå. Det er vanlig å skrive en setning per linje og bruke innrykk fra venstremargen for å vise at språkstrukturer er nøstet innenfor hverandre. For å utnytte side-arealet bedre vil eksemplene i denne boken bruke to mellomromstegn for innrykk. I Java er det vanlig å la hvert innrykksnivå bestå av fire mellomromstegn, og vi anbefaler at du bruker denne innrykksdybden når du selv skriver kildekode. Figur 1.2 viser innrykk av en metodedeklarasjon nøstet innenfor en klassedeklarasjon. Ryddig kildekode er meget viktig for å lette vedlikehold og videreutvikling av programmer. Program 1.1 definerer en metode med navnet main i (2). Metoden main() har en spesiell rolle i et program. Utførelsen av programmet starter alltid ved denne main()-metoden. Alle Java programmer har en slik main()-metode som startpunkt. Som vist i Figur 1.2 har main()-metoden parameteren String[] args. Denne parameteren blir omtalt i delavsnittet «Metoden main() og kommandolinjeargumenter» på side 131. Når vi nevner en metode i denne boken så legger vi til «()» etter metodenavnet for å indikere at det er en metode. Det betyr ikke nødvendigvis at metoden ikke har noen parametere. Når programmet starter vil datamaskinen utføre handlingene i main()-metoden i tur og orden. Alle kjørbare programmer må spesifisere en main()-metode og metoden må ha den samme formen som vist i Figur 1.2. Setningene i metoden vil selvsagt avhenge av hva programmet forsøker å oppnå. Den første setningen som blir utført når programmet starter er (3): System.out.println("Et kjent ordtak:"); Denne setningen utfører et kall til en operasjon ved navn println som tilhører et objekt kjent som System.out. Dette objektet er ansvarlig for å skrive ut tekst til terminalvinduet (Figur 1.3), og metoden println() kan brukes til å skrive ut en linje med tekst. Figur 1.3 Terminalvindu med utskrevet tekst Setningen ovenfor ber System.out objektet om å skrive ut teksten "Et kjent ordtak:". En slik tekst som dette kalles en tekststreng. Navnet System angir en klasse som har et objekt (referert ved navnet out) som inneholder metoden println(). Variabler er lagringsplasser for verdier. Tallverdier er svært vanlige, men som vi skal se senere, finnes det også andre typer verdier. Variabler kan brukes lokalt i metoder, slik som ordtak og antall blir brukt i main()-metoden i eksemplet. Å lagre en verdi i en variabel kalles

6 Kapittel 1 Datamaskiner og programmeringsspråk å tilordne (eng. assign) verdien til variabelen. Verdien som tilordnes kan brukes senere i programmet ved å referere til variabelen. Setningen ved (4) deklarerer en variabel ved navn ordtak og tilordner denne variabelen tekststrengen "Øvelse gjør mester". Programmet kan nå referere til denne strengen ved å bruke navnet ordtak. I den neste linjen skrives så strengen som ordtak refererer til ut i terminalvinduet. I Java er strenger objekter, og setning (5) kaller metoden length() på streng-objektet for å finne ut hvor mange tegn strengen inneholder. Dette antallet lagres i variabelen antalltegn, som er definert på samme linje. Når en metode blir brukt i en setning, vil innholdet i metoden bli utført før kjøringen av programmet fortsetter til neste setning. Dette kalles et metodekall. Figur 1.4 viser metodekallene som blir utført ved kjøring av programeksemplet. Ved å lese metodekallene fra topp til bunn i Figur 1.3 ser du skritt for skritt hva programmet vil gjøre. Figur 1.4 Sekvens av metodekall ved kjøring av program main() EnkeltProgram println("et kjent ordtak:") out String ordtak = "Øvelse gjør mester!" ordtak:string println(ordtak) length() 19 println("ordtaket har 19 tegn.") 1.4 Redigering av kildekode Kildekode lagres i rene tekstfiler. Med dette menes det at kildekodefiler kun inneholder tegnene som utgjør selve teksten i kildekoden, og har ingen stilformatering. Tekstbehandlere som Microsoft Word er ikke egnet til å skrive kildekode, siden de legger stor vekt på formateringen og utseendet til dokumentet. Det finnes egne tekstbehandlere som er egnet til å skrive kildekode, men enhver applikasjon som kan lagre ren tekst kan brukes. Kompilatoren som bygger programmet fra kildekoden forlanger at kildekodefilen har et bestemt navn. Når du lagrer koden du redigerer, bør du være nøye med at: navnet til filen er lik navnet på klassen den inneholder, etterfulgt av «.java». bruk av store og små bokstaver i filnavnet er likt bruken i navnet på klassen. Enkelte operativsystemer viser vanligvis ikke slutten på filnavnet. Det er viktig at filen ikke blir lagret med en ekstra filnavnsending. Typiske feil er å lagre kildekoden ved navn «<navn>.java.doc» eller «<navn>.java.txt». Selv om operativsystemet kun viser navnet

Avsnitt 1.5 Utviklingsverktøy for Java 7 «<navn>.java», så vil ikke dette fungere når man skal kompilere kildekoden på kommandolinjen. Merk også at Microsoft Windows har alternative kortversjonsnavn for filer, som f.eks. «Klasse~1.jav». Slike filnavn kan heller ikke brukes for kildekodefiler. 1.5 Utviklingsverktøy for Java Kompilering og kjøring av programmer kan gjøres på mange forskjellige måter, avhengig av hvilke verktøy som benyttes. De neste avsnittene vil vise hvordan man kompilerer og kjører programmer ved hjelp av standardverktøyene til Java. Sun Microsystems tilbyr en pakke med verktøy som kalles Java Development Kit (JDK). Denne pakken inneholder de grunnleggende verktøyene som trengs for å programmere i Java, og er beskrevet i vedlegg F. I denne boken vil vi vise hvordan kompilering og kjøring av programmer gjøres på kommandolinjen. De fleste maskinplattformer har terminalvinduer med kommandolinjer hvor man kan skrive inn systemkommandoer man ønsker å få utført. Kommandolinjen kan være et svært effektivt verktøy for programmerere som har tatt seg tid til å lære hvordan man drar full nytte av den. Du bør ta en titt på dokumentasjonen til plattformen du bruker, hvis du trenger informasjon om hvordan du bruker kommandolinjen. 1.6 Kompilering av Java-programmer Syntaksen for kjøring av Java-kompilatoren fra kommandolinjen er: > javac EnkeltProgram.java Kompilatoren javac leser en ren tekstfil som inneholder kildekoden, og vil for hver klassedeklarasjon i kildekoden bygge en fil som inneholder bytekoden til klassen. (Se Figur 1.5.) En av klassene definert i kildekodefilen er en primærklasse, og kildekodefilen er navngitt etter denne klassen. Den primære klassen er markert med nøkkelordet public. For små programmer er dette som oftest klassen som inneholder main()-metoden. Det er praktisk å dele opp store programmer i flere kildekodefiler. Da inneholder hver kildekodefil vanligvis kun én klassedeklarasjon.

8 Kapittel 1 Datamaskiner og programmeringsspråk Figur 1.5 Kompilering av kildekode med en eller flere klasser EnkeltProgram.java public class EnkeltProgam { //... kompileres av genererer EnkeltProgram.class javac (kjørbar bytekode) HovedKlasse.java public class HovedKlasse { //... class Ekstra { //... kompileres av javac genererer genererer HovedKlasse.class Ekstra.class Flere kildekodefiler kan spesifiseres i samme kommando. Kompilatoren lager filer som heter «<klassenavn>.class» for hver klasse. Disse filene inneholder bytekode som er blitt kompilert fra klassedeklarasjonene i kildekoden. Kompilatoren kan oppdage feil i kildekoden når den prøver å oversette den til bytekode. Kompilatoren vil rapportere slike feil og avbryte kompileringen. Kildekoden må da rettes opp slik at kompilatoren kan kompilere programmet. Feilmeldingene fra kompilatoren gir opplysninger om hva den mener er galt. Med litt øvelse går det stort sett greit å tolke feilmeldingene og finne årsaken til feilene. 1.7 Kjøring Kommandoen for å starte kjøring av kompilerte Java-programmer er java. Denne kommandoen må ikke forveksles med kommandoen for å starte kompilatoren som er javac. Syntaksen for kjøring av Java-programmer fra kommandolinjen er: > java -ea EnkeltProgram Dette vil starte opp et kjøremiljø for Java som kalles for en virtuell maskin, og vil begynne utføringen av main()-metoden til den angitte klassen. Kommandoen java trenger det eksakte navnet til klassen med main()-metoden. Vær nøye med at: kun det eksakte klassenavnet blir angitt. Det skal ikke være noen «.class» eller «.java» ending. store og små bokstaver ikke forveksles i klassenavn. kildekoden er blitt kompilert, slik at det finnes «.class» filer for alle klassene som programmet består av. Når programmet kjøres med kommandoen ovenfor skrives følgende linjer ut i terminalvinduet:

Avsnitt 1.8 Den virtuelle Java-maskinen 9 Et kjent ordtak: Øvelse gjør mester! Ordtaket har 19 tegn. Ved kjøring av Java-programmer under Windows forekommer det ofte at innstillingene til terminalvinduet hvor programmet kjører får norske tegn til å se merkelige ut, f.eks: +velse gj r mester! Dette kan ordnes ved å åpne egenskapene til terminalvinduet og velge «Lucida Console» istedenfor «Raster Fonts» og utføre kommandoen «chcp 1252» i terminalvinduet. 1.8 Den virtuelle Java-maskinen I Java blir kildekode først kompilert til et sett lavnivå-instruksjoner som går under navnet Java-bytekode. Denne bytekoden blir under kjøring tolket av en virtuell maskin (Java Virtual Machine, JVM). Istedenfor en fysisk maskin består den virtuelle maskinen av et program som tolker og utfører bytekode-instruksjoner på samme måte som en reell maskin ville ha utført elementære instruksjoner. Figur 1.6 viser gangen i hvordan noen linjer kildekode oversettes til kjørbar form. Java-kompilatoren kan kompilere dette til Java-bytekodeform. Denne bytekoden kan flyttes til og tolkes på alle maskiner som har en virtuell Java-maskin. Man sier at bytekoden er plattformuavhengig, siden den ikke er låst til en bestemt maskintype. Noen virtuelle maskiner tolker denne koden direkte, mens andre omkompilerer den til en tredje form ved kjøring. Den tredje formen vil alltid være tilpasset den typen prosessor som maskinen har. Dette betyr at kode i denne formen kun kan brukes på maskiner av en bestemt type. Denne siste formen som er vist i Figur 1.6 er spesifikk for x86-prosessorserien. Med litt trening er det mulig å følge oversettelsen fra høynivå- til lavnivåkode, f.eks. hvordan subtraksjonen i siste linje i kildekoden blir oversatt til en «isub» bytekode og en «sub» lavnivåinstruksjon.

10 Kapittel 1 Datamaskiner og programmeringsspråk Figur 1.6 Programkode i forskjellige former kompileres til prosessoruavhengig Java bytekode kan oversettes videre til prosessoravhengig kode (x86-kode vist her) 1.9 KONTROLLSPØRSMÅL Spørsmål 1.1 Spørsmål 1.2 Spørsmål 1.3 Datamaskiner har en som utfører generelle instruksjoner og driver hele maskinen. er en høynivå-beskrivelse av hva datamaskinen skal gjøre, skrevet i et. Hvilke av disse komponentene er programvare? (a) (b) (c) (d) (e) en kompilator et tastatur en tolker resultatet av kompilert kildekode en prosessor

Avsnitt 1.10 Oppgaver 11 Spørsmål 1.4 Spørsmål 1.5 Spørsmål 1.6 Man beskriver hva som er særegent ved objekter ved å definere. Alle Java-programmer har en ved navn der utføringen av programmet starter. Hvilket utsagn beskriver objektbasert programmering (OBP) best? (a) (b) (c) (d) å lage en omelett å definere klasser av objekter og operasjoner som kan utføres av disse objektene å kompilere kildekode til Java-bytekoder å oversette programmer til prosessoravhengig kode Spørsmål 1.7 Spørsmål 1.8 Spørsmål 1.9 Program 1.1 har en klasse ved navn og en metode ved navn. For å kompilere en kildekodefil TestProgram.java kan kommandoen utføres på kommandolinjen. For å kjøre et Java-program med en primærklasse som heter TestProgram, så kan kommandoen utføres på kommandolinjen. Spørsmål 1.10 Hvilken form er programkode vanligvis skrevet og redigert i? (a) (b) (c) kildekode prosessoruavhengige bytekoder prosessoravhengige instruksjoner Spørsmål 1.11 Hvilke av disse filnavnene er gyldige for en Java-kildekodefil som definerer en primærklasse som heter Hund? (a) (b) (c) (d) (e) Katt.java Hund.jav Hund.java Hund.java.doc HUND.JAVA 1.10 OPPGAVER Oppgave 1.1 Oppgave 1.2 Bruk en tekstebehandler til å skrive en fil ved navn EnkeltProgram.java som inneholder kildekoden fra Program 1.1. Kompiler kildekodefilen du lagde i oppgave 1.1. Rett eventuelle feil i kildekoden som kompilatoren oppdager.

12 Kapittel 1 Datamaskiner og programmeringsspråk Oppgave 1.3 Kjør programmet som ble kompilert i oppgave 1.2. Oppgave 1.4 Oppgave 1.5 Lag et program som skriver ut antall tegn i etternavnet ditt. Bruk kildekoden fra EnkeltProgram.java som utgangspunkt. Wales har en by ved navn Llanfairpwllgwyngyllgogerychwyrndrobwyllllantysiliogogogoch. På New Zealand er det en ås som har blitt gitt det lange navnet Taumatawhakatangihangakoauauotamateapokaiwhenuakitanatahu. Lag et program som beregner hvor mange flere tegn stedsnavnet i New Zealand har i forhold til navnet på byen i Wales.