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

Like dokumenter
Kapittel 1. Datamaskiner og programmeringsspråk. 1.1 Programmering

Kapittel 1: Datamaskiner og programmeringsspråk

Kapittel 1: Datamaskiner og programmeringsspråk

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

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

2 Om statiske variable/konstanter og statiske metoder.

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

Litt om Javas class-filer og byte-kode

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

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

Operativsystemer og grensesnitt

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

2 Om statiske variable/konstanter og statiske metoder.

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

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

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

Generelt om operativsystemer

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

Argumenter fra kommandolinjen

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

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

Programmeringsspråket C

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

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

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

Introduksjon til programmering og programmeringsspråk. Henrik Lieng Høgskolen i Oslo og Akershus

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

Programmeringsspråket C

Programmeringsspråket C

Forelesning inf Java 1

Oversikt. Hva er programmering & Java forkurset til INF1000. Hva er en datamaskin. Arne Maus Inst for Informatikk Univ. i Oslo

INF 1000 høsten 2011 Uke september

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

INF1000 undervisningen INF 1000 høsten 2011 Uke september

Introduksjon til objektorientert programmering

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

Læringsmål og pensum. v=nkiu9yen5nc

Forelesning inf Java 1

Dagens tema Kapittel 8: Objekter og klasser

OPPGAVESETT 1 INTRO. Delta på andre forelesning i emnet, der hovedkomponentene til datamaskinen blir introdusert. Ta notater!

Kapittel 8: Programutvikling

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

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

1. Å lage programmer i C++

INF1000 : Forelesning 1 (del 2)

Debugging. Tore Berg Hansen, TISIP

Fra Python til Java, del 2

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

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

Jentetreff INF1000 Debugging i Java

UNIVERSITETET I OSLO

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

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

Forklaring til programmet AbstraktKontoTest.java med tilhørende filer Konto.java, KredittKonto.java, SpareKonto.java

INF1000 : Forelesning 4

Obligatorisk Innlevering 2

Oversikt. Uke 2, INF 1000, 30 aug Variable, tilordninger og uttrykk. Repetisjon: Java programmering

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

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

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Forelesning inf Java 4

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

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Kapittel 1 En oversikt over C-språket

1. Å lage programmer i C++

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

Feilmeldinger, brukerinput og kontrollflyt

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet doble.rusc (kalt kildekoden): Hva er kompilering?

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

INF 1010, vår 2005 Løsningsforslag uke 11

INF 1000 (uke 2) Variabler, tilordninger og uttrykk

6108 Programmering i Java. Leksjon 1. Introduksjon til programmering og til Java

som jobbet nærmest døgnet rundt i 18 måneder i Menlo Park i California for å forberede den neste bølgen innen computing.

Litt Java-historikk. Litt Java-historikk. Ulike varianter for ulike behov. Litt Java-historikk. The Green Team

Oversikt Kompilering Syntaksanalyse Java Feilsjekking Oppsummering

Det viktigste i en moderne datamaskin er hovedkortet («motherboard»):

Introduksjon til programmering og programmeringsspråk

Oppbygningen av en datamaskin Det viktigste i en moderne datamaskin er hovedkortet («motherboard»):

INF1000 Metoder. Marit Nybakken 16. februar 2004

Minnehåndtering i operativsystemer

Kom i gang med programmering i Java

Forelesning inf Java 5

Forelesning inf Java 5

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 7 Filer og unntak ( exceptions ) Professor Alf Inge Wang Stipendiat Lars Bungum

programeksempel Et større En større problemstilling Plan for forelesingen Problemstillingen (en tekstfil) inneholdt ordet "TGA"

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Oblig4 - forklaringer. Arne og Ole Christian

Blokker og metoder INF1000 (Uke 6) Metoder

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

UNIVERSITETET I OSLO

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

Minnehåndtering i operativsystemer

Et lite oppdrag i bakgrunnen

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

Velkommen til. INF våren 2016

Kort repetisjon av doble (nestede) løkker Mer om 1D-arrayer Introduksjon til 2D-arrayer Metoder

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

