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



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

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

Inf1000 (Uke 7) Objekter, klasser og pekere

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

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

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

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

Et meget enkelt banksystem

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

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

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

Uke 7 Mer om Objekter, klasser og pekere;

Uke 7 Mer om Objekter, klasser og pekere;

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; 22. og 29. sept. 2009, 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

INF1000: Forelesning 7. Konstruktører Static

Stringer er ordentlige objekter. Uke 8 - Mer om objekter og klasser. Tips Oblig3. Eksempel Student med en konstruktør

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

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

INF1000: Forelesning 6. Klasser og objekter del 1

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

Null, && og søppeltømmeren. INF Forelesning 9: Mer om objekter og klasser, tips til oblig 3. Eksempel Student med én konstruktør

INF1000: Forelesning 7

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

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

Hva skal vi lære i dag? Inf1000 (Uke 9) UML og enda mer om klasser. Hvilke lesemetoder finnes? Filbehandling. Repetisjon om filbehandling UML

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

Inf1000 (Uke 9) UML og enda mer om klasser

Hva skal vi lære i dag? Inf1000 (Uke 9) UML og enda mer om klasser. Hvilke lesemetoder finnes? Filbehandling

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

( & ( &/ 2& , )-. &* &/ ),* 0, &/ 2 ) *

! " ##$ % 4 2, &/ ( & +, )-. &* &/ ),* 0, 1 1 ( &/ 2& &, & &/ &,, &/" 2 &/ 2 ) *

Inf1000 (Uke 9) UML og enda mer om klasser

Introduksjon til objektorientert programmering

Oblig 4Hybelhus litt mer tips enn i oppgaven

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

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

Eksamensrelevant repetisjonsstoff. Deklarasjoner og variabeltyper. Konstanter

Klasser, objekter, pekere og UML. INF gruppe 13

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

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

Oppgave 1. Oppgave 2. Oppgave 3. 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

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

Repetisjon. INF gruppe 13

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

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

Oblig 3 tips litt mer tips enn i oppgaven

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

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

INF1000: noen avsluttende ord

De neste ukene. INF1000 Uke 12. Prøveeksamen. Nå - Prøveeksamen. Forelesning om IT og samfunn neste uke (13/11).

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

2 Om statiske variable/konstanter og statiske metoder.

UNIVERSITETET I OSLO

Dagens tema Kapittel 8: Objekter og klasser

Innhold. INF1000 (Uke 11) Programmering. Rep: Metoder. Rep: Hva er en metode? Litt repetisjon. To måter å programmere på

INF1000 Metoder. Marit Nybakken 16. februar 2004

Blokker og metoder INF1000 (Uke 6) Metoder

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Forelesning inf Java 4

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

