OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

Like dokumenter
INF1000: Forelesning 6. Klasser og objekter del 1

Introduksjon til objektorientert programmering

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

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

INF1000: Forelesning 7

INF1000: Forelesning 7. Konstruktører Static

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

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

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

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

Dagens tema Kapittel 8: Objekter og klasser

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

Et meget enkelt banksystem

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

INF Uke 10. Ukesoppgaver oktober 2012

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

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

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

INF1000: noen avsluttende ord

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

Uke 7 Mer om Objekter, klasser og pekere;

Uke 7 Mer om Objekter, klasser og pekere;

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

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

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

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

INF Uke 10. Løsningsforslag ukesoppgaver oktober 2012

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

Klasser, objekter, pekere og UML. INF gruppe 13

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

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

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

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

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();

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

UNIVERSITETET I OSLO

INF1010 våren Arv og subklasser del 1

INF1000 Metoder. Marit Nybakken 16. februar 2004

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

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

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

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

Repetisjon. INF gruppe 13

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

UNIVERSITETET I OSLO

INF1000. Marit Nybakken 10. februar 2004

INF1010 våren Arv og subklasser del 1

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:

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

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

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?

INF1000: noen avsluttende ord

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

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

UNIVERSITETET I OSLO

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

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

HashMap. INF1000 Forelesning 9. Ulike versjoner i Java 1.4 (gammel) og Java 1.5/1.6 av HashMap. Objekter lagres med en søkenøkkel

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

UNIVERSITETET I OSLO

INF1000 Forelesning 9. Hashmap Eksempel: Flyreservasjon

Transkript:

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 arrayer kan dette for eksempel gjøres slik: int maxantall = 500; String[] = new String[maxAntall]; String[] bruker = new String[maxAntall]; String[] = new String[maxAntall]; int antallstud = 0; bruker 0 "Aud" 0 "audg" 0 "51" 1 "Georg" 1 "geob" 1 "403" "Lillen"" "lillek" "698" 499 499 499 Opplysninger om student nummer 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 "Aud" "audg" " "51" 0 1 3 4 5 499 bruker n "Georg" "geob" "403" bruker "Lillen" "lillek" bruker "698" 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? Klasser en mal for objekter Vi bruker en klassedeklarasjon til å angi hvilke data et Student-objekt skal kunne ta vare på: class Student { String ; String bruker; String ; Klassen Student blir da en mal/oppskrift/modell for hva Student-objekter skal inneholde Merk at vi ikke har laget noen objekter enda! 5 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, s; Foreløpig peker disse på ingenting (null): s1 s Objekter lages ved å si new på klasseet: s1 = new Student(); s = new Student(); Vi kan deklarere pekere og opprette objektene samtidig: Student s1 = new Student(); Student s = new Student(); bruker bu bruker 7 Hvordan få tilgang til innholdet i objektet? Variablene i et objekt kan vi få tak i ved å skrive pekervariabel Punktumet leses som sin eller sitt Dette kan brukes både til å sette og hente ut verdiene i objektet: Student s1 = new Student(); s1 = "Aud"; s1bruker = "audg"; s1 = "51"; s1 "Aud" "audg" "51" bruker Systemoutprintln("Navn: " + s1); Systemoutprintln("Bruker: " + s1bruker); Systemoutprintln("Telefon: t tl l " + s1); 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 ; String bruker; String ; void skrivdata() { Systemoutprintln("Navn: " + ); Systemoutprintln("Bruker: " + bruker); Systemoutprintln("Telefon: " + ); 9 Komplett program class Student { String, bruker, ; void skrivdata() { Systemoutprintln("Navn: " + ); Systemoutprintln("Bruker: " + bruker); Systemoutprintln("Telefon: " + ); class StudentRegister { public static void main(string[] args) { Student s1, s; s1 = new Student(); s1 = "Aud"; s1bruker = "audg"; >java StudentRegister s1 = "51"; Navn: Aud s = new Student(); s = "Georg"; Bruker: audg sbruker = "geob"; Telefon: 51 s = "403"; Navn: Georg s1skrivdata(); Bruker: geob sskrivdata(); 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] = "Aud"; studentene[antallstud]bruker = "audg"; studentene[antallstud] = "51"; // NB: Husk å oppdatere antallstud! antallstud++; 11 Mer om pekere Flere pekere kan godt peke på samme objekt: Student s1, s; s1 s1 = new Student(); s s = s1; Vi kan sjekke om to pekere peker på det samme eller ikke: if (s1 == s) { // s1 og s peker på det samme if (s1!= s) { // s1 og s peker ikke på det samme bruker 1

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 && s1equals("aud") { // s1 peker på et Student-objekt // hvor variabelen 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 OBJEKTORIENTERING SOM EN TANKEMÅTE 13 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 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 regnummer To objekter kan også være helt vesensforskjellige Eks: et tre og en lastebil De er da objekter av forskjellige klasser 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 15 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) 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, 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 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 17 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 = "Min Bank"; bbrukerdialog(); class Bank { Konto[] kontiene = new Konto[100000]; int antallkonti = 0; kontiene String ; class Konto { String, adr; int kontonr; double saldo = 00; antallkonti 0 99 999 NB: Skal også ha metoder i Bank og Konto! Objekter av klassen 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 Systemoutprint("Navn på ny kontoinnehaver: "); String = tastaturinline(); Systemoutprint("Adresse: "); String adr = tastaturinline(); // Opretter ny konto Konto k = new Konto(); kadr = adr; k = ; kkontonr = antallkonti; // Legger ny konto inn i datastrukturen kontiene[antallkonti] t ti] = k; antallkonti++; 1 Metoden innskudd Skal be om på kontoinnehaver og beløp som skal settes inn, finne riktig konto og øke saldoen void innskudd() { Konto k = finnkonto(); if (k!= null) { Systemoutprint("Innskuddsbeløp: "); double innskudd = tastaturindouble(); ksettinn(innskudd); // I klassen Konto: void settinn(double inn) { saldo += inn; Konto finnkonto() { Systemoutprint("Navn på kontoinnehaver: "); String s = tastaturinline(); for (int i = 0; i < antallkonti; i++) { if (kontiene[i]equals(s)) { return kontiene[i]; Systemoutprintln("Fant t tl t ikke kontoinnehaver"); return null; Metoden uttak Skal be om 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) { Systemoutprint("Uttaksbeløp: "); double uttak = tastaturindouble(); boolean ok = ktaut(uttak); if (!ok) { Systemoutprintln("Ikke nok penger på konto"); Metoden suminnskudd Skal summere saldoen på alle konti i banken void suminnskudd() { double suminnskudd = 00; for (int i = 0; i < antallkonti; i++) { suminnskudd += kontiene[i]saldo; Systemoutprintln("Sum innskudd: " + suminnskudd); 3 4

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 F di h d l (kl ) k l li å h ld ikt 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