Transkript:

Kapittel 1 Datamaskiner og programmeringsspråk Dette kapitlet vil gi en kort innføring i begreper rundt programmering. Et enkelt programeksempel vil illustrere bruken av en del sentrale programmeringsbegreper. Eksemplet er ment som et springbrett inn i programmering, og senere kapitler kommer til å gå grundig gjennom begrepene som blir introdusert her. 1.1 Hva er en datamaskin? En datamaskin er en maskin som kan bli instruert til å behandle data. Datamaskiner har gradvis blitt en del av vår hverdag, og i dagens samfunn er de fleste stadig i kontakt med datamaskiner av et eller annet slag. I utgangspunktet kan en datamaskin være alt fra en kuleramme til en moderne superdatamaskin. Denne boken kommer imidlertid kun til å fokusere på den elektroniske varianten. Slike datamaskiner kan utføre både avanserte og ensformige oppgaver raskt, nøyaktig og pålitelig. En datamaskins bestanddeler Visse grunnleggende bestanddeler finnes i alle elektroniske datamaskiner. For å få en forståelse av hvordan en datamaskin fungerer, må man vite hvilken rolle hver av disse delene har. De fysiske bestanddelene av en datamaskin kalles maskinvare (eng. hardware). Figur 1.1 gir en oversikt over de vanligste komponentene i en datamaskin. Detaljer om notasjonen er gitt i vedlegg G. Figur 1.1 Datamaskinens bestanddeler Datamaskinkjerne henter og sender data til Enheter leser og skriver til Prosessor Minne Innenhet Utenhet Lagringsenhet Tastatur Skjerm Harddisk Diskettstasjon

2 Kapittel 1 Datamaskiner og programmeringsspråk Mesteparten av dataprosesseringen i en datamaskin skjer i en enhet som kalles prosessor. Det er denne sentrale enheten (eng. Central Processing Unit, CPU) som driver hele maskinen. Den er bygd for å kunne utføre visse generelle instruksjoner som kan bli kombinert på forskjellige måter for å kunne utføre komplekse operasjoner. Datamaskiner har en intern lagringsplass for data som kalles minne (eng. memory). Prosessoren leser instruksjoner og data fra dette minnet. Prosessoren kan også skrive resultatet av instruksjonene tilbake til minnet. Informasjon som blir lagret i minnet, går normalt tapt når maskinen slås av. En datamaskin har enheter som den kan sende data til og motta data fra. Det er mulig å klassifisere forskjellige enheter slik som vist på høyre side av Figur 1.1. Et tastatur, som kan brukes til å skrive tekst, er et eksempel på en innenhet. En skjerm, hvor data kan vises, er et eksempel på en utenhet. Noen enheter kan både motta og sende data. For eksempel kan harddisker lagre data som bevares selv om maskinen slås av, og dermed gjøre det mulig å hente dataene fram igjen senere. 1.2 Hva er et program? Et program er en samling prosessorinstruksjoner som en datamaskin kan utføre for å oppnå et bestemt mål. I motsetning til maskinvare kalles programmer som datamaskinen utfører, programvare (eng. software). Hvordan få maskinen til å gjøre det man ønsker? De fleste brukere av dagens datamaskiner benytter seg av ferdiglagde programmer for å utføre vanlige arbeidsoppgaver. Forskjellige programmer kan brukes til ulike formål: tekstbehandlere for å skrive dokumenter, tegneprogrammer for å lage illustrasjoner og regneark for å utføre beregninger. Dette er noen eksempler på ferdiglagde programmer. Hvis det ikke allerede eksisterer et program for å utføre visse typer arbeidsoppgaver, er det mulig å lage nye programmer for å dekke behovet. Det å lage nye programmer kalles programmering. Programmer blir skrevet i spesielle språk som gir en detaljert beskrivelse av hva datamaskinen skal gjøre. Det finnes mange forskjellige programmeringsspråk. Denne boken bruker språket Java til å vise hvordan datamaskiner kan programmeres, men mange av prinsippene kan også benyttes for andre språk. Operasjoner Et program består av et sett operasjoner som blir utført når programmet blir kjørt. Operasjoner er bygget opp av sekvenser av setninger som beskriver hva datamaskinen skal gjøre. Programmering innebærer å bruke programmeringsspråket til å beskrive hva man ønsker datamaskinen skal utføre.

