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 obligrettere
Undervisningstilbud 2 timer forelesninger pr. uke 2 timer plenumsøvelser pr. uke 2 timer seminarundervisning pr. uke Labundervisning en-til-en, tilbakemelding 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 opprette labgrupper etter behov
Variabler primitive typer arrayer pekervariable Alle variabler har en type et navn et innhold
Metoder Må enten ha en returtype eller være void 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 tillegg til klasser og konstruktører. Vi skiller mellom klassevariabler og klassemetoder objektvariabler og objektmetoder
Et javaprogram som kjøres oppretter objekter og endrer på innholdet i klasse- og objektvariabler ved å utføre konstruktører og metoder. Variabler endrer innhold med tilordninger.
class Hund { private String navn ; private int vekt = 5000; private Hund mor = null; Hund ( String n ) { navn = n; } Hund ( String n, int v ) { vekt = v; public void settVekt ( int v ) {
class Eks01 { public static 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 static void main ( String[] a ) { int a=0, b=7; Heltall refa, refb; refa = new Heltall(0); refb = new Heltall(7); a = b; refa = refb; b = 8; refb.tall = 8; System.out.println("a=" + a + ", b=" + b + ", refa.tall=" + refa.tall + ", refb.tall=" + refb.tall);
public static void main (String[] argumenter) { int a=0, b=7; Heltall refa, refb; refa = new Heltall(0); refb = new Heltall(7); a = b; refa = refb; b = 8; refb.tall = 8; System.out.println("a=" + a + ", b=" + b + ", refa.tall=" + refa.tall + ", refb.tall=" + refb.tall); }
public static void main (String[] argumenter) { int a=0, b=7; Heltall refa, refb; refa = new Heltall(0); refb = new Heltall(7); a = b; refa = refb; b = 8; refb.tall = 8; System.out.println("a=" + a + ", b=" + b + ", refa.tall=" + refa.tall + ", refb.tall=" + refb.tall); }
Tilordninger primitive variabler <venstreside> = <høyreside> Hva gjør javamaskinen når programmet utføres? 0. Hvis venstresiden deklarerer en variabel: Opprett denne 1. «Regn ut» høyresiden 2. Sett resultatet inn i variabelen på venstresiden
Tilordninger primitive 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 til hundeeksemplet class Hund { …… } class Eks01 { static int antallHunder = 0; public static void main (String[] argumenter) { Hund trofast = new Hund("Trofast"); ++antallHunder; Hund pluto = new Hund("Pluto", 6750); }
class Eks01 { static int antallHunder = 0; public static void main (String[] argumenter) { Hund trofast = new Hund("Trofast"); ++antallHunder; Hund pluto = new Hund("Pluto", 6750); } Klassedatastruktur:
class Hundebur { private Hund hundIBur = null; public void settInnHund( 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 settInnHund( Hund h ) { } public Hund taUtHund() { return somSlipperUt; }
class Eks01 { static int antallHunder = 0; public static void main (String[] argumenter) { Hund pluto = new Hund("Pluto", 6750); ++antallHunder; Hundebur hundeburet = new Hundebur(); hundeburet.settInnHund(new Hund("Cara")); hundeburet.settInnHund(pluto); Hundebur burNr2 = new Hundebur(); burNr2.settInnHund(pluto); }
class Katt { private String navn ; private int vekt = 3750; private Katt mor = null; Katt ( String n, Katt mor ) { navn = n; this.mor = mor; } Katt ( String n, int v ) { vekt = v; public void settVekt ( int v ) {
Kan katter settes i hundebur? Utvider main-metoden: ….. Hundebur burNr2 = new Hundebur(); burNr2.settInnHund(pluto); Katt pus = new Katt("Pus", 5600 ); Katt tom = new Katt("Tom", pus ); burNr2.settInnHund(tom); Resultat fra kompilering: Eks04.java:75: settInnHund(Hund) in Hundebur cannot be applied to (Katt) ^
Kan vi lage bur som både hunder og katter kan bo i ? class Bur { private ???? dyrIBur = null; public void settInn( ???? 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 settInn( 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 settInn( 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 static void main ( String[] argumenter) { Bur<Hund> hundeburet = new Bur<Hund>(); hundeburet.settInn( new Hund("Cara") ); Bur<Katt> katteburet = new Bur<Katt>(); Katt pus = new Katt( "Pus", 5600 ); Katt tom = new Katt( "Tom", pus ); katteburet.settInn(tom); Hund h = hundeburet.taUt(); }
I dette buret kan vi sette inn objekter av alle klasser: Bur<Bil> garasje = new Bur<Bil>(); Bur<Person> hybel= new Bur<Person>(); Ja, vi kan også lage et bur med et kattebur i: Bur<Bur<Katt>> bur = new Bur<Bur<Katt>>();
Men har vi ikke sett dette før ? ArrayList<Katt> katteliste = new ArrayList<Katt>(); public class ArrayList<E> { …. Predefinert klasse som vi har brukt …}
HashMap<String, Hund> hunderegister = new HashMap<String, Hund> ()