En klasse er noe - en metode gjør noe (! / # <= (! * +!! ",-' %. "- -/ %.!#) )! " 0'%! * *$! "1-)) '' % '. 22!'( 7/ /! * 2 2! "*"% 8"%% 9 - -!

Praktisk informasjon. I dag. Repetisjon: While-løkker. INF1000 (Uke 5) Mer om løkker, arrayer og metoder

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

UNIVERSITETET I OSLO

INF1010 UML. Marit Nybakken 26. januar 2004

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Løsningsforslag ukeoppg. 7: okt (INF Høst 2010)

INF1000 : Forelesning 4

Hva er en metode? INF1000 Forelesning 8. Hva skjer når vi kaller en metode? Hvorfor bruke metoder?

Forelesning inf Java 5

Forelesning inf Java 5

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

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

UNIVERSITETET I OSLO

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

(MVC - Model, View, Control)

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

Inf1000 uke 5 18.sept. 2007

UNIVERSITETET I OSLO

INF1000 Forelesning 8. Litt repetisjon: Metoder og klasser Innkapsling av variable og metoder Hvordan gripe an et stort problem?

Praktisk informasjon. Repetisjon: While-løkker. I dag. INF1000 (Uke 5) Mer om løkker, arrayer og metoder. Oblig 2 er lagt ut

INF1000 (Uke 6) Mer om metoder, tekster

Generelt om oblig 3. Oppgaveteksten kort sammendrag. Deloppgaver/menyvalg 15/03/2010. INF1000 Forelesning 9

Rep: Metoder. INF1000 (Uke 6) Mer om metoder, tekster. Rep: Metoder. 3 typer variable: Klassevariable. Java-programmene så langt i kurset:

INF Uke 10. Ukesoppgaver oktober 2012

Gjennomgang av eksamen H99

INF Uke 10. Løsningsforslag ukesoppgaver oktober 2012

To måter å programmere på. Java 12. Programmering med objekter. Statisk programmering

UNIVERSITETET I OSLO

1. Separatorer (skilletegn) i easyio

INF1000 : Forelesning 3

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

Inf1000 (Uke 7) Objekter, klasser og pekere

Transkript:

Objekter Uke 6 - 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 : For bedre å kunne tenke om, snakke om og forstå verden. 27. sept. og 4. okt. 2005 Verden består av mange objekter, noen ganske like, noen ulike Klasser og objekter i verden Ser vi rundt oss i auditoriet, ser vi Studenter (mange), stoler, murstein, lysarmatur, blyanter,... Vi ser at når vi betrakter verden, deler vi den opp i et passe antall enheter/deler/ klumper som vi har egne navn for. Slike enheter/ klumper vi deler verden inn i, kaller vi objekter Mange av objektene i verden er egentlig like, av samme type, men kan skille seg fra hverandre med feks. ulike navn Studentene Kia og Espen to bøker med ulik tittel/forfatter Objekter som er egentlig er like sier vi tilhører samme klasse De beskrives av samme sett med variable, men har ulike verdier på noen disse (to biler av samme bilmerke men med ulike reg.nummer) To objekter kan også være helt vesensforskjellige (f.eks et tre og en lastebil) De er da to objekter av hver sin klasse (klassen Tre og klassen Lastbil) Hva vi velger å betrakte som et objekt, og hvilke klasser vi bruker for å beskrive en problemstilling, er ikke bestemt på forhånd. Innenfor vide rammer bestemmer vi det selv. Klasser er generelle begreper for å beskrive og strukturere verden Begreper er ikke gitt en gang for alle - vi kan godt lage oss nye begreper når det er hensiktsmessig.

Hvor mange klasser (og objekter) er det? Hvilke klasser vi bruker til å beskrive et problem, varierer ofte etter hvor detaljert vi betrakter en problemstilling og hvilke spørsmål vi ønsker å kunne gi svar på: Beskriver vi problemet med veitrafikk og køer på veiene, er vi neppe interessert i mer enn å telle antall biler og kanskje skille mellom lastebiler, busser og personbiler. Beskriver vi problemet til en bilfabrikk, trenger vi en meget detaljert og komplisert beskrivelse av hver bil (bestående av motor, hjul, karosseri, lys,..., hver beskrevet med sin klasse) og mange ulike typer av biler. Vi se da en rekke klasser som hver beskriver sin sine objekter. 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) Et Studentregister, registrerer vi bare navn, personnummer, adresse, tidligere utdannelse og kurs (avlagte og kurs vedkommende tar nå) b) Et legesystem for studenter, ville vi 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 Hvordan lage klasser og objekter i et program. 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 skal medføre at det skal være ett objekt i programmet som representerer dette verdens 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. Klasser deklarerer vi med class Vi lager pekere til objekter ved å deklarere dem med klassenavnet Vi lager et objekt med å si new foran et klassenavn Forholdet mellom et objekt og en peker er som en array-peker og et array-objekt class Student { String navn, adresse; class StudentRegister { public static void main(string args []) { Student s1, s2; s1 = new Student(); s2 = new Student();

Hva er et objekt i programmet? Peker og objekter Et objekt er et område i lageret som inneholder en kopi av alle de metodene og variable i en klasse det ikke står static foran Klassene er en slags mal/form/oppskrift som vi kan lage objekter med. Lager vi to, tre,.. objekter av klassen, får vi to, tre,.. slike kopier De variable og metode det ikke står static foran, kalles objekt-variable og objekt-metoder De variable og metoder det står static foran, kalles klassemetoder og klasse-variable, og blir ikke med i objektene (men ligger lagret i bare ett eksemplar et annet sted) class Student { String navn, adresse; class StudentRegister { public static void main(string args []) { Student s1, s2; s1 s2 En peker inneholder adressen til hvor et objekt ligger i lageret eller den inneholder null (= ikkeobjekt) Vi tegner adressen som en pil navn adresse s1 = new Student(); s2 = new Student(); s1 s2 navn adresse Programmer i Java består av en eller flere klasser Objekter og pekere, og hvordan få adgang til innmaten av et objekt (.) 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 problemet vårt vi lager program for. Anta at vi hadde et datasystem som omhandlet kurs og studenter. Da ville vi ha en klasse Student og en klasse Kurs i programmet. En klasse inneholder Deklarasjon av null eller flere variable som beskriver ett eksemplar av det klassen er modell av Null eller flere metoder En klasse representer et generelt begrep som: Student, Kurs, Person, Dokument, Eiendom, CDRegister, CD, Billett, Bil, Fly, Tre, Ku, Motorsykkel... Når vi har laget et objekt med new, har vi altså fått en kopi av objekt-variablene og metodene, men hvordan får tak i dem? Vi bruker operatoren. (punktum). Foran punktumet har vi navnet på en peker til et objekt. Etter punktum har vi navnet på en variabel eller metode inne i objektet Punktumet leses som sin eller sitt eks: La s1 peke på et Student-objekt. s1.navn = "Ola N";

class Student { String navn, adresse; void skrivut() { System.out.println("Student med navn:" + navn+ ", adr:" + adresse); class StudentRegister { public static void main(string args []) { Student s1, s2; s1 = new Student(); s1.navn = "Ola N"; s1.adresse = "Storgt. 12, 1415 Nordby"; s2 = new Student(); s2.navn = "Åsne S"; s2.adresse ="bokhandelen i Kabul"; s1.skrivut(); s2.skrivut(); >java StudentRegister Student med navn:ola N, adr:storgt. 12, 1415 Nordby Student med navn:åsne S, adr:bokhandelen i Kabul Oppsummering om klasser, objekter, pekere og. Verden består av objekter av ulike typer (klasser). Ofte er det mange objekter av en bestemt type. Objekter som er av samme klasse, beskrives med de samme variablene, men vil ha forskjellige verdier på noen av disse. Eks: To bankkonti med ulik eier og kontonummer, men samme beløp på saldo (tilfeldigvis) Vi lager OO-programmer ved å lage en modell av problemområdet i Javaprogrammet ett objekt i verden gir ett tilsvarende Java-objekt i programmet Objekter kan være av ulik type, og for hver slik type deklarerer vi en klasse i programmet.. oppsummering forts. class Kurs { String kurskode; int studiepoeng; objektvariable Et Javaprogram består av en eller flere klasser En klasse er en deklarasjon av data og metoder for ett objekt av klassen. Vi deklarerer pekere til objekter av en bestemt klasse f.eks. class Kurs {.. slik: Kurs kurs14, k2, k; Vi lager objekter fra klassen med new k2 = new Kurs(); Et objekt inneholder en kopi av alle ikke-statiske variable og ikke-statiske metoder i klasse Disse kalles objekt-variable og objekt-metoder Vi får adgang (lese, skrive og kalle metoder) til det som er inni et objekt ved. Operatoren : Vi må ha en peker til et objekt etterfulgt av punktum. s2.adresse ="bokhandelen i Kabul"; s1.skrivut(); void skrivut() { System.out.println("Kurs med kode:" + kurskode+ ", og stp:" + studiepoeng); class KursRegister { public static void main(string args []) { Kurs inf, mat; inf = new Kurs(); inf.kurskode = "INF1000"; inf.studiepoeng = 10; inf.skrivut(); mat = new Kurs(); mat.kurskode = "MAT1010"; mat.skrivut(); Objekt - metode Klasse - metode Lager to objekter av klassen Kurs >java KursRegister Kurs med kode:inf1000, og stp:10 Kurs med kode:mat1010, og stp:0

Oversikt Klasse-variabel (=statisk variabel) Mer om static Klassevariable Klasse-metoder Arrayer av pekere til objekter UML objektdiagram Eks CD-samling Konstruktører eksempel med tre klasser: Student, Kurs og StudentRegister Setter vi static foran en variabel, er det er bare én felles variabel med det navnet for alle objektene. Setter vi static foran en metode, har den bare utsikt til : sine egne lokale variable og parametere andre statiske variable og metoder klassenavnene Statiske metoder og variable kan man få adgang til både via klassenavnet og punktum via peker til et objekt av klassen og punktum class B { >java A static int i = 0; b1.i :0, b2.i:0 double x = 0.0; b1.i :4, b2.i:4 b1.x :0.0, b2.x:0.0 class A b1.x :2.0, b2.x:0.0 { int k; public static void main ( String[] args) { B b1 = new B(), b2 = new B(); // endre klassevariable (det er bare en felles) System.out.println("b1.i :"+ b1.i+", b2.i:" + b2.i); b1.i = 4; System.out.println("b1.i :"+ b1.i+", b2.i:" + b2.i); // endre objektvariabel (en kopi i hvert objekt) System.out.println("b1.x :"+ b1.x+", b2.x:" + b2.x); b1.x = 2; System.out.println("b1.x :"+ b1.x+", b2.x:" + b2.x); class A2 { int k; // objektvariabel k public static void main ( String[] args) { k = 1; >javac a2.java a2.java:6: non-static variable k cannot be referenced from a static context k = 1; ^ 1 error class A2 { int k; >javac A2.java > public static void main ( String[] args) { A2 aa = new A2(); aa.k = 1;

Arrayer av pekere til objekter Vi kan lage arrayer av pekere til objekter (men ikke av objektene direkte) omlag på samme måte som vi lager arrayer av int, double og String Har vi deklarert klassen Kurs {... kan vi lage array som følger: Kurs [] ifikurs; ifikurs = new Kurs[120]; ifikurs[0] = new Kurs(); Her deklareres bare array-pekeren Her lages arrayobjektet med 120 tomme pekere Her settes det første pekeren i array-objektet til å peke på et nytt Kurs-objekt class Kurs { String kurskode; int studiepoeng=10; void skrivut() { System.out.println("Kurs med kode:" + kurskode + ", og stp:" + studiepoeng); class KursRegister2 { public static void main(string args []) { String [] kurskoder= {"INF1000","INF1010", "INF1020","INF1040","INF1050", "INF1060","INF1070","INF1400"; Kurs [] ifi1000kurs = new Kurs[8]; for(int i = 0; i < kurskoder.length; i++) { ifi1000kurs[i] = new Kurs(); ifi1000kurs[i].kurskode = kurskoder[i]; ifi1000kurs[i].skrivut(); arraypekeren ifi1000kurs peker til et array-objekt med 8 Kurs-pekere "INF1000 "INF1010 "INF1400 Eksekvering av KursRegister2 >java KursRegister2 Kurs med kode:inf1000, og stp:10 Kurs med kode:inf1010, og stp:10 Kurs med kode:inf1020, og stp:10 Kurs med kode:inf1040, og stp:10 Kurs med kode:inf1050, og stp:10 Kurs med kode:inf1060, og stp:10 Kurs med kode:inf1070, og stp:10 Kurs med kode:inf1400, og stp:10 Et meget enkelt banksystem Vi har klassene: Konto Bank Hvilke opplysninger har vi i hver klasse/objekt? Og operasjonene (dvs. metodene): Ny konto Sett inn Ta ut Vis summen av innskudd i banken

Data i Konto og Bank (en bank har mange konti) class Bank{ Konto [] kontiene = new Konto[100000]; int antallkonti = 0; kontiene 0 // Metoder mangler public static void main antallkonti (String [] args) {.. class Konto { String navn, adresse; int kontonummer; double saldo =0.0; // Metoder mangler 99 999 Betyr at pekeren peker på ingenting: null Objekter av klassen Konto Metoder i Bank og Konto (+ noen hjelpemetoder) class Bank{ Konto [] kontiene = new Konto[100000]; static int kontonummer = 500000; int antallkonti = 0; In tast = new In(); double suminnskudd() { void nykonto() { int menyvalg() { public static void main (String [] args) { Bank b = new Bank(); b.navn = "BB-Bank"; int valg =0; Konto k; class Konto { double kr ; String navn,adresse; do { valg = b.menyvalg(); int kontonummer; switch(valg) {... double saldo =0.0; while (valg > 0); // end main void settinn (double kr) { double spørsvar (String s){ boolean taut(double kr) { Konto riktigkonto() { // end class Konto // end Bank int menyvalg() { System.out.println(" \nvelg funksjon i "+ navn+":"); System.out.println ("1 - ny konto:"); System.out.println ("2 - innskudd:"); System.out.println ("3 - uttak:"); System.out.println ("4 - sum forvaltningskapital\n"); return tast.inint(); public static void main (String [] args) { Bank b = new Bank(); b.navn="bb-bank"; int valg =0; Konto k; double kr ; do { valg = b.menyvalg(); switch(valg) { case 1: b.nykonto(); break; case 2 :k = b.riktigkonto(); kr = b.spørsvar("gi innskudd"); k.settinn(kr); break; case 3 :k = b.riktigkonto(); kr = b.spørsvar("gi uttaksbeløp"); if (! k.taut(kr)) System.out.println("IKKE NOK PENGER"); break; case 4:System.out.println(b.navn+ " Sum innskudd:" + b.suminnskudd()); break; while (valg > 0); System.out.println("** AVSLUTTER BANKEN ***"); // end main double spørsvar(string s){ System.out.print(s+":"); return tast.indouble(); Konto riktigkonto() { System.out.print("Gi navn til eksisterende konto:"); String s = tast.inword("\n"); for ( int i = 0; i < antallkonti; i++) if (kontiene[i].navn.equals(s) )return kontiene[i]; return null; void nykonto() { System.out.print("Gi navn til ny kontoinnehaver:"); String navn = tast.inword("\n"); System.out.print("Gi adresse:"); String adr = tast.inword("\n"); Konto k = new Konto(); k.adresse = adr; k.navn = navn; k.kontonummer= kontonummer++; kontiene[antallkonti] = k; antallkonti++;

// Mini Banksystem 29 sept 2004 - am import easyio.*; class Bank{ Konto [] kontiene = new Konto[100000]; static int kontonummer = 500000; int antallkonti = 0; double suminnskudd() { int menyvalg() { public static void main (String [] args) { Bank b = new Bank(); b.navn="bb-bank"; int valg =0; do { valg = b.menyvalg(); switch(valg) {... while (valg > 0); // end main double spørsvar(string s){ Konto riktigkonto() { void nykonto() { // end Bank class Konto { String navn,adresse; int kontonummer; double saldo =0.0; void settinn (double kr) { saldo += kr; boolean taut(double kr) { if (saldo >= kr) { saldo = saldo - kr; return true; else return false; // end class Konto Stringer er ordentlige objekter String er en klasse i Java-biblioteket, men har en egen spesiell syntaks (skrivemåte) så det ser ut som den er en av de basale typene (som int, double,..). Når vi har en string, har vi alså både en peker (den vi deklarerer navnet på) og et stringobjekt. String-objekter kan ikke endres (trenger du endrbare tekster, bruk klassen StringBuffer) Egen skrivemåte for stringkonstanter: String s = En fin dag i mai ; Er det samme som: String s = new String( En fin dag i mai ); Klassen String inneholder mer enn 50 metoder for konvertering mellom ulike datatyper og tekst, samt tekstsøking. null, && og søppeltømmeren Av og til har vi behov for å teste om en peker virkelig peker på et objekt eller ikke: Student s = hyblene[i][j].leietager ; if (s!= null && s.navn.equals( Ola )) { // her kommer vi bare hvis s peker på et studentobjekt // og navnet i det studentobjektet er lik Ola... Hvis vi vil fjerne et objekt fra en peker og fra hele systemet: hyblene[i][j].leietager = null; Et objekt som ingen pekere peker på, blir tatt av søppeltømmeren et program som automatisk startes hvis det er lite plass i hukommelsen: UML-diagrammer av programmene våre Hvorfor tegne diagrammer over programmene Oversikt Samarbeid med andre programmererer / systemutviklere Arkitekter, ingeniører tegner først, så bygger de! Enklere å endre en tegning enn programmet Objektdiagrammer Klassediagrammer UML diagrammene er litt annerledes enn det vi har tegnet hittil (men mye av det samme) (i UML er det ca 10 andre diagramtyper vi ikke skal lære)

Objekt-diagrammer Vi tegner en typisk situasjon av objekter i systemet vårt, når vi har fått datastrukturen på plass. Vi tegner og navngir bare de mest sentrale dataene som: pekere peker-arrayer noen sentrale variable i objektene Tegning av et objekt (med mer eller mindre detaljer) To eller ett felt(er) i en boks Navnfeltet objektnavn:klassenavn eller bare :klassenavn Attributt-feltet (kan være tomt) Navnet på sentrale objektvariable evt. også med verdier Andre elementer i et objektdiagram Pekere Peker-arrayer Eksempel: Et CD-samling Vi ønsker å lage et lite menystyrt program for å holde orden på CD-samlinga vår med mindre enn 1000 CDer. Vi skal ha funksjoner for å : registrere ny CD Søke etter artist (skriv ut alle platene med denne) Skrive ut hele registeret Hvilke klasser har vi i dette problemet Opplagt class CD Noen fler?

Klassene: CD og CDsamling Vi tenker oss følgende datastruktur (er den tilstrekkelig?) Vi har her forenklet programmet (klassen CDsamling forventes å inneholde main, meny-metode og sentral switch,..., mens CD inneholder utskriftsrutine. import easyio.*; class CD{ String artist, tittel; void skrivut(out u) { u.outln("artist:" + artist + ", Tittel:" + tittel); class CDsamling{ CD [] minsamling = new CD[1000]; int antcder = 0; public static void main(string args []) { In tast = new In(); Out skj = new Out(); CDsamling e = new CDsamling(); String a; CD c; int valg; do{ skj.outln("velg:"); skj.outln(" 1 - les ny plate (skriv artist platetittel"); skj.outln(" 2 - skriv artist"); skj.outln(" 3 - avslutt"); valg = tast.inint(); switch(valg) { case 1: // les data c = new CD(); e.minsamling[e.antcder++] = c; skj.out("gi artistnavn:"); c.artist = tast.inword("\n"); skj.out("gi tittel:"); c.tittel = tast.inword("\n"); break; case 2: // skriv data skj.out("gi artistnavn:"); a = tast.inword("\n"); for(int i = 0; i < e.antcder; i++) if (e.minsamling[i].artist.equals(a)) e.minsamling[i].skrivut(skj); break; case 3: // avslutt skj.out("systemet avslutter"); break; default: // feil skj.out("bare gi verdier: 1-3"); while (valg!= 3); >java CDsamling Velg: 1 - les ny plate (skriv artist platetittel 2 - skriv artist 3 - avslutt 1 Gi artistnavn:tom Gi tittel:fest1 Velg: 1 - les ny plate (skriv artist platetittel 2 - skriv artist 3 - avslutt 1 Gi artistnavn:ola Gi tittel:fullfres Velg: 1 - les ny plate (skriv artist platetittel 2 - skriv artist 3 - avslutt 2 Gi artistnavn:tom Artist:tom, Tittel:Fest1 Velg: 1 - les ny plate (skriv artist platetittel 2 - skriv artist 3 - avslutt

Konstruktører startmetoder i klasser Eksempel Student med en konstruktør Når vi lager et objekt av en klasse med new, kaller vi egentlig en metode som heter det samme som klassen (derfor parentesen bak klassenavnet). Vi får automatisk med en slik konstruktør-metode fra oversetteren dersom vi ikke skriver en slik konstruktør selv. Den vi får automatisk er uten parametere og gjør ingen ting. Konstruktører nyttes i all hovedsak til å gi fornuftige startverdier for variable i objektet som dannes. De konstruktørene vi skriver kan ha parametere. Konstruktørene skal ikke ha noen type foran seg, heller ikke void. Vi kan ha flere konstruktører i en klasse, men da må parameterne være ulike i antall eller typen av parametrene class Student { Kurs [] minekurs = new Kurs[3]; Student(String navn, Kurs [] k){ this.navn = navn; for (int i = 0; i<k.length; i++ ){ minekurs[i] = k[i]; minekurs[i].antstudenter++; Eksempel Student med 2 konstruktører class Student { Kurs [] minekurs = new Kurs[3]; Student() { minekurs = new Kurs[0]; Student(String navn, Kurs [] k){ this.navn = navn; for (int i = 0; i<k.length; i++ ){ minekurs[i] = k[i]; minekurs[i].antstudenter++; this Av og til trenger vi en peker til det objektet metoden vi utfører er inne i. Java-ordet this gir oss alltid det. Brukes i to situasjoner: Vi har en konstruktor, og parametrene til denne heter det samme som objekt-variable i objektet. Eks: class A { int antall; A (int antall ){ this.antall = antall; // end A.. A apek = new A(12); Vi skal kalle en metode i et annet objekt (gjerne av en annen klasse). Da kan vi bruke this for å overføre en parameter til denne metoden om hvilket objekt kallet kom fra.

import easyio.*; Konstruktører og this class HybelHus { Hybel [][] hyblene = new Hybel[4][8]; Hybel-objekt Student-objekt Et helt studentregister med kurs, studenter og registeret HybelHus(String filnavn) { for (int gang = 1;gang <5; gang++) for (int i = 0; i < 8 ; i++){ char b = (char) ('A' +i ); hyblene[gang-1][i] = new Hybel(gang,b); if (new File(filnavn).exists()) {... // end konstriktor void kommandoløkke() {...... hyblene[0][0].leietager = new Student( Jo ); class Oblig3 { public static void main (String[] args) { HybelHus utsyn = new HybelHus("HaiHus.data"); utsyn.kommandoløkke(); // end main // end class Oblig3 class Student { double saldo; Student(String navn) { this.navn = navn; // end Student class Hybel { Student leitager; int gang; char bokstav; Hybel (int gang, char bokstav){ this.gang = gang; this.bokstav = bokstav; navn = ""+ gang+bokstav; // end Hybel Vi har Studenter på Ifi som første semester tar tre kurs, samtidig som vi har behov for å registrere kurs og hvor mange studenter som tar hvert kurs. Vi tegner først en tenkt datastruktur et UML objektdiagram så skriver vi programmet Objektdiagrammet er en forenkling av programmet. Det tar bare med den essensielle datastrukturen (mest pekere og peker-arrayer) som holder datastrukturen sammen class Student { Kurs [] minekurs = new Kurs[3]; Student(){mineKurs = new Kurs[0]; Student(String navn, Kurs [] k){ this.navn = navn; for (int i = 0; i<k.length; i++ ){ minekurs[i] = k[i]; minekurs[i].antstudenter++; >java StudentRegister2 Student med navn:ola N, og kurs: INF1000 INF1040 MAT1030 Student med navn: sne S, og kurs: INF1000 INF1040 MAT1030 Student med navn:null, og kurs: void skrivut() { System.out.println("Student med navn:"+ navn+ ",og kurs:"); for (int i = 0;i < minekurs.length; i ++) System.out.println(mineKurs[i].kurskode); class Kurs { String kurskode ; int antstudenter = 0; Kurs(String k) { kurskode = k;

class StudentRegister2{ public static void main(string args []) { String [] kurskode = {"INF1000","INF1040","MAT1030"; // lag kurs Kurs [] infkurs = new Kurs[3]; for (int i = 0 ; i< infkurs.length; i++) infkurs[i] = new Kurs(kurskode[i]); //lag studenter på informatikk bachelor Student [] stud = new Student[3]; stud[0] = new Student("Ola N", infkurs); stud[1] = new Student("Åsne S",infKurs); stud[3] = new Student(); for (int i = 0 ; i< stud.length; i++) stud[i].skrivut(); Oppsummering Klasser er oppskrifter for hvordan vi lager objekter med new Vi deklarerer pekere til objekter og bruker punktum. Kan ha arrayer av pekere til objekter Klasse- og objektvariable og metoder. Konstruktører er startmetoder med samme navn som klassen, Kalles hver gang vi sier new. UML-diagrammer (Objekt- og Klasse-diagram) gir oversikt og forenkling som skikkelige ingeniører lager vi tegninger før vi lager systemet (programmerer)