Dagens tema Kapittel 8: Objekter og klasser

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

INF1000: Forelesning 6. Klasser og objekter del 1

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

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

UNIVERSITETET I OSLO

Repetisjon INF 1000 våren 2006

INF1000: Forelesning 7. Konstruktører Static

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

Mål for INF1000. Repetisjon INF 1000 våren Representasjon av data. Programvareutvikling - oversikt

INF1000: Forelesning 7

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Mer objektorientert programmering

INF Uke 10. Ukesoppgaver oktober 2012

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

Introduksjon til objektorientert programmering

Velkommen til. INF våren 2016

IN1010 våren januar. Objektorientering i Java

Eksamensrelevant repetisjonsstoff. Deklarasjoner og variabeltyper. Konstanter

Inf1000 (Uke 8) Mer om objekter og filbehandling

Dagens plan. Inf1000 (Uke 8) Mer om objekter og filbehandling. Hva er en metode. Mer om metoder/klasser/objekter. Tilslutt noen råd til oblig 3

INF1010 våren januar. Objektorientering i Java

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

UNIVERSITETET I OSLO

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

INF 1010, vår 2005 Løsningsforslag uke 11

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

Forelesning inf Java 1

Oblig 4Hybelhus litt mer tips enn i oppgaven

INF1000: noen avsluttende ord

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

Dagens plan. Inf1000 (Uke 8) Mer om objekter og filbehandling. Hva er en metode. Mer om metoder/klasser/objekter. Tilslutt noen råd til oblig 3

Jentetreff INF1000 Debugging i Java

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

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

Kapittel 8: Programutvikling

INF 1000 Prøveeksamen. 23. november Ole Christian og Arne. Oppgave 1 (10 poeng) Er disse programsetningene lovlige i Java? Oppgave 2 (10 poeng)

Forklaring til programmet AbstraktKontoTest.java med tilhørende filer Konto.java, KredittKonto.java, SpareKonto.java

Blokker og metoder INF1000 (Uke 6) Metoder

Programmeringsspråket C

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

Forelesning inf Java 1

INF1000 Metoder. Marit Nybakken 16. februar 2004

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

Oversikt. INF1000 Uke 2. Repetisjon - Program. Repetisjon - Introduksjon

INF våren 2017

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

INF 1000 høsten 2011 Uke september

Løsningsforslag til eksamen i INF1000 våren 2006

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

INF1000 undervisningen INF 1000 høsten 2011 Uke september

IN våren 2019 Onsdag 16. januar

IN våren 2018 Tirsdag 16. januar

UNIVERSITETET I OSLO

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

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

Forelesning inf Java 5

(MVC - Model, View, Control)

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

Forelesning inf Java 5

INF1000 (Uke 11) Programmering

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

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

Eksekveringsrekkefølgen (del 1) Oppgave 1. Eksekveringsrekkefølgen (del 2) Kommentar til oppgave 1. } // class Bolighus

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

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

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

lfæ~~~~:::j~~:~l -.~=:~-t::-d I Alle trykte og håndskrevne EKSAMENSOPPGA VE Side l av 5 Eksamenstid:

INF1010, 15. januar time. Parametriserte klasser (generiske klasser) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

1. Separatorer (skilletegn) i easyio

INF106 Objektorientert programmering

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

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

2 Om statiske variable/konstanter og statiske metoder.

Gjennomgang av eksamen H99

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Innhold. Forord Det første programmet Variabler, tilordninger og uttrykk Innlesing og utskrift...49

Repetisjon. INF gruppe 13

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

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Java 4. Mer om easyio Mer om forgreninger Løkker. 7. september 2004

INF1000: noen avsluttende ord

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

UNIVERSITETET I OSLO

Enkle generiske klasser i Java

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

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

INF1000 : Forelesning 4

Transkript:

Dagens tema Kapittel 8: Objekter og klasser Hva er objekter og klasser? Programmering med objekter Klassedeklarasjoner Generering av objekter Tilgang til elementer i objektene Objekt- og klassevariable Konstruktører Beskyttelse

Litt historie Datamaskinen ble oppfunnet i 1945. Det første programmeringsspråket (FORTRAN) kom i 1958. Midt i 1960-årene var programmene blitt store og det skapte problemer: Hvordan holde orden på mange variable? Tall og tekst er greit, men hvordan lagrer manenbilellerenpersoniprogrammet? Hvordan kan man skrive programmer som ligner mer på hvorledes vi mennesker tenker?