Avsnitt 1.2 Hva er et program? 3 Kildekode (eng. source code) er et program skrevet i et høynivå programmeringsspråk. Kildekode inneholder en høynivå beskrivelse av hva datamaskinen skal gjøre. Å la datamaskinen utføre operasjonene beskrevet i et program kalles å kjøre programmet. I mange programmeringsspråk og dette gjelder også Java er det nødvending å kompilere programmer før de kan kjøres. Kompilering betyr at kildekoden blir oversatt til en form som ligger nærmere de instruksjonene prosessoren i maskinen faktisk kommer til å utføre under kjøring. Programmet som utfører denne oversettingen, kalles kompilator. Typisk vil kildekoden være skrevet i et programmeringsspråk med høynivåoperasjoner som vil bli oversatt til flere elementære lavnivåinstruksjoner. En høynivåoperasjon kan beskrive en kompleks og sammensatt arbeidsoppgave, mens lavnivåinstruksjoner kun beskriver elementære arbeidsinstrukser. Resultatet av en kompilering er et program som er klar for kjøring, og som består av elementære instruksjoner som prosessoren i maskinen kan utføre direkte. En tolker (eng. interpreter) er et program som utfører andre programmer. I motsetning til en kompilator utfører tolkeren programkoden direkte, framfor å oversette programmet til et laverenivåspråk for senere kjøring. Ved bruk av tolkede programmeringsspråk blir oversettingen en del av kjøringen. Dette gjør at det ikke er nødvendig å kompilere kildekoden for å få et program som kan kjøres. Å 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 eggkartong, åpne eggkartongen, 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, eggkartongen, eggene og stekeplaten som forskjellige objekter. Handlingene som kan utføres, er operasjoner tilknyttet disse objektene. Det er for eksempel mulig å åpne en eggkartong, men det er ikke mulig å åpne en stekepanne. Objektbasert programmering (OBP) består av å 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 helt konkrete gjenstander som bøker, tidsskrifter, lydkassetter o.l. og for mer abstrakte konsepter som selve utlånet og den informasjonen som behøves om hver låntager. I det siste tilfellet er låntageren selv et konkret objekt, dvs. en person, mens den informasjonen som biblioteksprogrammet trenger, er abstrakt. 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 manipuleres 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øleskapobjekter utgjør en klasse, mens alle kakestykkeobjekter utgjør en helt annen klasse.

4 Kapittel 1 Datamaskiner og programmeringsspråk En klasse blir definert ved å beskrive hva som er særegent for objektene av denne klassen, og hvilke operasjoner som kan utføres på dem. Et program kan både benytte eksisterende klasser og definere egne klasser. 1.3 Et enkelt Java-program Kildekode Program 1.1 viser kildekoden til et enkelt Java-program. Formålet med kildekode er å kunne beskrive programmer på en måte som både programmerere og datamaskiner kan forstå. Kildekode lagres i rene tekstfiler, som betyr at de 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 for å skrive kildekode, men enhver applikasjon som kan lagre ren tekst, kan brukes. 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.

Avsnitt 1.3 Et enkelt Java-program 5 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 } } Alle språkelementene i et programmeringsspråk følger en viss struktur. Denne strukturen kalles språkets syntaks (eng. syntax). I Java kalles språkelementene som definerer klasser, for klassedeklarasjoner, og operasjonene som defineres i disse klassene, kalles metoder. Figur 1.2 illustrerer syntaksen til klasse- og metodedeklarasjoner. Hvert språkelement har også en bestemt mening, eller semantikk (eng. semantics). Meningen med et program er gitt ved de språkelementene som inngår i kildekoden. Program 1.1 består av en klassedeklarasjon som beskriver en klasse ved navn EnkeltProgram. Denne klassen har en metode ved navn main(). Det er ikke nødvendig å forstå hele programmet på dette tidspunktet. Senere kapitler vil gi en detaljert forklaring på alle bestanddelene i programmet. Det er meningen at kildekode skal være leselig både for datamaskinen og for mennesker. For å hjelpe mennesker med å lese kildekoden er det mulig å 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. Videre i denne boken vil kildekodelinjer bli henvist til ved hjelp av kommentarer på formen (n). Disse kommentarene brukes for å gjøre det enklere å omtale spesifikke kildekodelinjer. 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 på denne formen. Kompilatoren ignorerer fullstendig kommentarer og blanke tekstområder. For kompilatoren sin del 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.");}

