Forkurs INF1010 Dag 2 Andreas Færøvig Olsen (andrefol@ifi.uio.no) Tuva Kristine Thoresen (tuvakt@ifi.uio.no) Institutt for Informatikk, 7. januar 2014
Forkurs INF1010 - dag 2 Klasser og pekere Klasser Pekere Metoder Arrayer 2
3
Objektorientert programmering Vi modellerer virkelige objekter. Objekter har to typer egenskaper: Data som beskriver objektet. Handlinger som objektet kan utføre. 5
Spørsmål Hvilke data og handlinger er nyttige for en bil å ha? 6
Klasse Definisjon En klasse er mønsteret (oppskriften) til et objekt. Klassen beskriver en mengde objekter med lik oppførsel. I klassen bruker vi ulike variable for å representere objektets data, og metoder for å representere handlingene objektet kan utføre. 7
Spørsmål Hvilke variabler og metoder er nyttige for en bil-klasse? 8
En klasse for en sirkel I INF1100 møtte dere på følgende klasse: class Circle: def init (self, x0, y0, R): self.x0, self.y0, self.r = x0, y0, R def area(self): return pi*self.r**2 def circumference(self): return 2*pi*self.R 9
En klasse for en sirkel I Java ser denne slik ut: class Circle { private double x0; private double y0; private double R; public Circle(double x0, double y0, double R) { this.x0 = x0; this.y0 = y0; this.r = R; 10
En klasse for en sirkel (fortsettelse) public double area() { return 2*Math.PI*R*R; public double circumference() { return 2*Math.PI*R; 11
En klasse for en sirkel (fortsettelse) public double getr() { return R; public double getx0() { return x0; public double gety0() { return y0; 12
Bruk av klassen Python: c = Circle(2, -1, 5); print A circle with radius %g at (%g, %g) has area %g % (c.r, c.x0, c.y0, c.area()) Java: class Main { public static void main(string[] args) { Circle c = new Circle(2, -1, 5); System.out.printf("A circle with radius %g at (%g, %g) has area %g\n", c.getr(), c.getx0(), c.gety0(), c.area()); 13
Spørsmål Gitt følgende klasse: class Person { private String navn; public Person(String navn) { this.navn = navn; Hvilke av setningene under er lovlige? 1. Person p = new Person(); 2. p.navn = Tuva ; 3. Person p = new Person( Andreas ); 14
Bruk av klasser 15
16
Oppgave Lag klasser for trekanter og firkanter. De skal ha nyttige variabler og metoder som regner ut areal og omkrets. 17
Pekere Circle c = new Circle(0,0,5); c er en peker til Circle-objektet. Pekeren er en minneadresse som forteller oss hvor objektet er lagret. En peker som ikke peker på noe har verdien null. Typisk feil: NullPointerException. 19
Spørsmål NullPointerException får vi når 1. Vi deklarerer en peker uten å gi den verdi: Person p; 2. Vi prøver å aksessere data i en peker som ikke har fått noen verdi: Person p; p.hentnavn(); 3. Vi prøver å konvertere en tom tekst til et tall: int a = Integer.parseInt( ); 20
Metoder En metode definerer et objekts handlinger. En samling programsetninger knyttet til et navn. 21
En metode Python: def f2c(f): return (5.0/9)*(f-32); Java: public double f2c(double f) { return (5.0/9)*(f-32); 22
Bruk av metoden Alle metoder i Java må legges inn i en klasse: class TempConverter { public double f2c(double f) { return (5.0/9)*(f-32); Kall på metoden fra main: class Main { public static void main(string[] args) { TempConverter tempconv = new TempConverter(); double celsius = tempconv.f2c(20); System.out.println(celsius + " C"); 23
Spørsmål Hva er returverdien til følgende metode? [returverdi] sum(){ double a = 2.0; double b = 3.0; return a + b; 1. int 2. double 3. void 24
Oppgave Finn feilene i følgende metode: public void sum(int[] array) { int sum = 0; for(int i = 0; i < array.length: i++) { sum += array{i; return sum; 25
Fasit public int sum(int[] array) { int sum = 0; for(int i = 0; i < array.length; i++) { sum += array[i]; return sum; 26
Oppgave Skriv en metode metode som finner det største av tre tall: a, b og c og returnerer verdien av det. Du kan ikke anta at tallene har ulike verdier. public int max(int a, int b, int c) { 27
28
Hva er en array? En variabel som kan inneholde flere verdier av samme type. En liste av verdier. 29
Deklarasjon av array Python: from numpy import * a = array([1, 2, 3, 4, 5, 6]) Java: int[] a = {1, 2, 3, 4, 5, 6; eller: int[] a = new int[6]; 30
Indeksering 1. Indeksering som Python: Fra 0 til lengden-1. 2. Tilordning: a[1] = 3; 31
Objekter i array Arrayene våre kan inneholde både primitive typer og objekter. Fisk[] fisker = new Fisk[10]; 32
Objekter i array Fisk[] fisker = new Fisk[10]; fisker[2] = new Fisk(); 33
Iterasjon over array Vanlig for-løkke for (int i = 0; i < 6; i++) { System.out.println(a[i]); Python-aktig: for each for (int i: a) { System.out.println(i); for (Fisk f: fisker) { System.out.println(f); 34
Spørsmål Hvilke av disse programsetningene er lovlige i Java? 1. int[] x = new int[]; 2. int[] x = new int[0]; 3. int i = new int[7]; 4. double[] x = new double[33]; 35
Spørsmål Hvor mange heltall settes det av plass til med følgende programsetning? int[] tall = new int[100]; 1. 99 2. 100 3. 101 36
Oppgave Ta utgangspunkt i arrayen: int[] tall = {3, 7, 2, 32, 12, 5, 8, 4, 21, 99, 1; Skriv kode som finner: Den største verdien i arrayen. Gjennomsnittet av verdiene i arrayen. 37
2D array 38
Spørsmål Gitt følgende matrise (2D-array) i Java: A = Hva er verdien av A[2][1]? 1. 8 2. 4 1 2 3 4 5 6 7 8 9 3. Får feilmelding, indeksene finnes ikke 39
40
Mer lesestoff Java tutorials: Klasser og objekter Arrayer Marit Nybakkens notater: Objekter Konstruktører Metoder 41