1. Tråder og socketprogrammering.

Størrelse: px
Begynne med side:

Download "1. Tråder og socketprogrammering."

Transkript

1 Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag 1. Tråder og socketprogrammering. Else Lervik Lærestoffet er utviklet for faget LO346D Java EE og distribuerte systemer 1. Tråder og socketprogrammering. Resymé: Å lage distribuerte systemer forutsetter en viss kjennskap til trådprogrammering. Vi begynner derfor med en introduksjon til dette temaet. Deretter lager vi vårt første virkelige distribuerte system, det vil si at vi skal lage to Java-programmer som kan kjøre samtidig på hver sin maskin og sende data til hverandre. Teknikken vi skal bruke kalles socketprogrammering. Programmering på dette nivået krever gode kunnskaper om unntakshåndtering. Leksjonen avsluttes derfor med en gjennomgang av dette emnet. Innhold 1. TRÅDER OG SOCKETPROGRAMMERING....1 HVA ER ET DISTRIBUERT SYSTEM?...1 HVA ER JAVA EE?...3 TRÅDPROGRAMMERING...3 SOCKETPROGRAMMERING...7 UNNTAKSHÅNDTERING...8 En liten øvingsoppgave...11 Svar på oppgaven foran...12 Referanser til læreboka Trådprogrammering og socketprogrammering: Lervik & Havdal: Programmering i Java, kap , 16.6 og Unntakshåndtering: Lervik & Havdal: Programmering i Java, 1. utgave: kap. 8.4 eller 2./3. utgave: kap. 11. Hva er et distribuert system? Et distribuert system består av flere programmer som kjører på flere datamaskiner, og som kommuniserer med hverandre. For å laste ned denne leksjonen har du brukt et distribuert programsystem. Systemet består av et program som kjører på en datamaskin her ved HiST og et program som kjører på din PC. Programmene kommuniserer via det store nettverket som vi kaller Internett. Programmet som kjører på vår maskin, kalles en web-tjener og har som oppgave å besvare henvendelser om bestemte web-sider fra andre maskiner i nettverket. Programmet surrer og går hele tiden og sjekker stadig om det er kommet noen forespørsler. Forespørslene kommer fra et program Opphavsrett: Forfatteren og Stiftelsen TISIP

2 1. Tråder og socketprogrammering. side 2 av 12 som kalles en nettleser eller web-klient. Nettleserne kan være av ulik fabrikat (Microsoft Internet Explorer og Opera er to eksempler), men de må alle kommunisere med tjenerprogrammet slik tjenerprogrammet bestemmer. Et sett slike regler kalles en protokoll. Her er det HTTP-protokollen som brukes. Protokoller fins i flere lag. Under vil vi alltid ha Internett-protokollen (IP). På et eller annet tidspunkt ble forespørselen fra nettleseren på din PC sendt til oss, og websidene for dette faget ble sendt tilbake til nettleseren slik at den kunne vise dem fram på skjermen for deg. Web-tjeneren og nettleseren er to programmer som kommuniserer. Nettleseren etterspør tjenester og spiller derfor klientrollen i samarbeidet. Web-tjeneren utfører tjenestene og spiller dermed tjenerrollen (jamfør navnet web-tjener). Klient og tjener er viktige begreper i denne sammenhengen. Samme tjener kan vanligvis betjene flere forskjellige klientprogrammer tilsynelatende samtidig. Se figuren. nettleser kjører hos Per gi meg HTML-koder sendes nettleser kjører hos Kari gi meg HTML-koder sendes web-tjener kjører hos HiST, AITeL Ett tjenerprogram betjener flere klientprogrammer Et annet eksempel er e-post-systemene, der mange e-postklienter kan kommunisere med det samme e-post-tjenerprogrammet. Vi benevner ofte den maskinen der klientprogrammet kjører som klientmaskin. På samme måte kjører tjenerprogrammet på en tjenermaskin. Imidlertid må vi huske at også dette er roller, det er fullt mulig å kjøre både klient- og tjenerprogrammer på den samme maskinen. Ja, samme program kan faktisk også spille begge rollene. I denne leksjonen skal vi lage det aller enkleste distribuerte systemer du kan tenke deg: Vi skal lage to programmer, der data som leses inn i det ene programmet (klientprogrammet), overføres til det andre programmet og skrives ut der (tjenerprogrammet). Både klient- og tjenerprogram vil kjøre på den samme maskinen. Dersom du har muligheten, vil du også kunne kjøre disse to programmene på hver sin maskin. Senere skal vi lage prateprogram og program som lar ulike klienter kommunisere med den samme databasen via et tjenerprogram.