6 Kapittel 1 Datamaskiner og programmeringsspråk 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. Figur 1.2 viser innrykk av en metodedeklarasjon nøstet innenfor en klassedeklarasjon. Ryddig kildekode er meget viktig for å gjøre vedlikehold og videreutvikling av programmer enkelt. Metoden main() på linje (2) har en spesiell rolle i programmet. Utførelsen av programmet starter alltid ved main()-metoden. Når programmet starter, vil datamaskinen utføre handlingene i main()-metoden i tur og orden. Et utførbart program må spesifisere en main()-metode, og metoden må ha formen vist i Figur 1.2. Handlinger i metoden vil være avhengig av hva programmet forsøker å oppnå. Variabler er lagringsplasser for verdier. Tallverdier er veldig vanlige, men som vi skal se senere, så finnes det andre typer verdier også. 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 å tilordne (eng. assign) verdien til variabelen. Verdien som tilordnes, kan brukes senere i programmet ved å referere til variabelen. 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 skjermen, og metoden println() kan brukes til å skrive ut en linje med tekst. Setningen ovenfor ber System.outobjektet om å skrive ut teksten "Et kjent ordtak:". Et tekstfragment som dette kalles en tekststreng. System er en klasse som har et objekt (referert ved navnet out) som inneholder metoden println(). 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 på skjermen. I Java er strenger også objekter, og setning (5) kaller metoden length() i strengobjektet 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.3 viser metodekallene som blir utført ved kjøring av programeksemplet.

Avsnitt 1.3 Et enkelt Java-program 7 Figur 1.3 Sekvens av metodekall ved kjøring av program EnkeltProgram main() println("et kjent ordtak:") String ordtak = "Øvelse gjør mester!" ordtak : String println(ordtak) length() 19 println("ordtaket har 19 tegn.") out Fra kildekode til kjøring av program 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 (eng. Java Virtual Machine, JVM). Den virtuelle maskinen er ikke en fysisk maskin, men et program som tolker og utfører bytekodeinstruksjoner på samme måte som en tenkt (virtuell) maskin ville ha utført dem. Figur 1.4 viser gangen i hvordan kildekoden oversettes til en kjørbar form. Den første formen er Java-kildekoden. Java-kompilatoren kan kompilere dette til Java-bytekodeform. Denne bytekoden kan flyttes til og tolkes på alle maskiner som har en Java-virtuell 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.4, er spesifikk for x86-prosessorserien.

