INF1000: Forelesning 6. Klasser og objekter del 1

Like dokumenter
OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

Oblig 3 to versjoner. INF Forelesning 8: Objekter, klasser og pekere. Verden består av mange objekter: noen ganske like, andre ulike

Introduksjon til objektorientert programmering

Objekter. Uke 8 - Objekter, klasser og pekere. Verden består av mange objekter, noen ganske like, noen ulike. Klasser og objekter i verden

Uke 7 - Objekter, klasser og pekere (+ litt først om args[])

Inf1000 (Uke 7) Objekter, klasser og pekere

(! )! #!! *#+,$&!! &#$

3 #$ *#+,$&!! &#$ (! )! #! 6 &#)%#. / 5$ #%#.67 / "## #&! %# # & #!!& %&$ # $!!!!# $#

INF1000: Forelesning 7

INF1000: Forelesning 7. Konstruktører Static

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

Et meget enkelt banksystem

Uke 7 Mer om Objekter, klasser og pekere; UML. 10. okt. 2013, Arne Maus Inst. for informatikk, UiO

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

Dagens tema Kapittel 8: Objekter og klasser

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

Uke 7 Mer om Objekter, klasser og pekere; 27. Sept og 4. okt. 2011, Arne Maus Inst. for informatikk, UiO

26. Sept. 2012, Arne Maus Inst. for informatikk, UiO

INF Uke 10. Ukesoppgaver oktober 2012

Uke 7 Mer om Objekter, klasser og pekere;

Uke 7 Mer om Objekter, klasser og pekere;

Objekter. Uke 7 - Objekter, klasser og pekere. Verden består av mange objekter, noen ganske like, noen ulike. Klasser og objekter i verden

UNIVERSITETET I OSLO

Objekter. Uke 7 og 9 - Objekter, klasser og pekere. Verden består av mange objekter, noen ganske like, noen ulike. Klasser og objekter i verden

Verden består av mange objekter, noen ganske like, noen ulike

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

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 Uke 10. Løsningsforslag ukesoppgaver oktober 2012

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

INF1010 våren 2008 Uke 4, 22. januar Arv og subklasser

INF1000: noen avsluttende ord

INF Forelesning oppsummering forts. Et meget enkelt banksystem. Oppsummering om klasser, objekter, pekere og.

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

Først: Parametre til oppstart av programmet, Hvordan kan vi bruke args[]? String [] args. Parameteren args[] blir laget av deg

Løsningsforslag ukeoppg. 9: okt (INF Høst 2011)

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

Klasser, objekter, pekere og UML. INF gruppe 13

Forelesning inf Java 5

Forelesning inf Java 5

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

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

INF1000 Metoder. Marit Nybakken 16. februar 2004

UNIVERSITETET I OSLO

Uke 6 og 7 - Objekter, klasser og pekere; 22. og 29. sept. 2009, Arne Maus Inst. for informatikk, UiO

Uke 6 og 7 - Objekter, klasser og pekere; 23. og 30. sept. 2008, Arne Maus Inst. for informatikk, UiO

Uke 6 og 7 - Objekter, klasser og pekere; Verden består av mange objekter, noen ganske like, noen ulike

Eksamen høsten 2003 Den store bøygen i INF1000 er de obligatoriske oppgavene.

UNIVERSITETET I OSLO