3 1. Tråder og socketprogrammering. side 3 av 12 Hva er Java EE? Java EE står for Java Enterprise Edition og er et tillegg til Java SE (Java Standard Edition). Dette er et rammeverk for komponentbasert utvikling på tjenersiden i et distribuert system. En komponent er en enhet for utvikling og gjenbruk. Java EE-komponenter kalles Enterprise Beans. Tjenersiden organiseres som en såkalt applikasjonstjener, det vil si et system som tilbyr mange forskjellige applikasjoner (tjenerprogram) til klientene. ("Enterprise Beans" må ikke forveksles med Java Beans, som ikke er noe annet enn vanlige Java-klasser kodet etter bestemte regler mht navngiving osv. Ved at de er kodet på en bestemt måte, er slike Java Beans velegnet til automatisert bruk i verktøy.) En komponent på tjenersiden kjører i en såkalt container. Containeren har overtatt mye av ansvaret som tidligere lå hos programmereren, f. eks. kommunikasjon mot ulike databasesystemer og sikkerhetskontroller. Trådprogrammering Vi går rett på sak og presenterer to eksempler på trådprogrammering. Deretter bør du lese læreboka for å få flere detaljer og mer teori på plass. Se på følgende program (vedlagt i zip-fil): /* * ToNavn.java EL * */ class Navnskriver extends Thread { private String navn; private int teller = 1; public Navnskriver(String startnavn) { navn = startnavn; public void run() { while (teller <= 50) { System.out.print(teller + ": " + navn + ". "); teller++; class ToNavn { public static void main(string[] args) { Navnskriver skriver1 = new Navnskriver("Beate"); Navnskriver skriver2 = new Navnskriver("Ingrid"); skriver1.start(); skriver2.start(); /* Kjøring av programmet (utskriften blir forskjellig hver gang du kjører): 1: Beate. 2: Beate. 3: Beate. 4: Beate. 5: Beate. 6: Beate. 7: Beate. 8: Beate. 9: Beate. 10: Beate. 11: Beate. 12: Beate. 13: Beate. 1: Ingrid. 2: Ingrid. 3: I ngrid. 4: Ingrid. 5: Ingrid. 6: Ingrid. 7: Ingrid. 8: Ingrid. 9: Ingrid. 10: Ing rid. 11: Ingrid. 12: Ingrid. 13: Ingrid. 14: Ingrid. 15: Ingrid. 16: Ingrid. 17:

4 1. Tråder og socketprogrammering. side 4 av 12 Ingrid. 18: Ingrid. 19: Ingrid. 20: Ingrid. 21: Ingrid. 22: Ingrid. 23: Ingrid. 24: Ingrid. 25: Ingrid. 26: Ingrid. 27: Ingrid. 28: Ingrid. 29: Ingrid. 30: Ing rid. 31: Ingrid. 32: Ingrid. 33: Ingrid. 14: Beate. 15: Beate. 16: Beate. 17: Be ate. 18: Beate. 19: Beate. 20: Beate. 21: Beate. 22: Beate. 23: Beate. 24: Beate. 25: Beate. 26: Beate. 27: Beate. 28: Beate. 29: Beate. 30: Beate. 31: Beate. 3 2: Beate. 33: Beate. 34: Beate. 35: Beate. 36: Beate. 37: Beate. 38: Beate. 39: Beate. 40: Beate. 41: Beate. 42: Beate. 43: Beate. 44: Beate. 45: Beate. 46: Bea te. 47: Beate. 48: Beate. 34: Ingrid. 35: Ingrid. 36: Ingrid. 37: Ingrid. 38: In grid. 39: Ingrid. 40: Ingrid. 41: Ingrid. 42: Ingrid. 43: Ingrid. 44: Ingrid. 45 : Ingrid. 46: Ingrid. 47: Ingrid. 48: Ingrid. 49: Ingrid. 50: Ingrid. 49: Beate. 50: Beate. */ Kompiler og kjør programmet. Hvordan ser utskriften din ut? Dersom alle 50 Beate kommer først, øk tallet 50 til f.eks Meningen er at det skal komme ujevne antall av hvert navn. Her har vi først 13 Beate, deretter 33 Ingrid, så kommer 35 Beate, 17 Ingrid og 2 Beate helt til slutt. Jeg kjørte programmet en gang til. Da fikk jeg 16 Beate, 31 Ingrid, 34 Beate og 19 Ingrid til slutt. Hva skjer her? Se på kildekoden. Vi har to objekter som tilhører klassen Navnskriver. Klassen er subklasse til Thread. Til slike objekter kan vi sende meldingen start(), se nederst i programmet. Da utføres noe administrasjon etterfulgt av metoden run() som vi har programmert. Det er inne i denne metoden at utskriften ligger. Men som vi ser, det er ikke slik at metoden som tilhører objektet skriver1 blir utført i sin helhet først. Etter at Beate er skrevet ut f.eks. 13 ganger, så overføres kontrollen til det andre objektet slik at Ingrid skrives ut et visst antall ganger. Deretter er vi tilbake til det første objektet igjen. Java-tolkeren (eventuelt operativsystemet) deler tiden mellom trådene med hard hånd, uavhengig av hvor mye en tråd har fått gjort i det tidsrommet den hadde tilgang til prosessoren. I et Java-program kan vi kjøre flere tråder tilsynelatende parallelt. Dette er nyttig når vi har flere oppgaver som skal utføres samtidig. Et tjenerprogram vil f.eks. kjøre en tråd for hver klient det betjener. Hver enkelt klient vil dermed få tilgang til tjenestene tilsynelatende uavhengig av alle de andre klientene. (Det eneste klienten kanskje merker er at responstiden varierer, den vil jo være avhengig av det totale antallet klienter som tjenerprogrammet betjener samtidig.) En tråd i tjenerprogrammet må også ha ansvaret for å lytte etter nye klienter som ønsker kontakt. Når en ny klient dukker opp, må den sørge for at denne klienten får et eget trådobjekt å kommunisere med. Enten opprettes et nytt trådobjekt, eller klienten må vente til et eksisterende trådobjekt blir ledig. Det er mulig for oss som programmerer å styre når en tråd skal gi fra seg kontrollen til en annen tråd. Detaljene her vil vi ikke komme inn på i dette kurset. Interesserte henvises til læreboka. I distribuerte systemer vil vi ofte ha den situasjonen at flere klienter jobber mot det samme tjenerobjektet. Dersom dette objektet har mutasjonsmetoder (metoder som endrer datainnholdet i objektet), er det ofte viktig at disse metodene blir gjennomført i sin helhet før andre av objektets metoder blir utført. Selv om metoden består av bare en eneste Java-setning, må vi huske at den oversettes til bytekode, og en Java-setning kan bli til flere byteinstruksjoner. Prosessoren kan skifte fra en tråd til en annen mellom hvilke to som helst av byte-instruksjonene. Det er ikke bare nødvendig at mutasjonsmetodene blir utført som en enhet, også tilgangsmetodene bør utføres som en enhet, slik at de jobber med konsistente data.

5 1. Tråder og socketprogrammering. side 5 av 12 Et enkelt eksempel har vi dersom penger skal overføres fra en konto til en annen. Det er viktig at begge saldoene oppdateres, før for eksempel en av kundene sjekker kontoen. (Nå ser vi bort fra at pengene faktisk ofte bruker en del tid fra en konto til en annen vi antar at kravet er øyeblikklig overføring.). Kontoeksemplet er programmet nedenfor: /* * Kontoer.java EL * */ class Kontoer { private double saldo1 = 0.0; private double saldo2 = 0.0; public synchronized void overførpenger(boolean fra1, double beløp) { if (fra1) { saldo1 -= beløp; System.out.print(fra1 + ", saldo 1: " + saldo1); saldo2 += beløp; System.out.println(", " + "saldo 2: " + saldo2); else { saldo2 -= beløp; System.out.print(fra1 + ", saldo 2: " + saldo2); saldo1 += beløp; System.out.println(", " + "saldo 1: " + saldo1); class KontoKlient extends Thread { private Kontoer k; private boolean fra; public KontoKlient(Kontoer startkontoer, boolean startfra) { k = startkontoer; fra = startfra; public void run() { for (int i = 0; i < 10; i++) { k.overførpenger(fra, i * 100); class TestKontoer { public static void main(string[] args) { Kontoer k = new Kontoer(); KontoKlient klient1 = new KontoKlient(k, true); KontoKlient klient2 = new KontoKlient(k, false); klient1.start(); klient2.start();

6 1. Tråder og socketprogrammering. side 6 av 12 /* Kjøring av programmet, uten synchronized: true, saldo 1: 0.0, saldo 2: 0.0 ok, klient1 true, saldo 1: , saldo 2: ok, klient1 overfører 100 kr true, saldo 1: , saldo 2: ok, klient1 overfører 200 kr true, saldo 1: , saldo 2: ok, klient1 overfører 300 kr true, saldo 1: , saldo 2: ok, klient1 overfører 400 kr true, saldo 1: false, saldo 2: , saldo 1: ikke ok, se nedenfor false, saldo 2: 900.0, saldo 1: false, saldo 2: 700.0, saldo 1: false, saldo 2: 400.0, saldo 1: false, saldo 2: 0.0, saldo 1: false, saldo 2: , saldo 1: 0.0 false, saldo 2: , saldo 1: false, saldo 2: , saldo 1: false, saldo 2: , saldo 1: false, saldo 2: , saldo 1: , saldo 2: true, saldo 1: , saldo 2: true, saldo 1: , saldo 2: true, saldo 1: 900.0, saldo 2: true, saldo 1: 0.0, saldo 2: 0.0 Kjøring av programmet, med synchronized: true, saldo 1: 0.0, saldo 2: 0.0 true, saldo 1: , saldo 2: true, saldo 1: , saldo 2: true, saldo 1: , saldo 2: true, saldo 1: , saldo 2: false, saldo 2: , saldo 1: false, saldo 2: 900.0, saldo 1: false, saldo 2: 700.0, saldo 1: false, saldo 2: 400.0, saldo 1: false, saldo 2: 0.0, saldo 1: 0.0 false, saldo 2: , saldo 1: false, saldo 2: , saldo 1: false, saldo 2: , saldo 1: false, saldo 2: , saldo 1: false, saldo 2: , saldo 1: true, saldo 1: , saldo 2: true, saldo 1: , saldo 2: true, saldo 1: , saldo 2: true, saldo 1: 900.0, saldo 2: true, saldo 1: 0.0, saldo 2: 0.0 */ Programmet er både forenklet og kunstig i forhold til en realistisk situasjon. Trådklassen heter KontoKlient, og et objekt av denne klassen representerer en klient som skal jobbe med et objekt av klassen Kontoer. Når tråden kjører, blir run()-metoden utført. Den gjør 10 overføringer av penger. Et objekt av klassen Kontoer har to objektvariabler, saldo1 og saldo2 og kun én metode: overførpenger(). Det første argumentet i metoden forteller hvilken vei pengene skal

7 1. Tråder og socketprogrammering. side 7 av 12 overføres. Dersom det er true, skal pengene overføres fra saldo1 til saldo2. For hver oppdatering skrives verdiene til saldo1 og saldo2 ut. Hovedprogrammet oppretter et objekt av klassen Kontoer. Objektet heter k. Deretter opprettes to klientobjekter, klient1 og klient2 som kjører i egne tråder og som begge skal jobbe med objektet k. Det ene klientobjektet skal overføre penger fra saldo1, det andre fra saldo2. Første del av utskriften forutsetter at synchronized ikke er med i metodehodet overførpenger(). Studer denne delen av utskriften. Hva skjer på linjen merket "ikke ok"? Her blir klient1 avbrutt midt i metoden overførpenger(). Klient1 rekker å få skrevet ut saldo1 før han mister programkontrollen. Klient2 jobber videre ut i fra at saldo1 er 1000, mens saldo2 er Det vil si at de 500 kronene som klient1 skulle overføre fra saldo1 til saldo2, kun er trukket fra på saldo1, men ikke lagt til saldo2 ennå. Det skjer først når klient1 får tilbake kontrollen. Ved å sette modifikatoren synchronized foran metodenavnet oppnår vi at en tråd får gjøre seg ferdig med hele metoden før neste tråd slipper til. Tråden (dvs. den ene klienten) har fått objektets lås, ingen andre får gjøre noen ting med dette objektet via objektets synkroniserte metoder før denne tråden er ferdig med metoden sin. Andre tråder kan få prosessortid pga den tidsdelingen som foregår mellom trådene, men det er i tilfelle for å arbeide med andre objekter. (Eller med dette objektets usynkroniserte metoder. Derfor er det en god regel å gjøre alle metodene synkroniserte, dersom det er nødvendig å gjøre minst en metode synkronisert.) Socketprogrammering Tiden er inne til å lage kursets første distribuerte system. Det er så enkelt at det kun kan håndtere en eneste klient, men vi skal iallfall se at programmer som kjører på hver sine maskiner kan kommunisere med hverandre. Vel nå er det ikke sikkert du har muligheten til å bruke to forskjellige maskiner, men da kjører du i to Java-tolkere på samme maskin. Last ned filene SocketTjener.java og SocketKlient.java fra boka sin hjemmeside ( Kompiler. Kjør programmet SocketTjener. Dersom du kjører fra kommandolinjen, må du starte det i et eget vindu. Dette er et tjenerprogram, og det skal ikke stoppe. Det ser ut som det henger, og det skal gjøre akkurat det. Henge og vente på at en klient tar kontakt. Kjør programmet SocketKlient. Du skal nå ha to konsollvinduer oppe: Socket-tjener og -klient i hvert sitt konsollvindu Svar localhost (det betyr at tjener- og klientprogram kjører på samme maskin) på spørsmålet i det nederste vinduet, og følg med på hva som skjer videre i begge vinduene. Du skal skrive inn tekster i det nederste vinduet, som vises i det øverste vinduet.

8 1. Tråder og socketprogrammering. side 8 av 12 I stedet for localhost kan du prøve med maskinnavn eller ip-adresse. 1 Dersom du har muligheten, bør du også prøve å kjøre disse programmene på hver sin maskin. Programmene er gjennomgått i kapittel Les dette. Merk at reglene for kommunikasjon (protokollen) bestemmes av de to programmene. Det må være 100% samsvar mellom skriveog lesesetninger i de to programmene. Enhver linje med data som tjeneren sender (skriver) til klienten må leses hos klienten med eksakt en readline()-setning. Og omvendt. Du skal i øvingen lage en variant av disse programmene. Der skal du også lage tjenerprogrammet slik at det håndterer mer enn én klient. Unntakshåndtering Et unntaksobjekt er et objekt som beskriver en feil som har oppstått. Objektet tilhører en subklasse til Exception. Et slikt objekt lages dersom en feil inntreffer, og det sendes vanligvis ut av metoden, og da ikke via returverdien. Hittil har du sannsynligvis truffet på unntaksobjekt i to situasjoner: a. Kjørefeil og programstopp. Eksempel: NullPointerException, IndexOutOfBoundsException. Dette betyr at det er en logisk feil i programmet som må rettes opp. b. Kompileringsfeil. Mange av unntakene krever håndtering på grunn av at kompilatoren nekter å kompilere koden ellers. Eksempelvis vil alle kall på filoperasjoner kreve at du håndterer IOException. I siste tilfelle har du, for å få koden gjennom kompileringen, gjerne gjort dette på aller enkleste måte: eller: public static void main(string[] args) throws Exception { public static void main(string[] args) { try {... catch (Exception e) {... Vi må i dette kurset forholde oss noe mer bevisst til unntakshåndteringen. Les raskt gjennom temaet i en av referansene oppgitt foran. Vi skal så se på et lite eksempel der det er fornuftig å lage våre egne unntaksobjekter. Vi har følgende klasse som beregner en karakter ut fra en gitt poengsum: 1 Hvordan finner du maskinnavnet? Windows/MS-DOS: Bruk dos-kommandoen ipconfig for å finne IPadressen. Bruk deretter nslookup for å finne navnet. Eksempel: >ipconfig IP Address : ( med mer ) >nslookup Name: else.aitel.hist.no

9 1. Tråder og socketprogrammering. side 9 av 12 class Eksamensresultat { private int poeng; private String navn; public Eksamensresultat(String startnavn, int startpoeng) { navn = startnavn; poeng = startpoeng; public char finnkarakter() { if (poeng > 100) return 'Y'; // for stor poengsum else if (poeng >= 96) return 'A'; else if (poeng >= 86) return 'B'; else if (poeng >= 71) return 'C'; else if (poeng >= 55) return 'D'; else if (poeng >= 35) return 'E'; else if (poeng >= 0) return 'F'; else return 'X'; // for liten poengsum public String tostring() { return navn + ": " + poeng + " poeng gir karakteren " + finnkarakter(); Feilmeldinger skal ikke skrives ut i metoden. I stedet skal en statusverdi returneres, og det er dermed opp til klienten hvordan feilen skal behandles: Eksamensresultat resultat = new Eksamensresultat("Per Hansen", antpoeng); char karakter = resultat.finnkarakter(); if (karakter == 'X') showmessagedialog(null, "For liten poengsum."); else if (karakter == 'Y') showmessagedialog(null, "For stor poengsum."); else showmessagedialog(null, "Karakteren blir " + karakter); Men er det ikke noe som skurrer her? Vi sender poengsummen inn med konstruktørkallet, burde ikke også feilkontrollen ligge der? Slik at en beregningsmetode kan gå ut fra at dataene er korrekte og heller konsentrere seg om den oppgaven den skal løse? Vi løser dette ved å la konstruktøren kaste unntaksobjekt dersom poengsummen er ugyldig. Typen unntaksobjekt er opp til oss selv, vi kan enten bruke en av de ferdige Exceptionklassene, eller vi kan lage en helt ny Exception-klasse (som må være subklasse til en av de eksisterende). Vi velger å bruke en av de ferdige klassene, klassen IllegalArgumentException. Navnet passer bra ettersom det er et argument som er ugyldig. Den nye konstruktøren ser dermed slik ut: public Eksamensresultat(String startnavn, int startpoeng) { if (startpoeng > 100) { throw new IllegalArgumentException("Poengsum maks. 100"); else if (startpoeng < 0) { throw new IllegalArgumentException("Poengsum kan ikke være negativ"); navn = startnavn; poeng = startpoeng;

10 1. Tråder og socketprogrammering. side 10 av 12 Vi lager et klientprogram som leser inn data, lager Eksamensresultat-objekter og legger dem i en tabell-liste: class TestEksamensresultat1 { public static void main(string[] args) { ArrayList<Eksamensresultat> liste = new ArrayList<Eksamensresultat>(); String navnet = showinputdialog("oppgi navnet (avslutt med blank): "); navnet = navnet.trim(); while (!navnet.equals("")) { String poenglest = showinputdialog("hvor mange poeng? "); int poeng = Integer.parseInt(poengLest); Eksamensresultat kar = new Eksamensresultat(navnet, poeng); liste.add(kar); navnet = showinputdialog("oppgi navnet (avslutt med blank): "); navnet = navnet.trim(); System.out.println("\nAlle navnene: "); for (Eksamensresultat karakter : liste) { System.out.println(karakter); Her har vi ikke noe unntakshåndtering. Dersom vi kjører programmet med den nye konstruktøren og skriver inn for stor eller for liten poengsum, stopper programmet og feilmeldingen kommer i konsollvinduet: Exception in thread "main" java.lang.illegalargumentexception: Poengsum maks. 100 at Eksamensresultat.<init>(TestEksamensresultat1.java:xx) at TestEksamensresultat1.main(TestEksamensresultat1.java:yy) Ser du at meldingen vi la inn i konstruktøren er kommet ut? Men vi burde vel ha en håndtering her som sørget for å la brukeren fortsette. Vi må håndtere unntaksobjektet med try og catch. Dette må skje inne i løkka, og slik at brukeren blir spurt om å legge inn antall poeng på nytt: while (!navnet.equals("")) { try { String poenglest = showinputdialog("hvor mange poeng? "); int poeng = Integer.parseInt(poengLest); Eksamensresultat kar = new Eksamensresultat(navnet, poeng); liste.add(kar); navnet = showinputdialog("oppgi navnet (avslutt med blank): "); navnet = navnet.trim(); catch (IllegalArgumentException unntak) { showmessagedialog(null, unntak.getmessage() + "\nprøv på nytt!"); Setningene skrevet med fete typer blir utført bare dersom konstruktøren ikke kaster unntaksobjekt. Dersom det skjer, hopper programkontrollen i stedet til catch-blokken, og meldingen "Poengsum maks. 100 Prøv på nytt!" skrives ut. Deretter er vi tilbake i begynnelsen av while-løkka igjen.

11 1. Tråder og socketprogrammering. side 11 av 12 Kodebiten over inneholder en annen mulig feilkilde. Hva hvis brukeren skriver inn en poengsum som ikke kan tolkes som tall? Da vil parseint() kaste unntaksobjekt av typen NumberFormatException. Kjør programmet der du framprovoserer denne feilen. Hva skjer? Faktisk nesten ingenting, du får også nå beskjed om å prøve på nytt. Det virker som om programkontrollen også nå kommer inn i catch-blokken til IllegalArgumentException. Hvorfor? Det finner vi ut ved å søke på NumberFormatException i online APIdokumentasjonen. Vi finner at NumberFormatException er subklasse til IllegalArgumentException. For at NumberFormatException skal få sin egen separate behandling, må vi sette opp en catch-blokk foran den vi har. Dersom et unntaksobjekt kastes vil catch-blokkene gjennomløpes i rekkefølge fra øverst til nederst. Programkontrollen vil stanse ved første catch-blokk der parametertypen er samme klasse som unntaksobjektet tilhører, eller en superklasse til denne. while (!navnet.equals("")) { try { String poenglest = showinputdialog("hvor mange poeng? "); int poeng = Integer.parseInt(poengLest); Eksamensresultat kar = new Eksamensresultat(navnet, poeng); liste.add(kar); navnet = showinputdialog("oppgi navnet (avslutt med blank): "); navnet = navnet.trim(); catch (NumberFormatException unntak) { showmessagedialog(null, "Kan ikke tolke poengsummen som tall. \nprøv på nytt!"); catch (IllegalArgumentException unntak) { showmessagedialog(null, unntak.getmessage() + "\nprøv på nytt!"); Dersom vi plasserer NumberFormatException etter IllegalArgumentException får vi kompileringsfeil. Vi får beskjed om at NumberFormatException allerede er behandlet. En liten øvingsoppgave Slik vi har programmert konstruktøren foran, vil ikke kompilatoren kreve at klienten håndterer unntaket. For å få til det må vi i stedet for IllegalArgumentException bruke et såkalt sjekket unntak. Dette er et unntak som tilhører en klasse som er subklasse til Exception, men ikke til RuntimeException. Velg et slikt unntak (kanskje ikke så enkelt å finne et med et passende navn?), lag eventuelt selv en slik klasse, og endre koden i filen TestKarakter.java slik at du bruker denne unntaksklassen i stedet for IllegalArgumentException. Svaret på oppgaven finner du rett nedenfor.

12 1. Tråder og socketprogrammering. side 12 av 12 Svar på oppgaven foran For å få strengere sjekking på unntakene må unntaket ikke tilhøre en subklasse til RuntimeException. Vi kan godt bruke for eksempel IOException, men dette er ikke et navn som beskriver vår feilsituasjon. Vi lager derfor vår egen unntaksklasse: class UgyldigPoengsumException extends Exception { public UgyldigPoengsumException(String melding) { super(melding); Vi bytter så ut alle IllegalArgumentException med UgyldigPoengsumException. Dersom vi gjør dette kun i klassen, og ikke i hovedprogrammet, vil vi få kompileringsfeil om at vi må håndtere unntaket. Men det kommer enda en kompileringsfeil: unreported exception UgyldigPoengsumException; must be caught or declared to be thrown. Og denne kommer i konstruktøren. Vi må altså endre konstruktørhodet: public Karakter(String startnavn, int startpoeng) throws UgyldigPoengsumException { Se for øvrig filen LitenOppgave1.java i leksjonens eksempelsamling.

Videregående programmering 6

Videregående programmering 6 Videregående programmering 6 1. Feilkontroll i klasser uten unntaksobjekter Klasser skal lages sikre. Argumentverdier skal kontrolleres, og eventuelle feil skal rapporteres til klienten. I praksis har

Detaljer

INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først)

INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først) INF1010 våren 2019 Onsdag 30. januar Mer om unntak i Java (med litt repetisjon av I/O først) Stein Gjessing Lesing fra terminal og fil navn: mininn Bruk Scanner: Scanner mininn = new Scanner(); Type:

Detaljer

INF1010 våren 2018 tirsdag 23. januar

INF1010 våren 2018 tirsdag 23. januar INF1010 våren 2018 tirsdag 23. januar I/O og litt om bruk av unntak i Java Stein Gjessing Lesing fra terminal og fil navn: mininn Bruk Scanner: Scanner mininn = new Scanner(); Type: Scanner boolean

Detaljer

Jentetreff INF1000 Debugging i Java

Jentetreff INF1000 Debugging i Java Jentetreff INF1000 Debugging i Java Ingrid Grønlie Guren ingridgg@student.matnat.uio.no 11. november 2013 Kort om feilmeldinger i Java Java har to ulike type feilmeldinger som man kan få når man skriver

Detaljer

Klasser skal lages slik at de i minst mulig grad er avhengig av at klienten gjør bestemte ting STOL ALDRI PÅ KLIENTEN!

Klasser skal lages slik at de i minst mulig grad er avhengig av at klienten gjør bestemte ting STOL ALDRI PÅ KLIENTEN! Å lage sikre klasser Unntaksklassene i Java-API-et Unntakshåndtering i databasesammenheng try-catch-finally-setningen Trelagsarkitektur; egen databaseklasse Transaksjonshåndtering LC191D Videregående programmering

Detaljer

Leksjon 7. Filer og unntak

Leksjon 7. Filer og unntak 6108 Programmering i Java Leksjon 7 Filer og unntak Del2: 7.2 og 7.4 Roy M. Istad 2015 Fil: Permanent lagring av data PrintWriter(filnavn) throws Exception usjekkede/sjekkede unntak? skriver.println(data-i-tekstlinje)

Detaljer

Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Stein Gjessing, Institutt for informatikk, Universitetet i Oslo INF1010 Våren 2015 Feilsituasjoner og unntak i Java (Engelsk: Exception) Stein Gjessing, Institutt for informatikk, Universitetet i Oslo 1 Jeg prøvde å bestille billett med Air France:

Detaljer

LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring. Else Lervik, januar 2012.

LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring. Else Lervik, januar 2012. Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring. Else Lervik, januar 2012. Objektorientert modellering

Detaljer

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL Kandidatnr: Eksamensdato: 5.mai 200 Varighet: 0900-300 Emnekode: Emnenavn: Klasse(r): LO9D / LC9D LO9D Videregående programmering

Detaljer

Kapittel 11: Unntakshåndtering. Java som første programmeringsspråk

Kapittel 11: Unntakshåndtering. Java som første programmeringsspråk Kapittel 11: Unntakshåndtering Forelesningsnotater for: Java som første programmeringsspråk Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk Forlag, 2003. ISBN 82-02-23274-0 http://www.ii.uib.no/~khalid/jfps/

Detaljer

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

INF 1010, vår 2005 Løsningsforslag uke 11 INF 1010, vår 2005 uke 11 Anders Brunland 11. april 2005 Oppgave 1 Oppgave 1 i kapittel 19, Rett på Java Er følgende metoder lovlige? Hovorfor/hvorfor ikke? a) void koknverter ( int mnd ) { konverterdato

Detaljer

Kapittel 11: Unntakshåndtering. Java som første programmeringsspråk

Kapittel 11: Unntakshåndtering. Java som første programmeringsspråk Kapittel 11: Unntakshåndtering Forelesningsnotater for: Java som første programmeringsspråk Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk Forlag, 2003. ISBN 82-02-23274-0 http://www.ii.uib.no/~khalid/jfps/

Detaljer

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring Målform: Eksamensdato: Bokmål 9.mai 202 Varighet/eksamenstid: 0900-300 Emnekode: Emnenavn: Klasse(r): Studiepoeng: LC9D/LO9D Videregående

Detaljer

INF1010 våren 2017 Onsdag 25. januar. Litt om unntak i Java

INF1010 våren 2017 Onsdag 25. januar. Litt om unntak i Java INF1010 våren 2017 Onsdag 25. januar Litt om unntak i Java Stein Gjessing Nytt tema: Feilhåndtering (IO: Innlesing/Utskrift) n En metode som kan komme til å gjøre en IO-feil på fil må enten behandle denne

Detaljer

Kapittel 13: Unntakshåndtering

Kapittel 13: Unntakshåndtering Kapittel 13: Unntakshåndtering Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk

Detaljer

Kapittel 13: Unntakshåndtering

Kapittel 13: Unntakshåndtering Kapittel 13: Unntakshåndtering Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk

Detaljer

Løsningsskisse, eksamen J2EE og distribuerte systemer 19.mai 2004

Løsningsskisse, eksamen J2EE og distribuerte systemer 19.mai 2004 Løsningsskisse, eksamen J2EE og distribuerte systemer 19.mai 2004 Oppgave 1 RMI-tjenerobjekt (databasewrapper) A Sentral tjenermaskin med database, RMi-register og RMI-tjenerprogram vis kart gjør bestilling

Detaljer

INF1010 Tråder J. Marit Nybakken Motivasjon. Å lage en tråd

INF1010 Tråder J. Marit Nybakken Motivasjon. Å lage en tråd J INF1010 Tråder J Marit Nybakken marnybak@ifi.uio.no Motivasjon Til nå har vi kun skrevet programmer der programmet bare var på ett sted i koden til enhver tid (bortsett fra når vi har drevet med GUI,

Detaljer

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

JSP - 2. Fra sist. Hvordan fungerer web? Tjenerside script HTML. Installasjon av Web-tjener Et enkelt JSP-script. Ønsker dynamiske nettsider: Fra sist JSP - 2 Installasjon av Web-tjener Et enkelt JSP-script HTML statisk Forms Tags Ønsker dynamiske nettsider: Klientside-script/programmering Javascript, vbscript, applets Tjenerside-script/programmering

Detaljer

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

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF1000 - Høst 2011) Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF1000 - Høst 2011) Løsningsforslag til oppgave 7, 8, og 9 mangler Klasser og objekter (kap. 8.1-8.14 i "Rett på Java" 3. utg.) NB! Legg merke til at disse

Detaljer

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

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen INF1000 EKSTRATILBUD Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen PLAN FOR DAGEN gjennomgå stoff fra uke 1-5(6), men med en litt annen tilnærming kun gjennomgått stoff, men vekt på konsepter og

Detaljer

Argumenter fra kommandolinjen

Argumenter fra kommandolinjen Argumenter fra kommandolinjen Denne veiledningen er laget for å vise hvordan man kan overføre argumenter fra kommandolinjen til et program. Hvordan transportere data fra en kommandolinje slik at dataene

Detaljer

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring Kandidatnr: Eksamensdato: 14.desember 2007 Varighet: 0900-1200 Fagnummer: Fagnavn: Klasser: LO347D Web-applikasjoner med Java EE Nettstudenter

Detaljer

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

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program Oversikt INF1000 Uke 1 time 2 Variable, enkle datatyper og tilordning Litt repetisjon Datamaskinen Programmeringsspråk Kompilering og kjøring av programmer Variabler, deklarasjoner og typer Tilordning

Detaljer

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

Forklaring til programmet AbstraktKontoTest.java med tilhørende filer Konto.java, KredittKonto.java, SpareKonto.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 Forklaring til programmet AbstraktKontoTest.java med tilhørende

Detaljer

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; }

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; } 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; Hva skrives ut på skjermen når følgende kode utføres? int [] tallene =

Detaljer

Klassen javax.swing.joptionpane

Klassen javax.swing.joptionpane Klassen javax.swing.joptionpane Standardklassen JOptionPane er et alternativ til den hjemmelagede klassen JavabokGUI. API-referanser er samlet bakerst i dette notatet. Til forskjell fra JavabokGUI skal

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO BOKMÅL Det matematisk-naturvitenskapelige fakultet Eksamen i : Eksamensdag : Torsdag 2. desember 2004 Tid for eksamen : 09.00 12.00 Oppgavesettet er på : Vedlegg : Tillatte hjelpemidler

Detaljer

Dagens tema Kapittel 8: Objekter og klasser

Dagens tema Kapittel 8: Objekter og klasser Dagens tema Kapittel 8: Objekter og klasser Hva er objekter og klasser? Programmering med objekter Klassedeklarasjoner Generering av objekter Tilgang til elementer i objektene Objekt- og klassevariable

Detaljer

INF106 Objektorientert programmering

INF106 Objektorientert programmering Eksamensoppgave Høst 2010 Ordinær Bokmål Fag: INF106 Objektorientert programmering Eksamensdato: 13.12.2010 Studium/klasse: 1. klasse Emnekode: INF106 Eksamensform: Skriftlig Antall sider: 5 (inkludert

Detaljer

Hittil har programmene kommunisert med omverden via tastatur og skjerm Ønskelig at data kan leve fra en kjøring til neste

Hittil har programmene kommunisert med omverden via tastatur og skjerm Ønskelig at data kan leve fra en kjøring til neste Datafiler og serialisering Tekstfiler Scanner klassen Binær overføring av data Direkte tilgang til filinnholdet Serialisering LC191D Videregående programmering Semesterplan: http://aitel.hist.no/fag/vprg/index_lc191d.php

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO Bokmål UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF1000 Grunnkurs i objektorientert programmering Eksamensdag: Fredag 4. desember 2015 Tid for eksamen: 14.30 (4 timer)

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF1000 Grunnkurs i objektorientert programmering Eksamensdag: 13. juni 2006 Tid for eksamen: 9.00 12.00 Oppgavesettet er på 5

Detaljer

Inf1010 Våren Feilsituasjoner og unntak i Java. Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Inf1010 Våren Feilsituasjoner og unntak i Java. Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Inf1010 Våren 2008 Feilsituasjoner og unntak i Java Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Oversikt Hva er en feil (er det ikke mulig å unngå feil?) Hva skjer når et program feiler

Detaljer

Oversikt. Feil i programmet hva skjer? Array indeks utenfor sine grenser. Inf1010 Våren Feilsituasjoner og unntak i Java

Oversikt. Feil i programmet hva skjer? Array indeks utenfor sine grenser. Inf1010 Våren Feilsituasjoner og unntak i Java Oversikt Inf1010 Våren 2008 Feilsituasjoner og unntak i Java Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Hva er en feil (er det ikke mulig å unngå feil?) Hva skjer når et program feiler

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO BOKMÅL Det matematisk-naturvitenskapelige fakultet Kontinuasjonseksamen i : Eksamensdag : INF1000 Grunnkurs i objektorientert programmering Fredag 7. januar Tid for eksamen : 09.00

Detaljer

Inf1010 Våren Feilsituasjoner og unntak i Java. Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Inf1010 Våren Feilsituasjoner og unntak i Java. Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Inf1010 Våren 2009 Feilsituasjoner og unntak i Java Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Oversikt Hva er en feil (er det ikke mulig å unngå feil?) Hva skjer når et program feiler

Detaljer

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

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren Prosedyrer Hensikten med en prosedyre Hensikten med en prosedyre er, logisk sett, å representere en jobb eller en funksjonalitet i et eller flere programmer. Bruk av entall er viktig: vi har generelt en

Detaljer

Gjennomgang av eksamen H99

Gjennomgang av eksamen H99 Gjennomgang av eksamen H99 Administrasjon av kurser, studenter og påmeldinger Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for Informatikk Universitetet i Oslo Oppgave 1 (15 %) (Besvares

Detaljer

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL Kandidatnr: Eksamensdato: 4.mai 2011 Varighet: 0900-1300 Emnekode: Emnenavn: Klasse(r): LO191D / LC191D Campus: LC191D Videregående

Detaljer

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

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon Kort om meg INF1000 Uke 2 Variable, enkle datatyper og tilordning Fredrik Sørensen Kontor: Rom 4311-NR, Informatikkbygget Brukernavn/e-post: fredrso@ifi.uio.no Utdanning: Dataingeniør, 2000 Cand.Scient,

Detaljer

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

Innhold. Forord Det første programmet Variabler, tilordninger og uttrykk Innlesing og utskrift...49 Innhold Forord...5 1 Det første programmet...15 1.1 Å kommunisere med en datamaskin 16 1.2 Programmeringsspråk 17 1.3 Et program som skriver på skjermen 18 1.4 Kompilering og kjøring 19 1.5 Kommentarer

Detaljer

INF1000 - Uke 10. Ukesoppgaver 10 24. oktober 2012

INF1000 - Uke 10. Ukesoppgaver 10 24. oktober 2012 INF1000 - Uke 10 Ukesoppgaver 10 24. oktober 2012 Vanlige ukesoppgaver De første 4 oppgavene (Oppgave 1-4) handler om HashMap og bør absolutt gjøres før du starter på Oblig 4. Deretter er det en del repetisjonsoppgaver

Detaljer

Forelesning inf Java 4

Forelesning inf Java 4 Forelesning inf1000 - Java 4 Tema: Løkker Arrayer Metoder Ole Christian Lingjærde, 12. september 2012 Ole Chr. Lingjærde Institutt for informatikk, 29. august 2012 1 Repetisjon: arrayer Deklarere og opprette

Detaljer

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

Oversikt. INF1000 Uke 2. Repetisjon - Program. Repetisjon - Introduksjon Oversikt INF1000 Uke 2 Variable, enkle datatyper og tilordning Litt repetisjon Datamaskinen Programmeringsspråk Kompilering og kjøring av programmer Variabler, deklarasjoner og typer Tilordning Uttrykk

Detaljer

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

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren Prosedyrer Hensikten med en prosedyre Hensikten med en prosedyre er, logisk sett, å representere en jobb eller en funksjonalitet i et eller flere programmer. Bruk av entall er viktig: vi har generelt en

Detaljer

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

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 Forelesning inf - Java 4 Repetisjon: arrayer Tema: Løkker Arrayer Metoder Ole Christian Lingjærde,. september Deklarere og opprette array - eksempler: int[] a = new int[]; String[] a = new String[]; I

Detaljer

Forelesning inf Java 5

Forelesning inf Java 5 Ole Chr. Lingjærde 1 Forelesning inf1000 - Java 5 Tema: Mer om metoder 2D-arrayer String Ole Christian Lingjærde, 26. september 2013 Ole Chr. Lingjærde Institutt for informatikk, 26. september 2013 1 Strukturen

Detaljer

Forelesning inf Java 5

Forelesning inf Java 5 Forelesning inf1000 - Java 5 Tema: Mer om metoder 2D-arrayer String Ole Christian Lingjærde, 26. september 2013 Ole Chr. Lingjærde Institutt for informatikk, 26. september 2013 1 Strukturen til et Java-program

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO FASIT UNIVERSITETET I OSLO BOKMÅL Det matematisk-naturvitenskapelige fakultet Kontinuasjonseksamen i : Eksamensdag : INF1000 Grunnkurs i objektorientert programmering Fredag 7. januar Tid for eksamen :

Detaljer

GUI («Graphical User Interface») del 2

GUI («Graphical User Interface») del 2 GUI («Graphical User Interface») del 2 Interaksjon med brukeren Hendelsesdrevet programmering Tråder i GUI Et spill basert på klikkbare ruter Se også på Infoskrivet https://www.uio.no/studier/emner/matnat/

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF1010 Objektorientert programmering Dato: 9. juni 2016 Tid for eksamen: 09.00 15.00 (6 timer) Oppgavesettet er på 7 sider.

Detaljer

INF 1000 høsten 2011 Uke september

INF 1000 høsten 2011 Uke september INF 1000 høsten 2011 Uke 2 30. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus 1 INF1000 undervisningen Forelesningene: Første

Detaljer

TOD063 Datastrukturer og algoritmer

TOD063 Datastrukturer og algoritmer TOD063 Datastrukturer og algoritmer Øving : 3 Utlevert : Uke 7 Innleveringsfrist : 26. februar 2010 Klasse : 1 Data og 1 Informasjonsteknologi Gruppearbeid: 2-3 personer pr. gruppe. Oppgave 1 Vi skal lage

Detaljer

INF1000 undervisningen INF 1000 høsten 2011 Uke september

INF1000 undervisningen INF 1000 høsten 2011 Uke september INF1000 undervisningen INF 1000 høsten 2011 Uke 2 30. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus Forelesningene: Første

Detaljer

Programmeringsspråket C

Programmeringsspråket C Programmeringsspråket C Bakgrunn Implementasjon av Unix ved AT&Ts laboratorium i Palo Alto 1960 75. Navnet kommer fra BCPL B C. Opphavsmannnen heter Dennis Ritchie. ANSI standard i 1988; omtrent alle følger

Detaljer

class Book { String title; } class Dictionary extends Book { int wordcount; } class CartoonAlbum extends Book { int stripcount; }

class Book { String title; } class Dictionary extends Book { int wordcount; } class CartoonAlbum extends Book { int stripcount; } Arv Arv (eng: inheritance) er en mekanisme for å bygge videre på eksisterende klasser og regnes ofte som varemerket til objektorientert programmering. Når arv brukes riktig, kan den gjøre koden ryddigere

Detaljer

2. Java-interface og RMI.

2. Java-interface og RMI. Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag 2. Java-interface og RMI. Else Lervik 17.09.2008 Lærestoffet er utviklet for faget LO346D Java EE og distribuerte systemer 2. Java-interface

Detaljer

Socket og ServerSocket

Socket og ServerSocket Side 1 av 5, socket og klient-tjener, V. Holmstedt, HiO 2006 Dette dokumentet er revidert den 29.8.2006, kl:12:30. Det er foretatt rettelser i begge versjoner av klassen A_Server. Socket og ServerSocket

Detaljer

Oversikt. Feil i programmet hva skjer? Array indeks utenfor sine grenser. Inf1010 Våren Feilsituasjoner og unntak i Java

Oversikt. Feil i programmet hva skjer? Array indeks utenfor sine grenser. Inf1010 Våren Feilsituasjoner og unntak i Java Oversikt Inf1010 Våren 2009 Feilsituasjoner og unntak i Java Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Hva er en feil (er det ikke mulig å unngå feil?) Hva skjer når et program feiler

Detaljer

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

INF1000 (Uke 5) Mer om løkker, arrayer og metoder INF1000 (Uke 5) Mer om løkker, arrayer og metoder Grunnkurs i programmering Institutt for Informatikk Universitetet i Oslo Anja Bråthen Kristoffersen og Are Magnus Bruaset Praktisk informasjon Når disse

Detaljer

Kapittel 1: Datamaskiner og programmeringsspråk

Kapittel 1: Datamaskiner og programmeringsspråk Kapittel 1: Datamaskiner og programmeringsspråk Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen

Detaljer

Arv. Book book1 = new Book(); book1. title = "Sofies verden" class Book { String title; } class Dictiona ry extends Book {

Arv. Book book1 = new Book(); book1. title = Sofies verden class Book { String title; } class Dictiona ry extends Book { Arv Arv (eng: inheritance) er en mekanisme for å bygge videre på eksisterende klasser og regnes ofte som varemerket til objektorientert programmering. Når arv brukes riktig, kan den gjøre koden ryddigere

Detaljer

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller. Dagens forelesning Java 13 Design av større programmer : fordeling av roller INF 101-13. mars 2003 Flere eksempler på bruk av objekter MVC-prinsippet MVC-prinsippet Flere eksempler på programmer med objekter

Detaljer

13.09.2012 LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke 1-3 12. September 2012 Siri Moe Jensen EKSEMPLER

13.09.2012 LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke 1-3 12. September 2012 Siri Moe Jensen EKSEMPLER .9.22 LITT OM OPPLEGGET INF EKSTRATILBUD Stoff fra uke - 2. September 22 Siri Moe Jensen Målgruppe: De som mangler forståelse for konseptene gjennomgått så langt. Trening får du ved å jobbe med oppgaver,

Detaljer

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

EKSAMEN 6108/6108N PROGRAMMERING I JAVA Alt trykt og skriftlig materiale. Høgskolen i Telemark Fakultet for allmennvitenskapelige fag EKSAMEN I 6108/6108N PROGRAMMERING I JAVA 21. 12. 2015 Tid: 4 timer Sidetall: Hjelpemiddel: Merknader: Framside + 5 sider Alt trykt og skriftlig

Detaljer

2 Om statiske variable/konstanter og statiske metoder.

2 Om statiske variable/konstanter og statiske metoder. Litt om datastrukturer i Java Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo 1 Innledning Dette notatet beskriver noe av det som foregår i primærlageret når et Javaprogram utføres.

Detaljer

Inf1010 Våren Feilsituasjoner og unntak i Java. Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Inf1010 Våren Feilsituasjoner og unntak i Java. Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Inf1010 Våren 2010 Feilsituasjoner og unntak i Java Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Jeg prøvde å bestille billett med Air France:

Detaljer

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

programeksempel Et større En større problemstilling Plan for forelesingen Problemstillingen (en tekstfil) inneholdt ordet TGA Et større programeksempel Hvordan løse et reelt problem med en objektorientert fremgangsmåte En større problemstilling I uke 4 skrev vi et program for å sjekke om et gen (en tekstfil) inneholdt ordet "TGA"

Detaljer

INF2440 Prøveeksamen, løsningsforslag, 20 mai Arne Maus PSE, Inst. for informatikk

INF2440 Prøveeksamen, løsningsforslag, 20 mai Arne Maus PSE, Inst. for informatikk INF2440 Prøveeksamen, løsningsforslag, 20 mai 2015 Arne Maus PSE, Inst. for informatikk 1 Prøveeksamen Er en modell av hva du får til eksamen: - like mange (+-1) oppgaver som eksamen og nesten samme type

Detaljer

La oss begynne med en repetisjon av hva som skjer når du kjører Javaprogrammet

La oss begynne med en repetisjon av hva som skjer når du kjører Javaprogrammet K A P I T T E L 18 Tråder N år et program kjøres, utføres programsetningene i en bestemt rekkefølge. En tråd er det samme som denne programflyten, og i dette kapitlet skal vi se på hvordan vi starter og

Detaljer

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring Kandidatnr: Eksamensdato: 26.mai 2005 Varighet: 0900-300 Fagnummer: Fagnavn: Klasse(r): LV95D Objektorientert programmering i C++ nettstudenter

Detaljer

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo INF, 22. mai 23 Prøveeksamen 23 (Eksamen 2. juni 22) Stein Gjessing Inst. for Informatikk Universitetet i Oslo Oppgave a Tegn klassehierarkiet for de 9 produkttypene som er beskrevet over. Inkluder også

Detaljer

Kapittel 1. Datamaskiner og programmeringsspråk. 1.1 Programmering

Kapittel 1. Datamaskiner og programmeringsspråk. 1.1 Programmering 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

Detaljer

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

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java INF høsten 2 Uke 4: 3. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus Mål for uke 4: Innhold uke 4 Repetisjon m/ utvidelser:

Detaljer

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

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr Fra Python til Java En introduksjon til programmeringsspråkenes verden dag@ifi.uio.no Oversikt Introduksjon Python Java Noe er likt Noe bare ser anderledes ut Noe er helt forskjellig Et eksempel Klasser

Detaljer

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

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr IN1010 Fra Python til Java En introduksjon til programmeringsspråkenes verden dag@ifi.uio.no Oversikt Introduksjon Python Java Noe er likt Noe bare ser anderledes ut Noe er helt forskjellig Et par eksempler

Detaljer

INF Puslegruppa - Kom i gang med PusleChat

INF Puslegruppa - Kom i gang med PusleChat INF1010 - Puslegruppa - Kom i gang med PusleChat Sigmund Hansen sigmunha@student.uio.no 31. mars 2011 Last ned dokumentasjonen til kildekoden. 1 1 Klassestruktur 1.1 inf1010.pusle.chat.client.chatclient

Detaljer

Løsningsforslag ukeoppg. 2: 31. aug - 6. sep (INF Høst 2011)

Løsningsforslag ukeoppg. 2: 31. aug - 6. sep (INF Høst 2011) Løsningsforslag ukeoppg. 2: 31. aug - 6. sep (INF1000 - Høst 2011) Variabler, uttrykk, fogreninger (if-else) (kapittel 2 og 4.1-4.2 i læreboka, "Rett på Java" 3. utg.) Mål Få trening i teorien du trenger

Detaljer

Leksjon 3. Kontrollstrukturer

Leksjon 3. Kontrollstrukturer 6108 Programmering i Java Leksjon Kontrollstrukturer Del 2 Løkker Roy M. Istad 2015 Utførelse av et program Programflyt så langt start setning setning setning setning Sekvensielt Alle setninger utføres,

Detaljer

Debugging. Tore Berg Hansen, TISIP

Debugging. Tore Berg Hansen, TISIP Debugging Tore Berg Hansen, TISIP Innhold Innledning... 1 Å kompilere og bygge et program for debugging... 1 Når debugger er i gang... 2 Symbolene i verktøylinjen... 3 Start på nytt... 3 Stopp debugging...

Detaljer

I et Java-program må programmøren lage og starte hver tråd som programmet bruker. Er dette korrekt? Velg ett alternativ

I et Java-program må programmøren lage og starte hver tråd som programmet bruker. Er dette korrekt? Velg ett alternativ INF2440-V18 Information INF2440 Vår 2018 eksamen Dato og tid: 11. juni 2018 09:00. Varighet: 4 timer Hjelpemidler: Alt skriftlig materiale er tillatt. Ingen elektroniske hjelpemidler er tillatt. Powerpoint

Detaljer

Oblig 4Hybelhus litt mer tips enn i oppgaven

Oblig 4Hybelhus litt mer tips enn i oppgaven Oblig 4Hybelhus litt mer tips enn i oppgaven lørdag 19. okt 2013 Arne Maus Obligatorisk oppgave 4 Gulbrand Grås husleiesystem I denne oppgaven skal vi se på hans studenthus Utsyn. Utsyn består av 3 etasjer,

Detaljer

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

Programmering i C++ Løsningsforslag Eksamen høsten 2005 Programmering i C++ Eksamen høsten 2005 Simen Hagen Høgskolen i Oslo, Avdeling for Ingeniørutdanning 7. desember 2005 Generelt Denne eksamensoppgaven består av tre oppgaver, pluss en ekstraoppgave. Det

Detaljer

Læringsmål for forelesningen

Læringsmål for forelesningen Læringsmål for forelesningen Objektorientering Håndtering av unntak (eng: exceptions) Java-programmering Håndtering av unntak Exception-objekter og klasser try, catch og finally throw og throws Eclipse

Detaljer

Kapittel 9. Distribusjon. Fjernbruker. Tjenermaskin LAN WAN. Nærbruker. Figur 9-1: En enkel klient/tjener distribusjon

Kapittel 9. Distribusjon. Fjernbruker. Tjenermaskin LAN WAN. Nærbruker. Figur 9-1: En enkel klient/tjener distribusjon Kapittel 9 Distribusjon Tjenermaskin Fjernbruker LAN Nærbruker WAN Figur 9-1: En enkel klient/tjener distribusjon 195 Tjenermaskin Fjernbruker LAN Replikert tjener Nærbruker WAN Figur 9-2: Klient/tjener-konfigurasjon

Detaljer

Feilmeldinger, brukerinput og kontrollflyt

Feilmeldinger, brukerinput og kontrollflyt Feilmeldinger, brukerinput og kontrollflyt Skjønne hvordan et program presist utføres og forberede seg på håndtering av feil INF1000, uke2 Ragnhild Kobro Runde Programmeringskrøll Programmet vil ikke kjøre

Detaljer

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

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr IN1010 Fra Python til Java En introduksjon til programmeringsspråkenes verden dag@ifi.uio.no Oversikt Introduksjon Python Java Noe er likt Noe bare ser anderledes ut Noe er helt forskjellig Et par eksempler

Detaljer

Leksjon 7. Filer og unntak

Leksjon 7. Filer og unntak 6108 Programmering i Java Leksjon 7 Filer og unntak Del1: 7.1 7.2 Roy M. Istad 2015 Fil permanent lagring Ønsker at program skal kunne ta vare på data over tid, fra en kjøring til den neste (kontra hurtigminnet

Detaljer

INF1010 våren 2016. Arv og subklasser - del 2

INF1010 våren 2016. Arv og subklasser - del 2 INF1010 våren 2016 Onsdag 10. februar Arv og subklasser - del 2 pluss litt om feil og unntak hvis tid Stein Gjessing Institutt for informatikk Dagens tema Virtuelle metoder som er det samme som Polymorfi

Detaljer

Bruk av NetBeans i JSP-delen av Web-applikasjoner med JSP og JSF

Bruk av NetBeans i JSP-delen av Web-applikasjoner med JSP og JSF Bruk av NetBeans i JSP-delen av Web-applikasjoner med JSP og JSF Else Lervik, august 2010 (Av hensyn til JSF-delen av kurset anbefaler vi at du sørger for å ha NetBeans-versjon 6.9.) I den grad denne veiledningen

Detaljer

LC191D/LO191D Videregående programmering mai 2010

LC191D/LO191D Videregående programmering mai 2010 LC191D/LO191D Videregående programmering mai 2010 Løsningsforslag Oppgave 1 Transporttype er en tekst som er felles for klassene AnnenEgenTransport og Kollektivtransport. Vi legger den derfor i klassen

Detaljer

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 15.

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 15. Forkurs INF1010 Dag 3 Andreas Færøvig Olsen (andrefol@ifi.uio.no) Gard Inge Rosvold (gardir@ifi.uio.no) Institutt for Informatikk, 15. januar 2016 Forkurs INF1010 - dag 3 Strenger 2 Forkurs INF1010 - dag

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO Bokmål UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF1000 Grunnkurs i objektorientert programmering Eksamensdag: Torsdag 4. desember 2014 Tid for eksamen: 14.30 (4 timer)

Detaljer

Hva er en metode. Hva skjer når vi kaller en metode

Hva er en metode. Hva skjer når vi kaller en metode Hva er en metode Uke 9 - Repetisjon av metoder, klasser og objekter Innkapsling: private og public Statisk programmering vs. programmering med objeker 18 okt. 2005, Arild Waaler Inst. for informatikk,

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Prøveeksamen i : INF2440 Praktisk parallell programmering Prøveeksamensdag : 26. mai 2014 Tidspunkter: 11.00 Utdeling av prøveeksamen 15:15

Detaljer

J2EE. CMP Entity Beans, Transaksjoner, JSP

J2EE. CMP Entity Beans, Transaksjoner, JSP J2EE CMP Entity Beans, Transaksjoner, JSP CMP Entity Beans Container Managed Persistence Container sin oppgave å lagre innholdet i EJB til varig lager (typisk DB). Implementasjonsklassen lages abstrakt.

Detaljer

Løse reelle problemer

Løse reelle problemer Løse reelle problemer Litt mer om løkker, metoder med returverdier, innlesing fra fil og strenger INF1000, uke5 Ragnhild Kobro Runde MER OM LØKKER Repetisjon fra forrige uke: while Syntaks: while (condition)

Detaljer

Å lese tall fra en fil, klassen Scanner

Å lese tall fra en fil, klassen Scanner Å lese tall fra en fil, klassen Scanner 1. Et Scanner-objekt kan knyttes til et strømobjekt eller til en streng. 2. Kan skanne teksten etter data av ulike typer. 3. Kan kun skanne framover i teksten. Vis

Detaljer

IN 211 Programmeringsspråk. Java. på 20 enkle ark. spesielt for de som kan. Simula. (og gjerne litt C) Ark 1 av 20

IN 211 Programmeringsspråk. Java. på 20 enkle ark. spesielt for de som kan. Simula. (og gjerne litt C) Ark 1 av 20 Java på 20 enkle ark spesielt for de som kan Simula (og gjerne litt C) Ark 1 av 20 Forelesning 28.9.1998 Et minimalt eksempel Filen Hallo.java ser slik ut: class Hallo { public static void main(string

Detaljer