8 Kapittel 1 Datamaskiner og programmeringsspråk Figur 1.4 Programkode i forskjellige former eske.fjernfyrstikker(6); System.out.println( Fjernet 6 fyrstikker til. ); int antalletterfjerning = eske.antallfyrstikker(); int differanse = antall - antalletterfjerning; kompileres til prosessoruavhengig Javabytekode aload_1 bipush 6 invokevirtual #21 <Method void fjernfyrstikker(int)> getstatic#22 <Field java.io.printstream out> ldc#4 <String "Fjernet 6 fyrstikker til."> invokevirtual #23 <Method void println(java.lang.string)> aload_1 invokevirtual #17 <Method int antallfyrstikker()> istore_3 iload_2 iload_3 isub istore 4 kan oversettes videre til prosessoravhengig kode (x86-kode vist her) 8b 06 mov (%esi),%eax 6a 06 push $0x6 56 push %esi ff 50 24 call *0x24(%eax) 58 pop %eax 5a pop %edx a1 00 00 00 00 mov 0x0,%eax 8b 10 mov (%eax),%edx ff 35 50 00 00 00 pushl 0x50 50 push %eax ff 52 74 call *0x74(%edx) 8b 06 mov (%esi),%eax 89 34 24 mov %esi,(%esp,1) ff 50 1c call *0x1c(%eax) 5b pop %ebx 5f pop %edi ff 35 54 00 00 00 pushl 0x54 83 ec0c sub $0xc,%esp 89 c6 mov %eax,%esi 8b 45 f0 mov 0xfffffff0(%ebp),%eax 29 f0 sub %esi,%eax Figur 1.5 viser sammenhengen mellom nøkkelkonseptene som vi har omtalt hittill. Mange av disse blir flittig brukt og nærmere utdypet i resten av boken. Figur 1.5 Oppsummering av nøkkelkonseptene Kildekode skrives i Høynivåspråk nedfeller Klasser leses av beskriver nedfeller definerer forskjellige typer er tilknyttet Operasjoner Objekter Kompilator genererer oversettes til bestemmer oppførsel i løser Program er kjørbart som representerer konsepter i Problemstilling Lavnivåinstruksjoner er utført av Prosessor styrer Datamaskin

Avsnitt 1.4 Utviklingsverktøy for Java 9 1.4 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 de kaller Java Software Development Kit (SDK). 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 en kommandolinje hvor man kan skrive inn systemkommandoer man ønsker å få utført. Vil du ha detaljert informasjon om kommandolinjen, se dokumentasjonen til plattformen du bruker. 1.5 Kompilering av Java-programmer For å kompilere Java-kildekode brukes kommandoen javac. Kompilatoren vil lese en ren tekstfil som inneholder kildekoden, og vil for hver klassedeklarasjon bygge en fil som inneholder bytekoden til klassen. En av klassene definert i kildekodefilen er en primærklasse, og kildekodefilen er navngitt etter denne klassen. Den primære klassen er deklarert med modifikatoren 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. Navnet til alle kildekodefilene ender med.java. Syntaksen for kjøring av Java-kompilatoren fra kommandolinjen er > javac EnkeltProgram.java Kompilatoren forlanger det eksakte navnet til filen. Flere kildekodefiler kan spesifiseres. Vær nøye med at navnet til filen er lik navnet på klassen etterfulgt av ".java" bruk av store og små bokstaver er likt som 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 <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, på formen "Klasse~1.jav". Disse skal heller ikke brukes. Kompilatoren lager filer som heter <klassenavn>.class, for hver klasse. Disse filene inneholder bytekode som er blitt kompilert fra klassedeklarasjonene i kildekoden.

10 Kapittel 1 Datamaskiner og programmeringsspråk 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 er det i de fleste tilfeller relativt lett å tolke feilmeldingene og finne feilene i kildekoden. 1.6 Kjøring Kommandoen for å starte den virtuelle maskinen 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 EnkeltProgram Dette vil starte opp den virtuelle maskinen 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.

Avsnitt 1.7 Kontrollspørsmål 11 1.7 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 Spørsmål 1.4 Spørsmål 1.5 Spørsmål 1.6 Man beskriver hva som er særegent med 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 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.9 Hvilken form er programkode vanligvis skrevet og redigert i? (a) (b) (c) kildekode prosessoruavhengige bytekoder prosessoravhengige instruksjoner

12 Kapittel 1 Datamaskiner og programmeringsspråk Spørsmål 1.10 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.8 OPPGAVER Oppgave 1.1 Oppgave 1.2 Oppgave 1.3 Oppgave 1.4 Bruk en tekstebehandler til å skrive en fil ved navn EnkeltProgram.java med kildekoden fra Program 1.1. Kompiler kildekodefilen du lagde i oppgaven ovenfor. Rett eventuelle feil i kildekoden som kompilatoren oppdager. Kjør programmet som ble kompilert i oppgaven ovenfor. Lag et program som skriver ut antall tegn i etternavnet ditt. Bruk kildekoden fra EnkeltProgram.java som utgangspunkt.