for (int i=0; i<3; i++) { for (int j=0; j<5; j++) { System.out.print(i*j); System.out.println();

UNIVERSITETET I OSLO

INF1010 våren Arv og subklasser del 1

Repetisjon: operatorene ++ og -- Java 5. Nøtt. Oppgave 1 (fra forrige gang) 0 udefinert udefinert. Alternativ 1 Prefiks-operator

INF1000 : Forelesning 4

INF1000: Forelesning 4. Mer om arrayer Metoder

Endret litt som ukeoppgave i INF1010 våren 2004

UNIVERSITETET I OSLO

Inf1000 (Uke 7) Objekter, klasser og pekere

Oversikt. Inf1000 (Uke 7) Objekter, klasser og pekere. Løkker gjør setninger flere ganger. Variable, deklarasjon og tilordning

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

INF1010 våren Arv og subklasser del 1

INF Løsning på seminaropppgaver til uke 8

Oblig 4Hybelhus litt mer tips enn i oppgaven

Gjennomgang av eksamen H99

Oppgave 1. Oppgave 2. Oppgave 3. Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

Oppgave 1. INF1000 Uke 13. Oppgave 2. Oppgave 3. Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Repetisjon. INF gruppe 13

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

Litt mer om uttrykk: ++ og -- INF1000 : Forelesning 4. Oppgave. Blokker. 0 udefinert udefinert. Alternativ 2 Postfiks-operator

UNIVERSITETET I OSLO

Løsningsforslag til eksamen i INF1000 våren 2006

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

INF1000 (Uke 14) Resten av eksamen H03 + del av V05

INF1000. Marit Nybakken 10. februar 2004

INF1000: Forelesning 11. Oppgave 2. Oppgave 1. Husk å melde deg på prøveeksamen i INF1000! Ole Christian Lingjærde 7.november 2006

INF 1000 høsten 2011 Uke september

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I Løsningsforslag

INF1010 våren januar. Objektorientering i Java

INF1000 undervisningen INF 1000 høsten 2011 Uke september

MER OM ARRAYER. INF1000: Forelesning 4. Anta at vi ønsker å lagre en liste med navnene på alle INF1000-studentene:

UNIVERSITETET I OSLO

Lenkelister. Lister og køer. Kopi av utvalgte sider fra forelesningen.

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

INF1000 Klasser og objekter

INF1000 oppgaver til uke 38 (17 sep 23 sep)

1. Finn klassene (hvilke objekter er det i problemet) 1. Dataene som beskriver problemet (hvilke objekter har vi og hvor mange klasser er det?

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

Jentetreff INF1000 Debugging i Java

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

IN1010 våren 2018 Tirsdag 15. mai. Repetisjon av subklasser og tråder. Stein Gjessing Institutt for informatikk Universitetet i Oslo

Transkript:

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. Med arrayer kan dette for eksempel gjøres slik: int maxantall = 500; String[] navn = new String[maxAntall]; String[] brukernavn = new String[maxAntall]; String[] tlfnr = new String[maxAntall]; int antallstud = 0; navn brukernavn tlfnr 0 1 2... "Aud" 0 "audg" 0 "521" "Georg" 1 "geob" 1 "403" "Lillen"" 2 "lillek" 2 "698"... 499 499 499 Opplysninger om student nummer 2 Hva er galt med denne måten å gjøre det på?...

En bedre løsning: objekter Ofte mer naturlig å samle all informasjon om hver student dette kan gjøres i et objekt. 0 1 2 3 4 5... 499... "Aud" "audg" " "521" navn brukernavn n tlfnr "Georg" "geob" "403" navn brukernavn tlfnr "Lillen" "lillek" "698" navn brukernavn tlfnr 4

Aktuelle spørsmål Hvordan bestemmer vi hvilke data et student-objekt er i stand til å ta vare på? Hvordan oppretter vi et nytt objekt når en ny student skal legges inn i registeret? Hvordan legger vi data om studenten inn i objektet? Hvordan henter vi data ut av objektet når vi ønsker opplysninger om studenten? Hvordan sletter vi et objekt når studenten skal slettes fra registeret? 5

Klasser en mal for objekter Vi bruker en klassedeklarasjon til å angi hvilke data et Student-objekt skal kunne ta vare på: class Student { String navn; String brukernavn; String tlfnr; Klassen Student blir da en mal/oppskrift/modell for hva Student-objekter skal inneholde. Merk at vi ikke har laget noen objekter enda! 6

Hvordan lage objekter? For å ta vare på/holde orden på objekter trenger vi pekere til dem. Disse deklareres omtrent som andre variable: Student s1, s2; Foreløpig peker disse på ingenting (null): s1 s2 Objekter lages ved å si new på klassenavnet: s1 = new Student(); s2 = new Student(); navn brukernavn bu tlfnr navn brukernavn tlfnr Vi kan deklarere pekere og opprette objektene samtidig: Student s1 = new Student(); Student s2 = new Student(); 7

Hvordan få tilgang til innholdet i objektet? Variablene i et objekt kan vi få tak i ved å skrive pekernavn.variabelnavn Punktumet leses som sin eller sitt Dette kan brukes både til å sette og hente ut verdiene i objektet: Student s1 = new Student(); s1.navn = "Aud"; s1.brukernavn = "audg"; s1.tlfnr = "521"; s1 "Aud" "audg" "521" navn brukernavn tlfnr System.out.println("Navn: " + s1.navn); System.out.println("Brukernavn: " + s1.brukernavn); System.out.println("Telefon: t tl l " + s1.tlfnr); 8

Metoder i objektene Metoder som benytter seg av variablene i et objekt, hører ofte logisk hjemme i dette objektet og kan (bør) deklareres som en del av klassen: class Student { String navn; String brukernavn; String tlfnr; void skrivdata() { System.out.println("Navn: " + navn); System.out.println("Brukernavn: " + brukernavn); System.out.println("Telefon: " + tlfnr); 9

Komplett program class Student { String navn, brukernavn, tlfnr; void skrivdata() { System.out.println("Navn: " + navn); System.out.println("Brukernavn: " + brukernavn); System.out.println("Telefon: " + tlfnr); class StudentRegister { public static void main(string[] args) { Student s1, s2; s1 = new Student(); s1.navn = "Aud"; s1.brukernavn = "audg"; s1.tlfnr = "521"; s2 = new Student(); s2.navn = "Georg"; s2.brukernavn = "geob"; s2.tlfnr = "403"; s1.skrivdata(); s2.skrivdata(); >java StudentRegister Navn: Aud Brukernavn: audg Telefon: 521 Navn: Georg Brukernavn: geob Telefon: 403 10

Studentregister med mange studenter Med mange studenter i registeret, kan vi bruke en array av pekere til å ta vare på alle Studentobjektene: class StudentRegister { public static void main(string[] args) { // Deklarerer datastrukturen int maxantall = 500; Student[] studentene = new Student[maxAntall]; int antallstud = 0; // Legger inn testdata om en student studentene[antallstud] = new Student(); studentene[antallstud].navn = "Aud"; studentene[antallstud].brukernavn = "audg"; studentene[antallstud].tlfnr = "521"; // NB: Husk å oppdatere antallstud! antallstud++; 11

Mer om pekere Flere pekere kan godt peke på samme objekt: Student s1, s2; s1 = new Student(); s2 = s1; s1 s2 navn brukernavn tlfnr Vi kan sjekke om to pekere peker på det samme eller ikke: if (s1 == s2) { // s1 og s2 peker på det samme if (s1!= s2) { // s1 og s2 peker ikke på det samme 12

Mer om pekere (forts) Av og til har vi behov for å teste om en peker virkelig peker på et objekt eller ikke. Vi sammenligner da pekeren med den spesielle null-verdien: if (s1!= null && s1.navn.equals("aud") { // s1 peker på et Student-objekt // hvor variabelen navn er lik "Aud" For å fjerne et objekt fra en peker: s1 = null; Et objekt som ingen pekere peker på, blir tatt tt av søppeltømmeren et program som automatisk startes hvis det er lite plass i hukommelsen 13

OBJEKTORIENTERING SOM EN TANKEMÅTE

Objekter Vi deler often verden inn i enheter når vi snakker om den: Blomster, mennesker, biler, bankkontoer, Slike enheter kaller vi objekter Mange av objektene i verden er ganske like (av samme type), men kan skille seg fra hverandre med feks. ulike navn Studentene t Kia og Espen To bøker med ulik tittel/forfatter Objekter av samme type sier vi tilhører samme klasse Beskrives av de samme variablene, men med ulike verdier på noen disse Eks: to biler av samme bilmerke men med ulike reg.nummer To objekter kan også være helt vesensforskjellige Eks: et tre og en lastebil De er da objekter av forskjellige klasser 15

Hvor mange klasser (og objekter) er det? Hva vi velger å betrakte som et objekt, og hvilke klasser vi bruker for å beskrive en problemstilling, er ikke bestemt på forhånd. Hvilke klasser vi bruker til å beskrive et problem, varierer ofte etter hvor mye detaljer vi trenger og hvilke spørsmål vi ønsker å kunne gi svar på: Beskrive problemet med veitrafikk og køer på veiene: Telle antall biler og kanskje skille mellom lastebiler, busser og personbiler Men neppe mer Beskrive problemet til en bilfabrikk Trenger en detaljert og komplisert beskrivelse av hver bil (bestående av motor, hjul, karosseri, lys,..., hver beskrevet med sin klasse) Mange ulike typer av biler Har da en rekke klasser som hver beskriver sine objekter. 16

Objektorientert Programmering - I Når vi betrakter et problem vi skal lage et datasystem for, gjør vi to avgrensninger: 1. Vi ser bare på en del av verden (vårt problemområde) 2. Innenfor problemområdet betrakter og beskriver vi bare det som er der med en viss detaljeringsgrad bare så mange detaljer vi trenger for å svare på de spørsmål datasystemet skal kunne gi svar på. Eks: Hvordan beskrive en student? Skal vi lage: a) Studentregister: bare registrere navn, personnummer, adresse, tidligere utdannelse og kurs (avlagte og kurs vedkommende tar nå) b) Legesystem for studenter: ta med svært mange opplysninger om hver student (medisiner, sykdommer, resultat fra blodprøver, vekt...) som vi ikke ville drømme om å ha i et vanlig studentregister 17

Objektorientert Programmering - II Når vi skal lage et programsystem, så skal det i størst mulig grad være en modell av vårt problemområde en en-til-en kopi: Ett objekt i problemområdet (vår avgrensning av verden) skal medføre at det finnes ett objekt i programmet som representerer dette objektet. (I tillegg kommer mange klasser og objekter i programmet for å lese fra tastatur og fil, skrive til skjerm,..) Eks.: Hver virkelig student skal ha sitt Student-objekt i et studentregister-system. 18

Eksempel: Et meget enkelt banksystem Vi skal lage et banksystem y for å holde orden på alle kontoene til en bank. Systemet skal kunne opprette ny konto sette inn penger på en konto ta ut penger fra en konto vise summen av innskudd i banken Vi må da bestemme hvilken datastruktur vi skal ha i programmet, dvs hvilke klasser/objekter trenger vi? hvilke opplysninger trenger vi i hver klasse/objekt? hvilke metoder vi trenger, og for hver av metodene hvilken klasse den skal ligge i 19

Data i Konto og Bank (en bank har mange konti) class BankSystem { public static void main(string[] args) { Bank b = new Bank(); b.navn = "Min Bank"; b.brukerdialog(); class Bank { Konto[] kontiene = new Konto[100000]; int antallkonti = 0; kontiene String navn; 0 Objekter av klassen Konto class Konto { String navn, adr; int kontonr; double saldo = 0.0; antallkonti 99 999 NB: Skal også ha metoder i Bank og Konto!

Metoden nykonto Skal få data om ny konto fra brukeren, opprette ny konto og legge den inn i systemet. // I klassen Bank: void nykonto() { // Leser inn data om ny konto System.out.print("Navn på ny kontoinnehaver: "); String navn = tastatur.inline(); System.out.print("Adresse: "); String adr = tastatur.inline(); // Opretter ny konto Konto k = new Konto(); k.adr = adr; k.navn = navn; k.kontonr = antallkonti; // Legger ny konto inn i datastrukturen kontiene[antallkonti] t ti] = k; antallkonti++; 21

Metoden innskudd Skal be om navn på kontoinnehaver og beløp som skal settes inn, finne riktig konto og øke saldoen. void innskudd() { Konto k = finnkonto(); if (k!= null) { System.out.print("Innskuddsbeløp: "); double innskudd = tastatur.indouble(); k.settinn(innskudd); // I klassen Konto: void settinn(double inn) { saldo += inn; Konto finnkonto() { System.out.print("Navn på kontoinnehaver: "); String s = tastatur.inline(); for (int i = 0; i < antallkonti; i++) { if (kontiene[i].navn.equals(s)) { return kontiene[i]; System.out.println("Fant t tl t ikke kontoinnehaver"); return null; 22

Metoden uttak Skal be om navn på kontoinnehaver og beløp som skal tas ut, finne riktig konto, // I klassen Konto: sjekke at det er nok penger på konto og minske saldoen. boolean taut(double ut) { if (ut > saldo) { return false; else { saldo -= ut; return true; void uttak() { Konto k = finnkonto(); if (k!= null) { System.out.print("Uttaksbeløp: "); double uttak = tastatur.indouble(); boolean ok = k.taut(uttak); if (!ok) { System.out.println("Ikke nok penger på konto."); 23

Metoden suminnskudd Skal summere saldoen på alle konti i banken. void suminnskudd() { double suminnskudd = 0.0; for (int i = 0; i < antallkonti; i++) { suminnskudd += kontiene[i].saldo; System.out.println("Sum innskudd: " + suminnskudd); 24

OPPSUMMERING

Oppsummering Et objekt er en samling av variabler, pekere og metoder som sammen utgjør en enhet. En klasse er en mal/form/oppskrift som vi kan lage objekter med. Lager vi to, tre,.. objekter av klassen, får vi to, tre,.. slike kopier Vi deler opp programmet vårt i flere klasser Fordi hver programdel (klasse) skal være mulig å holde oversikt over ikke for stor. Fordi en klasse skal være god modell av en del av det problemområdet vi lager program for.