Kapittel 5. Din første klasse
|
|
- Kurt Hoff
- 9 år siden
- Visninger:
Transkript
1 Kapittel 5 Din første klasse Læringsmål for dette kapitlet Etter å ha vært gjennom dette kapitlet skal du skjønne at objekter i et program er modeller av objekter i den virkelige verden kunne bruke og lage en enkel klasse med objektvariabler, konstruktører og metoder skjønne hvordan begrepene melding, klient og tjener avspeiles i programkode vite forskjellen mellom referansetyper og primitive datatyper vite hva modifikatoren final betyr for en referansetype vite hva det betyr at en referanse er null, og hvilke konsekvenser det kan få (NullPointerException)
2 146 Din første klasse Det finnes flere systematiske måter å løse et programmeringsproblem på. Tidligere (på 70- og 80-tallet) angrep man gjerne et slikt problem ved å fokusere på algoritmeabstraksjon. Man begynte med å sette opp en algoritme på et veldig høyt abstraksjonsnivå, eksempel: les inn data gjør beregninger skriv ut resultater. Deretter tok man for seg hvert punkt i denne algoritmen og detaljerte videre, ofte på flere nivåer avhengig av problemets kompleksitet. Det var ikke uvanlig at man på lavt nivå oppdaget at man hadde løst et problem tidligere. Å isolere programbiter som løste spesielle problemer, ble, og er fremdeles, til stor nytte i programutviklingen. Bibliotek med rutiner for eksempelvis matematiske beregninger, grafikk og håndtering av store datamengder i arkiv (databaser) er vanlig. Selv om dataene selvfølgelig er viktige, er det i slike bibliotek ikke noen helt klar sammenheng mellom dataene og de algoritmene som gjør noe med dataene. Mange mener at en av årsakene til at det er så vanskelig å lage store og komplekse systemer, ligger i denne angrepsmåten. Man bør se data og algoritmer i sammenheng. Programvarebibliotek bør ikke bestå av bare behandlingsrutiner for data, men av en type moduler der disse rutinene er uløselig knyttet til de dataene som de kan behandle. Denne typen moduler kalles klasser. Java-API-et inneholder en mengde slike klasser. Klasser bruker vi også når vi skal lage våre egne programsystemer for spesielle anvendelser. Vi kan ha klasser som håndterer bankkontoer, bedrifter eller idrettslag, eller omtrent hva som helst annet. Å angripe et programmeringsproblem på denne måten kalles objektorientering. Objekter i den virkelige verden avspeiles i programkoden. 5.1 Objekter og klasser Allerede etter å ha gjennomgått de første kapitlene i denne boka og løst noen av oppgavene øyner du kanskje muligheten for at et program raskt kan bli stort og omfattende. Vi skal nå se hvordan vi ved å dele opp i mindre deler kan få oversikt og kontroll over problemløsningen. Og da skal vi knytte sammen dataene og algoritmene på en mer direkte måte enn det vi har gjort hittil. Vi skal lage klasser. Som eksempel skal vi se på et program som holder orden på saldoen på en bankkonto. Vi gjør det så enkelt at vi kun teller saldoen opp og ned, vi lagrer ikke alle enkelttransaksjonene. Du vil neppe ha problemer med å lage et lite program som leser inn transaksjoner og fortløpende oppdaterer en saldo. Men tenk deg at du skal utvide programmet med et par kontoer til. Og det er ønskelig at utskriftene inneholder kontoens navn og nummer. Det er fortsatt overkommelig, men kompleksiteten øker raskt nå. Etter at programmet har vært i drift en stund, får du lyst til å legge inn fødselsdatoen til kundene også. Du må endre koden flere steder. Å lage kode som er enkel å endre og vedlikeholde, er viktig. For å få til det må koden være bygd opp av mindre enheter på en logisk måte. I dette eksemplet betyr det at vi lager en enhet (klasse) som beskriver det som gjelder alle kontoer. Hvis vi
3 5.1 Objekter og klasser 147 nå vil legge til noe, vet vi hvor vi skal gjøre det. Vi utvider den felles beskrivelsen som gjelder alle kontoer Ole Olsen 2300, Kari Hansen 12450, Jens Bø 7500,70 Figur 5.1 Tre kontoobjekter med samme oppbygning, men forskjellig datainnhold I den virkelige verden har vi kontoer, eller kontoobjekter, se figur 5.1. De er alle bygd på samme måten, her noe forenklet med kontonummer, navn og saldo. Dette er egenskapene, eller attributtene, til objektene. Hva gjør vi med kontoer i den virkelige verden? Vi sjekker saldoen, og vi setter inn og tar ut penger. Noe avhengig av omstendighetene varierer det hvordan vi gjør dette. Vi kan gå i bankfilialen og få godskrevet en sjekk på kontoen vår, eller vi kan ta ut et beløp fra en minibank. Uansett hvordan vi gjør dette, så er vi den aktive parten og kontoen den passive parten. Ingen vil finne på å si at kontoen selv utfører transaksjonen. Imidlertid er dette en talemåte vi nå må venne oss til: Et kontoobjekt i et program utfører selv transaksjonene, dog etter at det har fått beskjed om å gjøre det. Alle oppgaver som vi normalt vil gjøre i forhold til en konto, lar vi kontoobjektet selv få ansvaret for i et program. Slik er det i alle sammenhenger i objektorientert programmering. Objektene, enten de i den virkelige verden er levende eller døde, lever et liv i programmet vårt, de har mye kunnskap, og de har ansvaret for å utføre mange forskjellige oppgaver. Oppgavene løses ved algoritmer som er uavhengig av datainnholdet i hvert enkelt objekt. Algoritmene formuleres generelt i forhold til attributtene. Vi bruker gjerne begrepet operasjon om oppgaver som objekter har ansvaret for å utføre. En klasse er en formell beskrivelse av en mengde objekter med samme attributter og samme operasjoner. (I kapittel 2 definerte vi en klasse fra et kodeståsted som en logisk samling deklarasjoner. Vi skal snart se sammenhengen mellom de to definisjonene.) objekt attributt operasjon klasse Steg 1: Fra tekstlig beskrivelse til klassediagram Vi kan sette opp følgende oversikt for problemet vi skal løse:
4 148 Din første klasse Klasse: konto. Attributter: kontonummer, navn, saldo. Operasjoner: Finn saldo, navn og kontonummer. Utfør transaksjoner. Konto -kontonr -navn -saldo +getkontonr() +getnavn() +getsaldo() +utførtransaksjon() klassenavn attributter operasjoner Figur 5.2 Første skritt på veien fra virkeligheten til programdesign (UML) klassediagram - og + i klassediagram getoperasjoner Klassediagram brukes på veien fra en tekstlig beskrivelse av en klasse og fram til programkoden. Figur 5.2 viser første skritt på denne veien. På samme måte som aktivitetsdiagrammene fra kapittel 3 og 4 så er klassediagram en del av UML (Unified Modeling Language). Operasjoner skilles fra attributter ved en strek. I tillegg er det vanlig å sette () etter navnene på operasjonene. På figuren har attributtene minus (-) foran seg, mens operasjonene har pluss (+) foran. Minus betyr "gjemt inne i objektet", mens pluss betyr tilgjengelig utenfra. Et objekt i et program har altså dataene gjemt inne i seg, mens operasjonene er tilgjengelig utenfra, slik at andre kan be om å få dem utført. La oss se litt nærmere på operasjonene. Vi ser at vi i tillegg til operasjonen utfør- Transaksjon() har noe som heter getkontonr(), getnavn() og getsaldo(). Dette er operasjoner for å hente ut attributtverdiene som er gjemt inne i objektet. Merk at vi velger å bruke den engelske forstavelsen get- selv om vi for øvrig skriver norsk dette fordi denne forstavelsen for å hente ut en attributtverdi i praksis er standard i Java-miljøet. Det er for eksempel slik at mange av verktøyene en bruker i forbindelse med programutvikling, forutsetter at en bruker forstavelsen get- i slike sammenhenger. Steg 2: Å bruke klassen Konto Det er nå du egentlig trenger å lære mange ting på én gang. Og det er jo ikke mulig, vi skal ta det hele stegvis, men det kan nok hende du etter hvert trenger å gå tilbake noen sider og lese ting om igjen. Du trenger å lære å kode klassen, det omfatter flere nye og vanskelige begrep og teknikker. Men en klasse i seg selv har ingen verdi, du må samtidig lære å bruke den. Du må altså lære å lage og bruke objekter i programkoden. Det er først da du
5 5.1 Objekter og klasser 149 får et program som kan gjøre noe nyttig. En analogi er matoppskrifter. Du kan lese oppskriften så mange ganger du vil, men det blir ingen mat i magen uten at du bruker oppskriften til å lage noe. Vi velger å begynne med å bruke klassen. Det er ofte den måten vi arbeider på. Vi finner ut hva objektene våre trenger å kunne gjøre, og så lager vi klassen på basis av det. melding Sett inn 1000 kroner Ole Olsen 2300,50 operasjon: utførtransaksjon(1000) klient tjener melding Finn saldo kr 3300, Ole Olsen 3300,50 operasjon: getsaldo() Figur 5.3 Bruk av objekt med data om Ole Olsens konto Se figur 5.3, der vi jobber med Ole Olsens konto. Objektet er tegnet som en ring. Det symboliserer at dataene er gjemt inne i objektet. Ringen er objektets grense mot omverdenen. Den består av operasjonene med + til høyre på figur 5.2 (selv om det ikke er vist på figuren). Vi kaller dette objektets grensesnitt mot omverdenen. Vi sier at omverdenen sender meldinger til objektet. Objektet, som utfører operasjonen, spiller rollen tjener i forhold til den som sender meldingen. Sistnevnte kalles klient. På figuren sender klienten to meldinger til tjeneren. Den første ber om at 1000 kroner settes inn på kontoen, og dataverdien 1000 sendes derfor sammen med meldingen. Den andre meldingen etterspør saldoen. Da sender objektet et svar tilbake. Vi ser altså at vi i noen tilfeller må sende data sammen med meldingene. Andre ganger får vi data tilbake. Vi kan også tenke oss kombinerte meldinger. Eksempelvis kan det være aktuelt at en operasjon som skal ta penger ut av en konto, rapporterer tilbake om det var dekning på kontoen. grensesnitt melding tjener klient
6 150 Din første klasse Programliste 5.1 EnKonto klientprogram referansetype referanse new konstruktør metode 1 /** 2 * EnKonto.java 3 * 4 * Eksempel på bruk av klassen Konto. 5 * For at dette programmet skal kompilere, må du også ha filen Konto.java 6 * tilgjengelig i samme mappe, eventuelt ta den inn i "prosjektet" ditt. 7 */ 8 class EnKonto { 9 public static void main(string[] args) { /* Vi oppretter et objekt av klassen Konto. Objektet heter oleskonto */ 12 Konto oleskonto = new Konto( L, "Ole Olsen", ); 13 oleskonto.utførtransaksjon(1000.0); // setter inn 1000 kroner 14 double saldo = oleskonto.getsaldo(); // spør objektet om den nye saldoen 15 System.out.println("Etter innskudd er saldoen lik " + saldo); /* Utskrift: 20 Etter innskudd er saldoen lik */ Programliste 5.1 viser et program som oppretter et Konto-objekt og utfører operasjonene på figur 5.3. Denne main()-metoden fungerer som klient og kalles derfor ofte klientprogram. (Merk at du må ha klassen Konto for å kompilere og kjøre dette eksemplet. Du finner den på filen Konto.java. Se hodekommentaren.) Vi skal gjennomgå programmet linje for linje. Før vi kan gjøre noe med et objekt, må vi lage det. Og det skjer i linje 12: Konto oleskonto = new Konto( L, "Ole Olsen", ); På venstre side av likhetstegnet gjør vi egentlig noe som vi har gjort før: Vi deklarerer en variabel som får navnet oleskonto. Datatypen er en klasse. Slike datatyper kaller vi referansetyper. Variabler av referansetyper kaller vi referanser. Det som står på høyre side av likhetstegnet, er imidlertid langt mer komplisert enn det vi er vant til. For å lage et objekt må vi bruke det reserverte ordet new sammen med noe som kalles en konstruktør. En klasse tilbyr en eller flere konstruktører, slik at det er mulig å lage objekter av klassen. Klassen Konto tilbyr en konstruktør der vi må sette opp kontonummer (datatypen long), navn og startsaldo i rekkefølge. Etter at linje 12 er utført, har vi altså et objekt som vi kan sende meldinger til, det vil si at vi kan be objektet om å utføre operasjoner. Operasjoner på objekter blir til metoder når vi bruker dem i et program. I linje 13 i programmet skal vi sette inn 1000 kroner: oleskonto.utførtransaksjon(1000.0); Vi setter opp transaksjonsbeløpet i parentes etter metodenavnet.
7 5.1 Objekter og klasser 151 I linje 14 skal vi finne saldoen. Vi bruker nok en metode: double saldo = oleskonto.getsaldo(); Her skal vi ha data ut av metoden, og den er laget slik at vi kan ta imot denne dataverdien i en variabel som vi kaller saldo. Merk at vi må sette opp parentes etter metodenavnet selv om vi ikke sender inn data. Oppgave Transaksjonsbeløpet kan være lagret i en variabel. Variabelen må være av heltallseller desimaltallstype. Hvis variabelen heter transaksjon, skriver vi oleskonto.utførtransaksjon(transaksjon); Endre programliste 5.1 slik at programmet går i løkke og leser inn transaksjoner fra brukeren. Den nye saldoen skal for hver gang skrives ut i kommandovinduet. Hvis saldoen blir negativ, skal en advarsel skrives ut i en meldingsboks. Steg 3: Å detaljere klassediagrammet Nå er vi kommet så langt at vi skal lage klassen Konto. Vi jobber skrittvis og begynner med å detaljere klassediagrammet. Konto Konto -kontonr -navn -saldo +getkontonr() +getnavn() +getsaldo() +utførtransaksjon() videre detaljering -long kontonr {readonly -String navn {readonly -double saldo +Konto(long kontonr, String navn, double saldo) +long getkontonr() +String getnavn() +double getsaldo() +void utførtransaksjon(double beløp) Figur 5.4 Detaljering av klassen Konto for programmering i Java (UML) Studer figur 5.4. Alle attributtene har fått datatyper. Noen av attributtene skal ikke kunne endres etter at objektet er laget, de har fått merkelappen {readonly. Det har også skjedd noe med operasjonene. Eksempelvis er getsaldo() blitt til double getsaldo(). Det er for at den skal passe sammen med bruken, slik vi har sett det i programliste 5.1:
8 152 Din første klasse returtype returverdi argument parameter double saldo = oleskonto.getsaldo(); Når en klient sender meldingen getsaldo() til et objekt, får den en verdi av typen double tilbake. Vi sier at double er returtypen til metoden getsaldo(). Verdien som returneres, kalles returverdien. En metode kan aldri returnere mer enn én verdi, men denne verdien kan være et objekt. Tilbake til figur 5.4. Operasjonen utførtransaksjon() er blitt til void utførtransaksjon(double beløp). Denne metoden har vi brukt på følgende måte: oleskonto.utførtransaksjon(1000.0); Tallet passer med double beløp. Data som sendes inn til et objekt, kalles (aktuelle) argumenter. Her er tallet et slikt argument. Variablene som tar imot argumentene, kalles parametere. 11 Her er beløp en slik parameter. En metode kan ha flere parametere. Da må det være samsvar i rekkefølge og type mellom argumenter og parametere. Klientprogrammet får ikke data ut av denne metoden, derfor skriver vi void foran metodenavnet. Konstruktøren er også kommet med i klassediagrammet nå: Konto(long kontonr, String navn, double saldo) Merk at rekkefølgen av dataene i parentesen også her er i samsvar med bruken: Konto oleskonto = new Konto( L, "Ole Olsen", ); Vi bruker begrepene parameter og argument også i forbindelse med konstruktører. Tabell 5.1 viser en oversikt over argumenter, parametere, returtyper og returverdier i kommunikasjonen mellom klientprogrammet i programliste 5.1 og objektet oles- Konto. 11. Vi bruker ordene parameter og argument slik de brukes i Javas språkspesifikasjon [Gosling, Joy, Steele 2005] og i UML [Rumbaugh, Jacobson, Booch 2005]. I annen litteratur vil man kunne finne uttrykkene aktuell og formell parameter eller aktuelt og formelt argument. Det "aktuelle" er det vi kaller argument, det "formelle" er det vi kaller parameter.
9 5.1 Objekter og klasser 153 Tabell 5.1 Sammenheng parametere argumenter i programliste 5.1 Linjenr. Operasjon Klientprogram (dataene eller argumentene som sendes til objektet) Objektet (parameterne som tar imot argumentene fra klienten) Objektet, returtypen Objektet, returverdien 12 konstruktør L long kontonr ingen ingen "Ole Olsen" String navn double saldo 13 utfør- Transaksjon() double beløp void ingen 14 getsaldo() ingen ingen double Steg 4: Å lage klassen Konto Vi er nå klare til å se i detalj på koden i klassen Konto. Dette er den første klassen du ser, og det er selvfølgelig mye nytt. Figur 5.5 viser sammenhengen mellom klassediagrammet og Java-koden. Merk nye begrep når vi forflytter oss fra klassediagrammet til Java-koden: Attributter blir variabler i klassen. Disse variablene kalles gjerne objektvariabler 12 på grunn av at hvert objekt av klassen har sitt eget sett med verdier. Merkelappen {readonly blir final i Java-koden. Variabelen kan ikke forandre verdi etter at den har fått sin startverdi. Jamfør bruken av final her med bruken av final for for navngitte konstanter i kapittel 2 (side 57). Operasjonene blir objektmetoder (eller bare "metoder") i klassen. Medlemmene i en klasse består av metodene og variablene som er deklarert i klassen. Konstruktørene er ikke å betrakte som medlemmer. Skopet til medlemmene i en klasse er hele klassekroppen. Utenfor skopet må vi kvalifisere navnet ved å angi hvor det er definert, eksempel: oleskonto.utførtransaksjon(500). Her er oleskonto en kvalifikator. objektvariabel objektmetode medlem kvalifisere kvalifikator 12. Instansvariabler er også et mye brukt ord, på samme måte som ordet instans ofte brukes om objekt. I stedet for å gi tilnærmet like definisjoner av disse ordene og i praksis bruke dem om hverandre, velger vi å bruke bare ordet objekt. Vi støtter oss på [Booch, Rumbaugh, Jacobson 2005, s. 175]: "The terms instance and object are largely synonymous, so for the most part, they may be used interchangeably."
10 154 Din første klasse tilgangsmetode mutasjonsmetode mutabel/ immutabel klasse Vi skiller mellom tilgangsmetoder og mutasjonsmetoder. Tilgangsmetoder (engelsk: accessors) henter ut data fra et objekt eller gjør beregninger basert på disse. De forandrer ikke på datainnholdet. Metoder som endrer datainnholdet, kalles mutasjonsmetoder (engelsk: mutators). Mange klasser tilbyr bare tilgangsmetoder, det vil si at det ikke er mulig for klienten å endre på datainnholdet. Slike klasser kalles immutable klasser. Klasser som tilbyr mutasjonsmetoder, kalles mutable klasser. public class Konto { private final long kontonr; private final String navn; private double saldo; medlemmer public Konto(long kontonr, String navn, double saldo) { this.kontonr = kontonr; this.navn = navn; this.saldo = saldo; public long getkontonr() { return kontonr; public String getnavn() { return navn; public double getsaldo() { return saldo; public void utførtransaksjon( double beløp) { saldo += beløp; konstruktør objektmetoder tilgangsmetoder mutasjonsmetode objekt- variabler Figur 5.5 Fra klassediagram til Java-kode private public hode innhold kropp implementere I klassediagrammet har vi minus- og plusstegn. Minustegnet fra klassediagrammet blir private i koden. Det betyr at variablene blir gjemt inne i objektene. (Her er private brukt for variablene, men det kan også brukes for metoder.) Plusstegnet i klassediagrammet blir public i koden, det vil si tilgjengelig for verden utenfor objektet. Konstruktøren må være offentlig for at det skal være mulig å lage objekter av klassen. Metodene utgjør bindeleddet mellom dataene som er gjemt inne i objektet, og omverdenen, se figur 5.6. Fete typer på figur 5.5 viser klassens hode samt konstruktørens og metodenes hoder. Når vi programmerer innholdet (eller kroppen) i en konstruktør eller en metode (magre typer på figuren), sier vi at vi implementerer konstruktøren eller metoden. Da kan vi bruke (de private) objektvariablene som er vist i kursiv på figu-
11 5.1 Objekter og klasser 155 ren. Klassekroppen er hele klassen unntatt første og siste linje, det vil si hele den blokken som utgjør klassen. Endelig nevner vi at et objekt er et eksempel på en datastruktur. En datastruktur er en generell betegnelse på en samling data som er lagret under ett navn i primærminnet. Som datastruktur er et objekt karakterisert ved at det kan inneholde ulike typer data, og vi får tilgang til de ulike dataene via navn. "Tabell" er en annen viktige form for datastruktur. Der er alle elementene av samme type, og de aksesseres via nummer. Tabeller introduseres i kapittel 7. datastruktur getsaldo getkontonr Ole Olsen 2300,50 getnavn utførtransaksjon Objektet oleskonto Figur 5.6 Metodene er bindeleddet mellom dataene inne i objektet og omverdenen Programliste 5.2 Konto 1 /** 2 * Konto.java 3 * 4 * Klassen beskriver en bankkonto med nr., navn og saldo. 5 * Det er mulig å utføre transaksjoner mot kontoen. 6 */ 7 8 class Konto { 9 private final long kontonr; 10 private final String navn; 11 private double saldo; public Konto(long kontonr, String navn, double saldo) { 14 this.kontonr = kontonr; 15 this.navn = navn; 16 this.saldo = saldo; 17 18
12 156 Din første klasse 19 public long getkontonr() { 20 return kontonr; public String getnavn() { 24 return navn; public double getsaldo() { 28 return saldo; public void utførtransaksjon(double beløp) { 32 saldo += beløp; Oppgave Figur 5.7 viser tre matvareobjekter med næringsinnhold i 100 gram spiselig vare. På finner du lange lister med næringsinnhold for forskjellige matvarer. For ikke å få altfor omfattende kode begrenser vi oss til energi (kilojoule, kj), fett og karbohydrater. Data i rekkefølge: navn (forkortet) energi (kj) fett (gram) karbohydrater (gram) p.f.,g.kj ,0 39,8 p.f.,fryst 641 2,2 22,0 kokt potet 339 1,9 17,1 innhold i 100 g spiselig vare pommes frites, gatekjøkken pommes frites, fryst potet, lagringspotet, kokt med skall Dataene er hentet fra Figur 5.7 Tre matvareobjekter med næringsinnhold Du skal lage klassen Matvare som kan brukes til å lage objektene vist på figuren. I Java-programmet skal objektene ha navnene pomfritgkj, pomfritfryst og koktpotet. En klient skal kunne få utført følgende oppgaver ved å henvende seg til et av objektene:
13 5.2 Mer om sammenhengen mellom klassen og bruken av klassen 157 Finn matvarens navn. Finn antall gram fett i en bestemt mengde (gram) av matvaren. Finn antall gram karbohydrater i en bestemt mengde (gram) av matvaren. Finn energiinnholdet i kj for en bestemt mengde (gram) av matvaren. Finn energiinnholdet i kcal (kilokalorier) for en bestemt mengde (gram) av matvaren. 1 kj = 4,18 kcal. Mengden matvare skal være data som klienten sender til objektet sammen med meldingen. Eksempel fra et klientprogram: double fett = pomfritfryst.finnfett(350); Etter at denne setningen er utført, skal variabelen fett ha innholdet 7,7 (= 2,2 / 100,0) * 350,0). Gjør følgende: 1 Tegn klassediagram i to detaljeringsnivåer som på figur 5.4. I denne oppgaven er alle attributtene {readonly. 2 Programmer klassen. 3 Lag et klientprogram som oppretter de tre objektene og lar brukeren få regnet ut næringsinnholdet (energi i kj og kcal, fett og karbohydrater) for ulike mengder av de tre matvarene. Programmet skal være bygd opp slik: Opprett de tre matvareobjektene Les matmengde som beregningene skal utføres for (avslutt med Esc) while ESc ikke trykket regn ut næringsinnhold for denne mengde av alle tre matvarene skriv ut resultatene les matmengde som beregningene skal utføres for (avslutt med Esc) Hvis problemer oppstår, kan det hende du vil ha nytte av å lese neste delkapittel, som i detalj tar for seg sammenhengen mellom en klasse og bruken av den. 5.2 Mer om sammenhengen mellom klassen og bruken av klassen Vi skal se på et mer omfattende klientprogram og følge programflyten i detalj mellom klientprogram og koden i klassen Konto. Programmet oppretter to kontoobjekter og overfører penger fra den ene til den andre kontoen. Programliste 5.3 ToKontoer 1 /** 2 * ToKontoer.java 3 * 4 * Oppretter kontoobjekter for Per og Ole og overfører kr 1000 fra Ole til Per. 5 */
14 158 Din første klasse skjule variabler 6 7 class ToKontoer { 8 public static void main(string[] args) { 9 10 /* Oppretter to objekter, ett for Ole og ett for Per */ 11 Konto oleskonto = new Konto( L, "Ole Olsen", ); 12 Konto perskonto = new Konto( L, "Per Hansen", 5000); /* Overfører kr 1000 fra Ole til Per */ 15 oleskonto.utførtransaksjon( ); 16 perskonto.utførtransaksjon(1000.0); /* Henter ut de nye saldoene */ 19 double saldoole = oleskonto.getsaldo(); 20 double saldoper = perskonto.getsaldo(); 21 System.out.println("Etter transaksjonen er Oles saldo lik " + saldoole); 22 System.out.println("Etter transaksjonen er Pers saldo lik " + saldoper); /* Utskrift: 27 Etter transaksjonen er Oles saldo lik Etter transaksjonen er Pers saldo lik */ I gjennomgangen nedenfor refererer vi til to programlister: Metoden main() i programliste 5.3. Klassen Konto i programliste 5.2. Programflyten styres fra main(). Linje i main(): Vi lager to kontoobjekter. Vi bruker konstruktøren og det reserverte ordet new. Vi sender argumenter til konstruktøren. Disse kobles til parameterne (linje 13 i klassen Konto) i konstruktøren. Følgende skjer bak kulissene: For objektet oleskonto: long kontonr = L String navn = "Ole Olsen" double saldo = For objektet perskonto: long kontonr = L String navn = "Per Hansen" double saldo = 5000 Parameterne har fått verdi, og de fungerer fra nå av som om de er lokale variabler inne i konstruktøren. Linje i klassen Konto setter objektets egne variabler lik parameterne. Nå har det seg slik at objektets egne variabler har samme navn som parameterne. Parameterne skjuler (engelsk: hide) dermed objektvariablene, og eksempelvis har ikke setningen navn = navn; noen effekt.
15 5.2 Mer om sammenhengen mellom klassen og bruken av klassen 159 Begge sider av tilordningstegnet refererer til parameteren. Vi kan imidlertid skille objektvariabel fra parameter ved å sette this foran objektvariablene: this.kontonr = kontonr; this.navn = navn; this.saldo = saldo; this er et reservert ord som refererer til det objektet vi til enhver tid arbeider med. Vi må også nevne at det ikke er nødvendig å bruke samme navn på parameterne som på objektvariablene i en konstruktør. Vi kan lage konstruktøren slik: this public Konto(long startkontonr, String startnavn, double startsaldo) { kontonr = startkontonr; navn = startnavn; saldo = startsaldo; Tilbake til klientprogrammet vårt. Etter at objektene er laget, er vi tilbake i main(), der neste trinn er å overføre penger fra den ene kontoen til den andre (linje 15 16). Vi sender meldingen utførtransaksjon(), først til objektet oles- Konto, der vi tar ut kr 1000, deretter til objektet perskonto, der vi setter inn kr La oss se i detalj på hva som skjer idet den første meldingen blir utført: oleskonto.utførtransaksjon( ); Vi tar med oss argumentet til linje 31 i klassen Konto. Der settes parameteren beløp lik denne verdien, og beløp fungerer fra nå av som en lokal variabel inne i metoden. Deretter utføres denne setningen: saldo += beløp; Det vil si at variabelen saldo i objektet oleskonto får endret sin verdi med (Her kunne vi skrevet this.saldo, men det er vanlig å utelate this når det ikke er navnekonflikt.) Så er vi tilbake i main() igjen for å skrive ut saldoen på de to kontoene. Ettersom saldoen er gjemt i kontoobjektene, bruker vi metoden getsaldo() for å hente den ut. Vi forflytter oss fra linje 19 i main() til linje 27 i klassen Konto. Metoden getsaldo() inneholder setningen: return saldo; Det betyr at verdien til variabelen saldo sendes ut av objektet. I main() tar vi imot denne verdien og lagrer den i variabelen saldoole: double saldoole = oleskonto.getsaldo(); Hva hvis det ikke er penger nok på kontoen? Da ønsker vi at objektet skal fortelle oss det, se figur 5.8. Det kan vi gjøre ved at metoden utførtransaksjon() returnerer false dersom det ikke er dekning på kon-
16 160 Din første klasse toen, og true dersom uttaket gikk bra. (Husk at beløp er et negativt tall dersom vi tar penger ut av kontoen.) returnsetningen public boolean utførtransaksjon(double beløp) { if (saldo + beløp >= 0) { saldo += beløp; return true; else { return false; Hvis det er nok penger på kontoen (saldo + beløp >= 0), reduseres saldoen, og vi forteller klienten at det gikk bra. I motsatt fall forteller vi at det ikke gikk bra. I siste tilfelle er saldoen urørt. Merk at return-setningen fører til umiddelbart uthopp fra metoden. Setningene etterpå blir ikke utført. Klientprogrammet kan ta i bruk svaret på denne måten: if (oleskonto.utførtransaksjon(-4000)) { System.out.println("Transaksjon ok"); else { System.out.println("Transaksjon ikke ok"); Saldoen er kr 3300,50. Dermed blir utskriften: Transaksjon ikke ok Vi kan også skrive slik: boolean okuttak = oleskonto.utførtransaksjon(-4000); if (okuttak) { System.out.println("Uttak ok"); else { System.out.println("Uttak ikke ok"); Ta ut 4000 kroner Ole Olsen 3300,50 Nei! Ikke dekning klient tjener Figur 5.8 Hva om det ikke er dekning på kontoen?
17 5.2 Mer om sammenhengen mellom klassen og bruken av klassen 161 Oppgaver 1 Klassen Konto er som gitt i programliste 5.2. Finn eventuelle feil i følgende setninger: arneskonto = new Konto( , "Arne Jensen", 1000, 2000); Konto johanskonto = new johanskonto( l, "Johan Hansen", 1000); arneskonto.getkontonr(); double saldo = arneskonto.getsaldo(7000); double beløp = arneskonto.utførtransaksjon(1000); Konto.utførTransaksjon(800); 2 Følgende utsagn eller Java-setninger er alle sammen feil. Forklar hva som er feil under hvert enkelt punkt: a) Per Ås er en klasse. b) void getlønn("januar") c) 1756 er en parameter. d) Attributtet navn har et objekt person. e) getlønn(string måned) f) Argumentverdien kalles en parameter. g) Attributter har hode og kropp. h) En lokal variabel kan nås i alle metoder i klassen. 3 Rett opp feilene i følgende klasse class Sirkel { final private radius; public sirkel(double radius) { radius = this.adius; public int beregnareal() { return Math.PI * radius * radius; // Math.PI er det samme som 3, public double beregnomkrets() { omkrets = 2.0 * Math.PI * radius; return omkrets; 4 Følgende klientprogram bruker klassen fra forrige oppgave. Fyll ut det som mangler (merket med ), og rett opp eventuelle feil i resten av koden. class Sirkelberegning { public static void main(string[] args) { ensirkel = new ; double arealet = ensirkel ; System.out.println("Arealet er lik " + arealet); = ensirkel.beregnomkrets(); System.out.println("Omkretsen er lik " + omkretsen); 5 Finn ut hva som er lokale variabler, objektvariabler og parametere i programliste 5.2, side 155.
18 162 Din første klasse 6 I oppgave 2 side 157 laget du klassen Matvare med klientprogram. Endre klassen slik at den lagrer næringsinnholdet per gram av varen, og ikke per 100 gram. Dette skal gjøres på en slik måte at du ikke behøver å forandre klientprogrammet. 5.3 Referanser og objekter Vi skal se litt nærmere på sammenhengen mellom referanser og objekter. Vi tar utgangspunkt i følgende deklarasjon: referanser og objekter Konto oleskonto = new Konto( L, "Ole Olsen", ); Objektet er illustrert på figur 5.9. Variabelnavnet oleskonto står under noe som ligner på en pil. Det samme gjør navn, som er en referanse til et objekt av klassen String. Pilene skal vise at oleskonto og navn er referanser til objektene, og ikke objektene selv. Innholdet i en referansevariabel vil kunne ses på som adressen til det stedet i minnet der objektet er lagret. På denne måten kan vi si at en slik variabel "peker til" objektet. String-objektet "Ole Olsen" er tegnet utenfor objektet oleskonto på figuren for å illustrere at objekter er selvstendige på den måten at det er mulig med flere referanser til det samme objektet. Variabler av referansetyper brukes for å håndtere objekter. Slike variabler skiller seg fra variabler av primitive datatyper (int, long, double osv.) ved at de ikke inneholder dataene selv, men kun en referanse (peker) til dataene. å lage Stringobjekter Referansen navn peker altså til et objekt av klassen String. Denne klassen i Java- API-et er så mye brukt at det finnes en kortform for å lage objekter. Vi kan skrive for eksempel String navn = "Ole Olsen"; i stedet for String navn = new String("Ole Olsen"); For øvrig opprettes alle objekter med det reserverte ordet new. Vanligvis bruker vi for enkelhets skyld referansenavnene som om de var objektene de refererer til. Eksempelvis sier vi "objektet oleskonto" og ikke "objektet som oleskonto refererer til". Det er ikke mulig å få tak i et objekt uten å gå via en referanse til objektet.
19 5.3 Referanser og objekter 163 Konto oleskonto = new Konto( L, "Ole Olsen", ); "Ole Olsen" L oleskonto kontonr navn saldo Figur 5.9 Objektet oleskonto etter initiering La oss lage to objekter: Konto oleskonto = new Konto( L, "Ole Olsen", ); Konto oleskonto2 = new Konto( L, "Ole Olsen", 0.0); Objektene er vist øverst på figur La oss sette den ene referansen lik den andre: oleskonto2 = oleskonto; Da får vi to referanser til det samme objektet, se nederst på figuren. Hvis vi skal ta ut kr 1000 fra Oles konto, kan vi nå skrive én av følgende to setninger: oleskonto.utførtransaksjon( ); oleskonto2.utførtransaksjon( ); // disse to setningene har samme effekt // etter at oleskonto2 er satt lik oleskonto Hvis vi utfører begge setningene, blir kr 2000 trukket fra Oles konto. Objektet som inneholder data om den gamle kontoen til Ole, er ikke lenger tilgjengelig. Det vil etter hvert bli fjernet fra minnet. Før: To referanser til hvert sitt kontoobjekt oleskonto oleskonto2 Etter at setningen oleskonto2 = oleskonto; er utført: oleskonto oleskonto2 Det eksisterer ikke lenger noen referanse til det andre objektet, og det blir fjernet fra minnet. Figur 5.10 En referanse settes lik en annen referanse
20 164 Din første klasse En referanse med modifikatoren final referanser og final Vi bruker modifikatoren final for variabler som ikke skal kunne endre verdi etter at de er initiert. Hvis en slik variabel er en referanse, er det teknisk sett kun referansen som ikke kan forandres (det vil si at den ikke kan settes til å peke til et annet objekt). Det som referansen peker til, kan forandres forutsatt at referansetypen tilbyr mutasjonsmetoder. Eksempel 1: Klassen String er en del av Java-API-et, og det finnes ingen metoder i denne klassen som forandrer innholdet i et objekt. final String navn = "NN"; Her er det ikke mulig å sette navn til å peke til et nytt objekt, og det er heller ikke mulig å forandre på objektet. Eksempel 2: Vi lager et final-objekt av klassen Konto: final Konto alltidtomkonto = new Konto( L, "NN", 0); Kompilatoren protesterer hvis vi forsøker å sette alltidtomkonto til å peke til et annet objekt. alltidtomkonto = new Konto( L, "NN2", 0); // ikke ok, pga. final Kompilatoren protesterer imidlertid ikke hvis vi prøver å sette inn penger: alltidtomkonto.utførtransaksjon(1000); // ok, selv om final er brukt mutabel klasse Begrepene mutabel og immutabel er viktige nå. Vi repeterer fra side 154: En mutabel klasse er en klasse som inneholder minst én mutasjonsmetode. En mutasjonsmetode er en metode som endrer datainnholdet i objektet. Et mutabelt objekt er et objekt som tilhører en mutabel klasse. I eksemplet foran er alltidtomkonto et mutabelt objekt, utførtransaksjon() er en mutasjonsmetode, og Konto er en mutabel klasse. En immutabel klasse er altså en klasse som ikke inneholder noen mutasjonsmetoder. Klassen String er immutabel. Vi kan altså sette opp følgende konklusjon: Bruk av final for mutable objekter er ingen forsikring mot at innholdet i objektet kan bli forandret. Dersom intensjonen er at datainnholdet ikke skal kunne endres, må programmereren la være å bruke mutasjonsmetoder. Referanser kan være objektvariabler i klasser. Hvis disse er merket {readonly i klassediagrammet, skal dette tolkes som at objektet ikke skal kunne endre verdi.
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
DetaljerINF1000: Forelesning 7. Konstruktører Static
INF1000: Forelesning 7 Klasser og objekter del 2 Konstruktører Static UML REPETISJON 2 Repetisjon Verden består av objekter av ulike typer (klasser). Ofte er det mange objekter av en bestemt type. Objekter
DetaljerINF1000: Forelesning 7
INF1000: Forelesning 7 Klasser og objekter del 2 Konstruktører Static UML REPETISJON 2 Repetisjon Repetisjon forts. Verden består av objekter av ulike typer (klasser). Ofte er det mange objekter av en
DetaljerINF1000 - 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
Detaljer2 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.
DetaljerLø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
DetaljerHØ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
DetaljerINF1000 Metoder. Marit Nybakken marnybak@ifi.uio.no 16. februar 2004
INF1000 Metoder Marit Nybakken marnybak@ifi.uio.no 16. februar 2004 Motivasjon Når man begynner å skrive store programmer, vil man fort oppleve at programmene blir uoversiktlige. Det blir vanskeligere
DetaljerEnkle generiske klasser i Java
Enkle generiske klasser i Java Oslo, 7/1-13 Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Del 1: Enkle pekere Før vi tar fatt på det som er nytt i dette notatet, skal vi repetere litt
DetaljerArgumenter 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
DetaljerIntroduksjon til objektorientert programmering
Introduksjon til objektorientert programmering Samt litt mer om strenger og variable INF1000, uke6 Ragnhild Kobro Runde Grunnkurs i objektorientert programmering Strategi: Splitt og hersk Metoder kan brukes
Detaljer23.09.2015. Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.
Grunnkurs i objektorientert programmering Introduksjon til objektorientert programmering INF1000 Høst 2015 Siri Moe Jensen INF1000 - Høst 2015 uke 5 1 Siri Moe Jensen INF1000 - Høst 2015 uke 5 2 Kristen
DetaljerFra problem til program
Fra problem til program Gitt et problem, hvordan går man fram for å programmere en løsning? UML klassediagrammer Enhetstesting Dokumentasjon Som student ønsker vi oss et program som kan holde oversikt
DetaljerHØ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
DetaljerINF1000 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
Detaljerpublic 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
DetaljerDagens 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
DetaljerUNIVERSITETET 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
DetaljerKlasser 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
DetaljerINF1000 (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
DetaljerJAVA Oppsummering for IS-102. Even Åby Larsen
JAVA Oppsummering for IS-102 Even Åby Larsen even.larsen@hia.no 26. april 2010 Innhold 1 Innledning 3 2 Hva er et Java program 4 2.1 Kjøring av java programmer................. 4 3 Grammatikk for Java
Detaljerpublic 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
DetaljerINF1000: Forelesning 6. Klasser og objekter del 1
INF1000: Forelesning 6 Klasser og objekter del 1 OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK 2 Motivasjon Anta at vi ønsker å lage et studentregister hvor vi for hver student lagrer navn, brukernavn og telefonnummer.
DetaljerEKSAMEN 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
DetaljerHva 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,
DetaljerHØ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
DetaljerOBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK
INF1000: Forelesning 6 Klasser og objekter del 1 OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK Motivasjon Anta at vi ønsker å lage et studentregister hvor vi for hver student lagrer, bruker og telefonnummer Med
DetaljerForkurs INF1010. Dag 2. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 14.
Forkurs INF1010 Dag 2 Andreas Færøvig Olsen (andrefol@ifi.uio.no) Gard Inge Rosvold (gardir@ifi.uio.no) Institutt for Informatikk, 14. januar 2016 Forkurs INF1010 - dag 2 Feilmeldinger 2 Forkurs INF1010
Detaljerprogrameksempel 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"
DetaljerOblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl. 23.59
Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl. 23.59 Formål Formålet med denne oppgaven er å gi trening i hele pensum og i å lage et større program. Løsningen du lager skal være
DetaljerForklaring 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
DetaljerKort 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,
DetaljerOversikt. 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
DetaljerUNIVERSITETET I OSLO
UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Kandidatnr Eksamen i INF1000 Grunnkurs i objektorientert programmering Eksamensdag: Onsdag 10. juni 2009 Tid for eksamen: 9.00 12.00 Oppgavesettet
DetaljerEksekveringsrekkefølgen (del 1) Oppgave 1. Eksekveringsrekkefølgen (del 2) Kommentar til oppgave 1. } // class Bolighus
// class Bygning Oppgave 1 System.out.println( Bolighus ); // class Bolighus Hva blir utskriften fra dette programmet? class Blokk extends Bolighus{ // class Blokk IN105subclassesII-1 Eksekveringsrekkefølgen
DetaljerOblig 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,
DetaljerEn klasse som arver, eller selv deklarerer en abstrakt metode, må deklareres som abstrakt.
Polymorfi og arv, del 3 Repetisjon Eksempel Modifikatoren final Interface som grensesnitt, ge klassene som implementasjon LC191D Videregående programmering Semesterplan: http://aitel.hist.no/fag/vprg/index_lc191d.php
Detaljerlfæ~~~~:::j~~:~l -.~=:~-t::-d I Alle trykte og håndskrevne EKSAMENSOPPGA VE Side l av 5 Eksamenstid:
EKSAMENSOPPGA VE Side l av 5 Bokmålstekst Emne: PROGRAMMERINGSSPRÅK i II Grupper: loa, ldb Emnekode LO 112 A Dato: 14.12.2005 Faglig veileder: Mark Burgess, Eva Vihovde, Frode Sandnes og Ulf uttersrud
DetaljerJentetreff 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
DetaljerInnhold 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:
DetaljerHØGSKOLEN I SØR-TRØNDELAG
HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - Kandidatnr: AITeL Eksamensdato: 4.mai 2011 Varighet: 0900-1300 Emnekode: Emnenavn: Klasser: LV195D Objektorientert programmering i C++ Nettstudenter
DetaljerHva er en metode? INF1000 Forelesning 8. Hva skjer når vi kaller en metode? Hvorfor bruke metoder?
Hva er en metode? INF1000 Forelesning 8 Litt repetisjon: Metoder og klasser Innkapsling av variable og metoder Hvordan gripe an et stort problem? 5 gode råd En metode er en valgfritt antall programsetninger
DetaljerUNIVERSITETET I OSLO
Side 1 UNIVERSITETET I OSLO Kandidatnr Det matematisk-naturvitenskapelige fakultet Eksamen i: PRØVEEKSAMEN INF1000 Eksamensdag: Prøveeksamen 22.11.2011 Tid for eksamen: 12:15-16:15 Oppgavesettet er på
DetaljerOppgave 1. Oppgave 2. Oppgave 3. Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004
Oppgave 1 Prøveeksamen i INF1000 Ole Christian og Arne 23. november 2004 Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI int i; int k = i; int i, j = 4; int k = j; double[] x = new
DetaljerEKSAMENSFORSIDE SKRIFTLIG EKSAMEN
EKSAMENSFORSIDE SKRIFTLIG EKSAMEN Fag-/kurskode OBJ110 Fag/kurs Objektorientert systemutvikling 1 Ansvarlig faglærer Viggo Holmstedt Ansvarlig fakultet ØS Klasse(r)/gruppe(r) IS2 Dato 13.12.2010 Eksamenstid,
Detaljer1. Finn klassene (hvilke objekter er det i problemet) 1. Dataene som beskriver problemet (hvilke objekter har vi og hvor mange klasser er det?
Obligatorisk oppgave 3 Gulbrand Grås husleiesystem Oblig 3hus litt mer tips enn i oppgaven I denne oppgaven skal vi se på hans studenthus Utsyn. Utsyn består av 3 etasjer, nummerert fra -3. I hver etasje
DetaljerInnhold uke 7. Objektorientert programmering i Python: Introduksjon. Lite tilbakeblikk: Programflyt og skop. Lite tilbakeblikk: Funksjoner er uttrykk
Innhold uke 7 Objektorientert programmering i Python: Introduksjon IN1000 Høst 2017 uke 7 Siri Moe Jensen Lite tilbakeblikk: Prosedyrer og funksjoner Objektorientert programmering Introduksjon: Hvorfor,
Detaljer2 Om statiske variable/konstanter og statiske metoder.
Gaustadbekkdalen, januar 22 Litt om datastrukturer i Java Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Innledning Dette notatet beskriver noe av det som foregår i primærlageret når
DetaljerINF 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
Detaljer2 Klasser og objekter
Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag Klasser og objekter Mildrid Ljosland og Grethe Sandstrak 08.09.2015 Lærestoffet er utviklet for faget IFUD1002-A C#.NET 2 Klasser og objekter
DetaljerINF1000 Forelesning 8. Litt repetisjon: Metoder og klasser Innkapsling av variable og metoder Hvordan gripe an et stort problem?
INF1000 Forelesning 8 Litt repetisjon: Metoder og klasser Innkapsling av variable og metoder Hvordan gripe an et stort problem? 5 gode råd Hva er en metode? En metode er en valgfritt antall programsetninger
DetaljerPrøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004
Prøveeksamen i INF1000 Ole Christian og Arne 23. november 2004 Oppgave 1 Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI int i; int k = i; int i, j = 4; int k = j; double[] x = new
DetaljerINF1000 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
DetaljerVideregå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
DetaljerTDT4100 Objektorientert programmering
Eksamensoppgave i TDT4100 Objektorientert programmering Torsdag 12. august 2010, kl. 09:00-13:00 Oppgaven er utarbeidet av faglærer Hallvard Trætteberg og kvalitetssikret av Svein Erik Bratsberg. Kontaktperson
Detaljer13.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,
DetaljerKom forberedt til tirsdag. INF1000 Tips til obligatorisk oppgave 4. Noen generelle tips. Oblig4: Komme igang
Kom forberedt til tirsdag INF1000 Tips til obligatorisk oppgave 4 Kikk på prøveeksamen fra 2004 http://www.uio.no/studier/emner/matnat/ifi/inf1000/h 07/undervisningsmateriale/proveeksamen-H2004.pdf Tittel:
DetaljerOppgave 1. INF1000 Uke 13. Oppgave 2. Oppgave 3. Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI
Oppgave 1 INF1000 Uke 13 Gjennomgang av prøveeksamen fra høsten 2004 Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI int i; int k = i; int i, j = 4; int k = j; double[] x = new double[1];
DetaljerUNIVERSITETET 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
DetaljerAlgoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1
Delkapittel 3.1 Grensesnittet Liste Side 1 av 11 Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1 3.1 En beholder 3.1.1 En beholder En pappeske er en beholder En beholder er noe vi kan legge ting
DetaljerObjektorientert programmering i Python
Objektorientert programmering i Python IN1000 Høst 2019 uke 8 Siri Moe Jensen Læringsmål uke 8 Repetisjon fra forrige uke Definere en klasse, opprette og arbeide med objekter: How-to
DetaljerUNIVERSITETET I OSLO
UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Kandidatnr Eksamen i INF1000 Grunnkurs i objektorientert programmering Eksamensdag: Onsdag 1. desember 2010 Tid for eksamen: 14.00 18.00
DetaljerOblig4 - forklaringer. Arne og Ole Christian
Oblig4 - forklaringer Arne og Ole Christian Struktur og alle (?) klassene import easyio.*; import java.util.*; class Oblig4 { public static void main (String[] args) { String s1 = "Stasjoner-1.txt"; String
DetaljerBlokker og metoder INF1000 (Uke 6) Metoder
Blokker og metoder INF1000 (Uke 6) Metoder Grunnkurs i programmering Institutt for Informatikk Universitetet i Oslo Are Magnus Bruaset og Arild Waaler En blokk er en samling instruksjoner omgitt av krøllparenteser:
Detaljeri=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
DetaljerForelesning 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
DetaljerKapittel 8: Programutvikling
Kapittel 8: Programutvikling 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
DetaljerTo måter å programmere på. Java 12. Programmering med objekter. Statisk programmering
INF 101-10. mars 2003 Mer om klasser og objekter Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo Java 12 To måter å programmere på Statisk programmering:
DetaljerLø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)
DetaljerEKSAMENSFORSIDE Skriftlig eksamen med tilsyn
BOKMÅL EKSAMENSFORSIDE Skriftlig eksamen med tilsyn Emnekode: 108 + 108N Dato: 19.12.201 Ansv. faglærer: Roy M. Istad Campus: Bø Antall oppgaver: 5 Tillatte hjelpemidler (jfr. emnebeskrivelse): Alt trykt
DetaljerForkurs INF1010. Dag 2. Andreas Færøvig Olsen Tuva Kristine Thoresen
Forkurs INF1010 Dag 2 Andreas Færøvig Olsen (andrefol@ifi.uio.no) Tuva Kristine Thoresen (tuvakt@ifi.uio.no) Institutt for Informatikk, 7. januar 2014 Forkurs INF1010 - dag 2 Klasser og pekere Klasser
DetaljerProgrammeringssprå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
DetaljerLeksjon 6. Objekt. Evt. importsetninger. public class Klasse { Konstruktør. Objektmetoder. Innkapsling (private): set-og get-metoder
6108 Programmering i Java Leksjon 6 Objekt Del 2: 6.4 6.5 Roy M. Istad 2015 Generelt oppsett av egendefinert klasse Eks: Student Evt. importsetninger public class Klasse { Objektvariabler - instansvariabler
DetaljerINF106 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
DetaljerOversikt. 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
DetaljerAv Stein Gjessing, Institutt for informatikk, Universitetet i Oslo
Gaustadbekkdalen, januar 27 Litt om datastrukturer i Java Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Innledning Dette notatet beskriver noe av det som foregår inne i primærlageret
DetaljerINF1000: noen avsluttende ord
Pensum Det som er gjennomgått på forelesningene INF1000: noen avsluttende ord Arne og Fredrik Stoff som er behandlet i oppgaver/obliger Notat om Informasjonsteknologi, vitenskap og samfunnsmessige virkninger
Detaljerclass 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
DetaljerHØGSKOLEN I SØR-TRØNDELAG
HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - Kandidatnr: AITeL Eksamensdato: 5.mai 2010 Varighet: 0900-1300 Emnekode: Emnenavn: Klasser: LV195D Objektorientert programmering i C++ Nettstudenter
DetaljerLC191D/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
DetaljerINF1000 Mer om objekter
INF1000 Mer om objekter Marit Nybakken marnybak@ifi.uio.no 8. mars 2004 Dette dokumentet skal tas med en bøtte salt og forfatter sier fra seg alt ansvar. Dere bør ikke bruke definisjonene i dette dokumentet
DetaljerKapittel 7: Mer om arv
Kapittel 7: Mer om arv 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 Forlag,
DetaljerUNIVERSITETET I OSLO
UNIVERSITETET I OSLO Side 1 Det matematisk-naturvitenskapelige fakultet Eksamen i: INF1010 Objektorientert programmering Eksamensdag: Tirsdag 12. juni 2012 Tid for eksamen: 9:00 15:00 Oppgavesettet er
DetaljerLøsningsforslag ukeoppg. 9: 19. - 25. okt (INF1000 - Høst 2011)
Løsningsforslag ukeoppg. 9: 19. - 25. okt (INF1000 - Høst 2011) HashMap, innstikksortering, javadoc (kap. 9.1-9.11, m.m. i "Rett på Java" 3. utg.) NB! Legg merke til at disse er løsningsforslag. Løsningene
DetaljerTOD063 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
DetaljerHØGSKOLEN I SØR-TRØNDELAG
HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - Kandidatnr: AITeL Eksamensdato: 2.desember 2009 Varighet: 0900-1300 Emnekode: Emnenavn: Klasse(r): LO191D / LC191D LO191D Videregående programmering
DetaljerINF1000 : Forelesning 4
INF1000 : Forelesning 4 Kort repetisjon av doble (nestede) løkker Mer om 1D-arrayer Introduksjon til 2D-arrayer Metoder Ole Christian Lingjærde Biomedisinsk forskningsgruppe Institutt for informatikk Universitetet
DetaljerKlassen 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
DetaljerINF1000: Forelesning 11. Oppgave 2. Oppgave 1. Husk å melde deg på prøveeksamen i INF1000! Ole Christian Lingjærde 7.november 2006
Husk å melde deg på prøveeksamen i INF1000! INF1000: Forelesning 11 Ole Christian Lingjærde 7.november 2006 Frist påmelding: 16. november Arrangementet er torsdag 23. november kl 1420 og omfatter: Oppgaven
DetaljerKapittel 1 En oversikt over C-språket
Kapittel 1 En oversikt over C-språket RR 2015 1 Skal se på hvordan man En innføring i C Skriver data til skjermen Lese data fra tastaturet Benytter de grunnleggende datatypene Foretar enkle matematiske
DetaljerUNIVERSITETET I OSLO
UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet PRØVEEKSAMEN i INF1000 23. november 2004 kl. 14.00 17.00 Dine svar skal skrives på disse oppgavearkene, og ikke på separate ark. Dette gjelder
DetaljerEksamen. Objektorientert Programmering IGR 1372
+ JVNROHQL1DUYLN $YGHOLQJIRU7HNQRORJL Eksamen i Objektorientert Programmering IGR 1372 7LG'HVHPEHU± 7LOODWWHKMHOSHPLGOHU 6NULYHVDNHU2UGE NHU -DYD6RIWZDUH6ROXWLRQV)RXQGDWLRQVRI3URJUDP 'HVLJQVNUHYHWDY/HZLV
DetaljerArv. 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
Detaljeri=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
Repetisjon: nesting av løkker Kort repetisjon av doble (nestede) løkker Mer om D-arrayer Introduksjon til D-arrayer Metoder Ole Christian Lingjærde Biomedisinsk forskningsgruppe Institutt for informatikk
DetaljerINF1000 Prøveeksamen Oppgave 7 og 9
INF1000 Prøveeksamen Oppgave 7 og 9 Høst 2015 Siri Moe Jensen 7a) Skriv en klasse Gave med to variabler som forteller hva som er i gaven, og hvor mye den har kostet. Klassen skal ha en konstruktør med
DetaljerUNIVERSITETET 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
DetaljerBeskrivelse av programmeringsspråket Compila15 INF Kompilatorteknikk Våren 2015
Beskrivelse av programmeringsspråket Compila15 INF5110 - Kompilatorteknikk Våren 2015 Her beskrives syntaksen og den statiske semantikken (hva som skal sjekkes av kompilatoren) til språket Compila15. Den
DetaljerObjekter. Uke 8 - Objekter, klasser og pekere. Verden består av mange objekter, noen ganske like, noen ulike. Klasser og objekter i verden
Objekter Uke 8 - Objekter, klasser og pekere Hvorfor deler vi verden inn i enheter når vi snakker om den? En blomst, fjorten trær, ti mennesker, en bil, en vei, mange murstein, en bankkonti,... Svar :
DetaljerLøse reelle problemer
Løse reelle problemer Litt mer om løkker, metoder med returverdier og innlesing fra fil INF1000, uke4 Geir Kjetil Sandve Repetisjon fra forrige uke: while Syntaks: while (condition) do1; do2;... Eksempel:
DetaljerUNIVERSITETET I OSLO
Kandidatnummer: Bokmål UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Prøveeksamen i : INF1000 Grunnkurs i objektorientert programmering Prøveeksamensdag : Onsdag 12. november 2014 Tid
Detaljer