Simula 67 Løsningen kom fra to norske forskere: Kristen Nygaard og Ole-Johan Dahl De oppfant objektorientert programmering som etterhvert er blitt det dominerende programmeringsparadigme (dvs måte å programmere på). (Både C++ og Java bygger direkte på ideene til Dahl og Nygaard.)

Objekter og klasser Et system for trafikkinformasjon for T-banen i Oslo vil trenge informasjon om mange stasjoner: Sognsvann, Blindern,... data om tog: nr 1732 fra Sognsvann kl 11.01 til Mortensrud... Programmet må kunne representere disse objektene.

Alle stasjonene har mye felles; de er av samme klasse. Konklusjon Klasser er modeller/mønstre/oppskrifter for en type dataelementer. De skrives i programkoden. De finnes alltid i ett eksemplar når Java-programmet kjører. Objekter er instanser/enheter av en klasse. De oppstår når programmet kjøres: new Stasjon(); Programmet kan lage så mange objekter det måtte trenge.

Pekere til objekter For å få tilgang til objektene må vi ha pekere: class Stasjon { String navn; int moh; // meter over havet Stasjon maj, nat; maj = new Stasjon(); nat = new Stasjon();

Tilgang til innmaten i objekter Når vi har en peker til et objekt, kan vi få tilgang til innmaten (dvs data og metoder) med et «.»: nat.navn = "Nationaltheateret"; nat.moh = 4; System.out.println(nat.navn + " ligger " + nat.moh + " meter over havet.");

Programmering = design+koding Objektorientert programmering er tydelig todelt: Design er å finne hovedlinjene i programmet: Hvilke klasser trenger vi? Hvordan henger klassene sammen? Hvilke data trenger vi i hver klasse? Hvilke metoder må vi ha i klassene? Koding er å skrive programkode: Koding av angitte klasser og metoder. Valg av algoritmer (dvs teknikker). I dette kurset skal dere lære begge deler.

Eksempel: En bankkonto Design Vi trenger en klasse Konto for å representere en bankkonto. Den må (i vårt eksempel) inneholde opplysninger om kontonummeret, saldoen og eiers navn. Klassedeklarasjonen blir da: class Konto { // Her deklarerer vi tre objektvariable: int kontonummer, saldo; String eier; NB Det er vanlig å skrive klassenavn med stor forbokstav. Programkode På neste ark er et eksempel som bruker klassen Konto. NB Man kan godt ha mange klassedeklarasjoner i samme fil.

import easyio.*; class Konto { // Her deklarerer vi tre objektvariable: int kontonummer, saldo; String eier; class TestKonto { public static void main (String arg[]) { // Her deklarerer vi to pekere vi kaller // a og b. Merk at vi bruker et klassenavn // til å si hvilke typer av objekter // a og b kan peke på. Konto a, b; // Her bruker vi klassedeklarasjonen til // å lage to objekter: a = new Konto(); b = new Konto(); // Bruk objektene: a.kontonummer = 1; a.saldo = 1200; a.eier = "Per"; b.kontonummer = 2; b.saldo = a.saldo + 25; b.eier = "Kari"; Out skjerm = new Out(); skjerm.outln("konto " + a.kontonummer + " eies av " + a.eier + " og saldo er " + a.saldo); skjerm.outln("konto " + b.kontonummer + " eies av " + b.eier + " og saldo er " + b.saldo);

Eksempelprogrammet kan kompileres og kjøres. > javac TestKonto.java > java TestKonto Konto 1 eies av Per og saldo er 1200 Konto 2 eies av Kari og saldo er 1225

Objekt- og klassevariable Variable i en klassedeklarasjon vil forekomme i alle objekter. De er objektvariable. Unntak: Om det står static foran, vil de kun finnes i ett eksemplar, nemlig i klassen. Deerklassevariable. Eksempel: Biler Vi skal se på biler av merket Renault Scenic. Klassen Scenic kan se slik ut: class Scenic { // Her angir vi klassevariable: static int antgir = 5; // Her angir vi objektvariable: String regnummer; String eier;

Her er et program som bruker Scenic-klassen: import easyio.*; class TestScenic { public static void main (String arg[]) { Scenic min = new Scenic(); min.regnummer = "DK45178"; min.eier = "Dag"; Scenic jans = new Scenic(); jans.regnummer = "DJ12321"; jans.eier = "Jan"; Scenic nyest; if (min.regnummer. compareto(jans.regnummer)>0) nyest = min; else nyest = jans; Out skjerm = new Out(); skjerm.outln(nyest.eier + "s bil er nyest."); skjerm.outln("den har " + nyest.antgir + " gir"); skjerm.outln("nummeret er " + nyest.regnummer); NB Man kan godt legge klassedeklarasjoner på hver sin fil.

Kompilering og kjøring går slik: > javac Scenic.java TestScenic.java > java TestScenic Dags bil er nyest. Den har 5 gir Nummeret er DK45178

Konstruktører Det er kronglete å måtte skrive Scenic min = new Scenic(); min.regnummer = "DK45178"; min.eier = "Dag"; Scenic jans = new Scenic(); jans.regnummer = "DJ12321"; jans.eier = "Jan"; Det hadde vært greiere å kunne skrive Scenic2 min = new Scenic2("DK45178","Dag"); Scenic2 jans = new Scenic2("DJ12321","Jan"); Dette er mulig med konstruktører i klassen: Scenic2 (String num, String e) { regnummer = num; eier = e; De ligner på metoder men De har samme navn som klassen. De har ingen returtype.

Her er Senic med en konstruktør: class Scenic2 { // Her angir vi klassevariable: static int antgir = 5; // Her angir vi objektvariable: String regnummer; String eier; // Her er en konstuktør: Scenic2 (String num, String e) { regnummer = num; eier = e;

... og her er testprogrammet: import easyio.*; class TestScenic2 { public static void main (String arg[]) { Scenic2 min = new Scenic2("DK45178","Dag"); Scenic2 jans = new Scenic2("DJ12321","Jan"); Scenic2 nyest; if (min.regnummer. compareto(jans.regnummer)>0) nyest = min; else nyest = jans; Out skjerm = new Out(); skjerm.outln(nyest.eier + "s bil er nyest."); skjerm.outln("den har " + nyest.antgir + " gir"); skjerm.outln("nummeret er " + nyest.regnummer);

Kompilering kjøring er som før: > javac Scenic2.java TestScenic2.java > java TestScenic2 Dags bil er nyest. Den har 5 gir Nummeret er DK45178

Et stort eksempel: 8.11 Her et klassen Konto igjen, noe utvidet: class Konto { private static int nummer = 0; private int kontonummer, saldo; private String eier, adresse; Konto () { saldo = 0; bestemkontonummer(); Konto (String e, String adr, int s) { eier = e; adresse = adr; saldo = s; bestemkontonummer(); void bestemkontonummer () { nummer++; kontonummer = nummer; (Resten står på neste ark.)

void settinn (int innskudd) { saldo = saldo + innskudd; boolean taut (int uttak) { if (uttak > saldo) return false; saldo = saldo - uttak; return true; boolean overførtilannenkonto (Konto tilkonto, int beløp) { if (taut(beløp)) { tilkonto.settinn(beløp); return true; else return false; int gisaldo () { return saldo;

Kommentarer Private variable For å sikre mot programmeringsfeil, kan variable deklareres private. Da er de usynlige utenfor klassen, så kode som min.saldo vil gi denne kompileringsfeilen: LekBank2.java:11: saldo has private access in Konto min.saldo ^ (Noen purister mener at alle variable skal være private og kun skal leses og endres via «get-and-set»-metoder som gisaldo.)

Det finnes også andre beskyttelser: protected Elementer er kun synlig i subklassser (kommer senere). public Elementer er synlig i alle pakker. (Omtales ikke i dette kurset.) ingenting Elementer er synlig i samme pakke.

Et testprogram Dette programmet bruker Konto-klassen: import easyio.*; class LekBank { public static void main (String arg[]) { Konto min = new Konto("Dag","Nordstrand",1000); Konto idas = new Konto("Ida","Ila",2500); Out skjerm = new Out(); min.taut(200); skjerm.outln("min saldo er nå " + min.gisaldo()); if (min.overførtilannenkonto(idas,500)) { skjerm.outln("min saldo er " + min.gisaldo()); skjerm.outln("idas saldo er " + idas.gisaldo()); else skjerm.outln("ingen overføring til Ida"); if (min.overførtilannenkonto(idas,500)) { skjerm.outln("min saldo er " + min.gisaldo()); skjerm.outln("idas saldo er " + idas.gisaldo()); else skjerm.outln("ingen overføring til Ida");

Kjøring av testprogrammet: > javac Konto.java > javac LekBank.java > java LekBank Min saldo er nå 800 Min saldo er 300 Idas saldo er 3000 Ingen overføring til Ida