INF1010 - Objektorientert programmering Datastrukturer i Java Klasser med parametre
INF1010 våren 2015 Stein Gjessing (steing) Stein Michael Storleer (michael) 36 hjelpelærere Andreas Færøvig Olsen (andrefol) Henrik Hillestad Løvold (henrihlo) 12 gruppelærere 22 obligrenere
UndervisningsPlbud 2 Pmer forelesninger pr. uke 2 Pmer plenumsøvelser pr. uke 2 Pmer seminarundervisning pr. uke Labundervisning en- Pl- en, Plbakemelding og godkjenning av obliger ca. 8 obliger 2 poeng pr. uke Første oblig frist onsdag 4. februar kl. 10.00 Andre oblig frist 11. februar kl. 10.00 Vi kan opprene labgrupper ener behov
Innleveringsoppgaver Oblig 1 frist 4. februar kl 10.00 INF1010- rytmen: to kl 10 ons kl 16. Poengsystem Ny ordning for re[ng og Plbakemelding Les UiO- epost Ønsker for renepder meldes inn elektronisk Varierende størrelse, 2 poeng pr. Uke.
Variabler primipve typer arrayer pekervariable Alle variabler har 1. en type 2. et navn 3. et innhold
Metoder Må enten ha en returtype returtypen kan være alle typer som en variabel kan ha, også array. eller være void har 0, 1 eller flere parametre
Metoder og variable er byggesteinene våre i Pllegg Pl klasser og konstruktører. Vi skiller mellom klassevariabler og klassemetoder objektvariabler og objektmetoder
Et javaprogram som kjøres opprener objekter og endrer på innholdet i klasse- og objektvariabler ved å u`øre konstruktører og metoder. Variabler endrer innhold med 7lordninger.
class Hund { private String navn ; private int vekt = 5000; private Hund mor = null; Hund ( String n ) { navn = n; Hund ( String n, int v ) { navn = n; vekt = v; public void senvekt ( int v ) { vekt = v;
class Eks01 { public stapc void main (String[] argumenter) { Hund trofast = new Hund("Trofast"); Hund pluto = new Hund("Pluto", 6750);
class Heltall { int tall; Heltall(int t) {tall = t; class Eks02 { public stapc void main ( String[] a ) { int a=0, b=7; Heltall refa, rek; refa = new Heltall(0); rek = new Heltall(7); a = b; refa = rek; b = 8; rek.tall = 8; System.out.println("a=" + a + ", b=" + b + ", refa.tall=" + refa.tall + ", rek.tall=" + rek.tall);
public stapc void main (String[] argumenter) { int a=0, b=7; Heltall refa, rek; refa = new Heltall(0); rek = new Heltall(7); a = b; refa = re=; b = 8; rek.tall = 8; System.out.println("a=" + a + ", b=" + b + ", refa.tall=" + refa.tall + ", rek.tall=" + rek.tall);
Tilordninger primipve variabler <venstreside> = <høyreside> Hva gjør javamaskinen når programmet u`øres? 0. Hvis venstresiden deklarerer en variabel: Opprett denne 1. «Regn ut» høyresiden 2. Sett resultatet inn i variabelen på venstresiden
Tilordninger primipve variabler <venstreside> = <høyreside> int tall = 2 * 5 + 3; tall = 47 % 7; double rotenav2 = java.lang.math.sqrt(2.0); 0. Hvis venstresiden deklarerer en variabel: Opprett denne 1. «Regn ut» høyresiden 2. Sett resultatet inn i variabelen på venstresiden
Tilordninger pekervariabler <venstreside> = <høyreside> Hund lassie = new Hund( Lassie ); Hund minhund = lassie; minhund = finnhundmednavn( Lassie ); minhund = null; 0. Hvis venstresiden deklarerer en variabel: Opprett denne 1. «Regn ut» høyresiden 2. Sett resultatet inn i variabelen på venstresiden
Tilbake Pl hundeeksemplet class Hund { class Eks01 { stapc int antallhunder = 0; public stapc void main (String[] argumenter) { Hund trofast = new Hund("Trofast"); ++antallhunder; Hund pluto = new Hund("Pluto", 6750); ++antallhunder;
class Eks01 { stapc int antallhunder = 0; public stapc void main (String[] argumenter) { Hund trofast = new Hund("Trofast"); ++antallhunder; Hund pluto = new Hund("Pluto", 6750); ++antallhunder; Klassedatastruktur:
class Hundebur { private Hund hundibur = null; public void seninnhund( Hund h ) { if (hundibur == null) hundibur = h; else System.out.println("Hundeburet er fullt!"); public Hund tauthund() { Hund somslipperut = null; if (hundibur == null) System.out.println("Hundeburet er tomt!"); else { somslipperut = hundibur; hundibur = null; return somslipperut;
class Hundebur { private Hund hundibur = null; public void seninnhund( Hund h ) { public Hund tauthund() { return somslipperut;
class Eks01 { stapc int antallhunder = 0; public stapc void main (String[] argumenter) { Hund pluto = new Hund("Pluto", 6750); ++antallhunder; Hundebur hundeburet = new Hundebur(); hundeburet.seninnhund(new Hund("Cara")); hundeburet.seninnhund(pluto); Hundebur burnr2 = new Hundebur(); burnr2.seninnhund(pluto);
class KaN { private String navn ; private int vekt = 3750; private KaN mor = null; KaN ( String n, KaN mor ) navn = n; this.mor = mor; { KaN ( String n, int v ) { navn = n; vekt = v; public void senvekt ( int v ) { vekt = v;
Kan kaner senes i hundebur? Utvider main- metoden:.. Hundebur burnr2 = new Hundebur(); burnr2.seninnhund(pluto); KaN pus = new KaN("Pus", 5600 ); KaN tom = new KaN("Tom", pus ); burnr2.seainnhund(tom); Resultat fra kompilering: Eks04.java:75: seninnhund(hund) in Hundebur cannot be applied to (KaN) burnr2.seninnhund(tom); ^
Kan vi lage bur som både hunder og kaner kan bo i? class Bur { private???? dyribur = null; public void seninn(???? h ) { if (dyribur == null) dyribur = h; else System.out.println("Buret er fullt!"); public???? taut() {???? somslipperut = null; if (dyribur == null) System.out.println("Buret er tomt!"); else { somslipperut = dyribur; dyribur = null; return somslipperut;
class Bur<Dyr> { private Dyr dyribur = null; public void seninn( Dyr h ) { if (dyribur == null) dyribur = h; else System.out.println("Buret er fullt!"); public Dyr taut() { Dyr somslipperut = null; if (dyribur == null) System.out.println("Buret er tomt!"); else { somslipperut = dyribur; dyribur = null; return somslipperut;
class Bur<T> { private T dyribur = null; public void seninn( T h ) { if (dyribur == null) dyribur = h; else System.out.println("Buret er fullt!"); public T taut() { T somslipperut = null; if (dyribur == null) System.out.println("Buret er tomt!"); else { somslipperut = dyribur; dyribur = null; return somslipperut;
public stapc void main ( String[] argumenter) { Bur<Hund> hundeburet = new Bur<Hund>(); hundeburet.seninn( new Hund("Cara") ); Bur<KaN> kaneburet = new Bur<KaN>(); KaN pus = new KaN( "Pus", 5600 ); KaN tom = new KaN( "Tom", pus ); kaneburet.seninn(tom); Hund h = hundeburet.taut();
I de<e buret kan vi se<e inn objekter av alle klasser: Bur<Bil> garasje = new Bur<Bil>(); Bur<Person> hybel= new Bur<Person>(); Slike beholdere er prak?ske når de kan romme mer enn e< objekt.
Men har vi ikke sen dene før? ArrayList<KaN> kaneliste = new ArrayList<KaN>(); public class ArrayList<E> {. Predefinert klasse som vi har brukt
Men har vi ikke sen dene før? HashMap<String, Hund> hunderegister = new HashMap<String, Hund> (); Neste gang skal vi lage en beholder for mange objekter (av samme type). class LenkeListe<T> jf. med java.upl.linkedlist<e>