Klasser og objekter. Tuva Kristine Thoresen 4. november Institutt for Informatikk

Like dokumenter
Klasser og objekter. Tuva Kristine Thoresen 21. oktober Institutt for Informatikk

Klasser og objekter. Tuva Kristine Thoresen 22. oktober Institutt for Informatikk

Læringsmål uke 7. Introduksjon til objektorientert programmering. Paradigmet objektorientering. Objektreferanser. INF1001 Høst 2016 Uke 7

Etter uke 6 skal du. Introduksjon til objektorientert programmering. Hva skjedde ~1967? INF1001. Grunnkurs i objektorientert programmering

Innhold uke 8. Objekter: Bruk og intern organisering. Beskjeder: Oblig 1 6. Beskjeder: Oblig 7 (og 8)

Eksamensoppgaver 2014

Innhold uke 7. Objektorientert programmering i Python: Introduksjon. Lite tilbakeblikk: Programflyt og skop. Lite tilbakeblikk: Funksjoner er uttrykk

Objektorientert programmering i Python

Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Tuva Kristine Thoresen

Hvorfor objektorientert programmering? Objektorientert programmering i Python: Introduksjon. Læringsmål uke 7. Undervisning og pensum IN1000

Læringsmål uke 7. Objektorientert programmering i Python: Introduksjon. Innhold uke 7. Lite tilbakeblikk: Programflyt og skop

INF1000 Eksamen 2014 (modifisert)

Hvorfor objektorientert programmering?

Informasjon Eksamen i IN1000 og IN1001 høsten a) 1 poeng. 1b) 1 poeng. Tid. Oppgavene. Tillatte hjelpemidler. 30. november kl. 14.

Informasjon Prøveeksamen i IN1000 høsten 2018

INF1000 Eksamen 2014 (modifisert)

Introduksjon til objektorientert programmering

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

Seminaroppgaver IN1010, uke 2

Innhold uke 9. Objektorientert programmering i Python. Om ukens pensum. Referanser og objekter Tema: Mer komplekse strukturer

Informasjon Eksamen i IN1000 høsten 2017

Ch.7: Innføring i klasser

Innhold uke 10. Objektorientert programmering i Python. Oblig 7 og 8. IN1000 Seminar! IN1000 Høst 2018 uke 10 Siri Moe Jensen

class Book { String title; } class Dictionary extends Book { int wordcount; } class CartoonAlbum extends Book { int stripcount; }

Ch.9: Objektorientert programmering

Arv. Book book1 = new Book(); book1. title = "Sofies verden" class Book { String title; } class Dictiona ry extends Book {

IN Seminaroppgaver til uke 11

Etter uke 9 skal du. Introduksjon til objektorientert programmering. Innhold. Klasser som abstraksjoner

INF våren 2017

Objektorientert programmering og løsning av ODE er

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

Objektorientert programmering i Python. Resten av semesteret. Innhold uke 9 Mer komplekse strukturer. Referanser og objekter, inkl Mentimeter spørsmål

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

IN våren 2019 Onsdag 16. januar

IN våren 2018 Tirsdag 16. januar

INF1010 våren januar. Objektorientering i Java

UNIVERSITETET I OSLO

Dagens forelesning. Husk prøveeksamen Fredag 15/3-13 kl 12 i R1. Iterator-teknikken. Eksempel med bruk av Iterator og Iterable-grensesnittene

IN1010 våren januar. Objektorientering i Java

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

2 Om statiske variable/konstanter og statiske metoder.

IN1000 Obligatorisk innlevering 7

INF1000: Forelesning 7

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

INF Seminaroppgaver til uke 3

Innhold. Hva skal evalueres? Fra kurssidene. Kapittel 1: Introduction

INF1000: Forelesning 7. Konstruktører Static

Eksamensrelevant repetisjonsstoff. Deklarasjoner og variabeltyper. Konstanter

UNIVERSITETET I OSLO

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

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs

INF1000 Metoder. Marit Nybakken 16. februar 2004

Gjøre noe i hele treet = kalle på samme metode i alle objekten. Java datastruktur Klassestruktur

IN1010 våren 2018 Tirsdag 15. mai. Repetisjon av subklasser og tråder. Stein Gjessing Institutt for informatikk Universitetet i Oslo

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

Programmering i C++ Løsningsforslag Eksamen høsten 2005


Løsningsveiledning for eksamensoppgaven i INF

2 Om statiske variable/konstanter og statiske metoder.

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

INF1000 Prøveeksamen Oppgave 7 og 9

UNIVERSITETET I OSLO

Lenkelister, iteratorer, indre klasser. Repetisjonskurs våren 2018 kristijb

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I

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

Oppgave 3 a. Antagelser i oppgaveteksten. INF1020 Algoritmer og datastrukturer. Oppgave 3. Eksempelgraf

INF1010 våren Grensesnitt

UNIVERSITETET I OSLO

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

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

Enkle generiske klasser i Java

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I)

s 678 * Hvordan designe og programmere objektorientert * Støtte til oppstart på Oblig 4: Jobbe frem eget forslag til datastruktur

INF 1000 høsten 2011 Uke 10: 25. november

Sortering med Comparable og Comparator

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

AlgDat - Øvingsforelesning 1 Introduksjon til Python, lenkede lister og øving 1

Forelesning inf Java 5

Forelesning inf Java 5

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

En implementasjon av binærtre. Dagens tema. Klassestruktur hovedstruktur abstract class BTnode {}

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

Teste om to tekster er like. Inf1000 uke 6 26.sept Alfabetisk ordning. Inneholder en tekst en annen? Litt om tekster Metoder

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

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

INF1001 Prøveksamen Løsningsforslag

INF1000: noen avsluttende ord

klassen Vin må få en ny variabel Vin neste alle personvariable (personpekere) i listeklassen må byttes til Vin

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

Forside. 1 Hva skrives ut?

TDT4100 Objektorientert programmering

INF1010 våren Arv, subklasser og grensesnitt - del 2

Repitisjonskurs. Arv, Subklasser og Grensesnitt

INF1010 våren 2008 Uke 4, 22. januar Arv og subklasser

INF1010 våren Grensesnitt

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

INF1010 våren Arv og subklasser - del 2

Transkript:

Klasser og objekter Tuva Kristine Thoresen (tuvakt@ifi.uio.no) Institutt for Informatikk 4. november 2017

Innhold Klasser og objekter Implementasjon Et eksempel Et større eksempel

Klasser og objekter

Hva er objektorientering? Oppgaver løses av sammarbeidende objekter Et objekt har data og metoder som kan manipulere dataen

Klasser En klasse er en oppskrift på et objekt beskriver objekter med lik oppførsel definerer typen til et objekt Ved å lage egne klasser kan vi lage nye variabeltyper!

Et eksempel class Telefon: def init (self, nummer): def hent_nummer(self): def ring(self, annet_nummer): def legg_paa(self):

Et eksempel class Telefon: def init (self, nummer): def hent_nummer(self): def ring(self, annet_nummer): def legg_paa(self): Grensesnitt: Klassens offentlige metoder

Et eksempel class Telefon: def init (self, nummer): def hent_nummer(self): def ring(self, annet_nummer): def legg_paa(self): Grensesnitt: Klassens offentlige metoder Innkapsling: Prinsippet med å tilby et offentlig grensesnitt, og gjemme implementasjonen

Objekter Et objekt er et instans av en klasse min_telefon = Telefon(98765432) Vi kan kalle på metoder i objektet mitt_nummer = telefon.hent_nummer() min_telefon.ring(12345678) min_telefon.legg_paa()

Implementasjon

Konstruktør og instansvariable Et objekt består av data og metoder Vi kaller dataene for instansvariable En konstruktør definerer og initialiserer disse instansvariablene Konstruktøren kalles i det et objekt opprettes class Telefon: def init (self, nummer): self._nummer = nummer min_telefon = Telefon(98765432)

Metoder Et objekt består av instansvariabler og metoder Grensesnitt: Metodedeklarasjoner Implementasjon: Instansvariabler og innholdet i metodene class Telefon: def init (self, nummer): self._nummer = nummer def hent_nummer(self): return self._nummer >> min_telefon = Telefon(98765432) >> mitt_nummer = min_telefon.hent_nummer() >> print(mitt_nummer) 98765432

Metoder class Telefon: def init (self, nummer): #... self._ringer = False def ring(self, nummer): print("ringer nummer:", nummer) self._ringer = True def legg_paa(self, nummer): self._ringer = False

Referanser min_telefon = Telefon(98765432) min_telefon.ring(12345678) min_telefon.legg_paa() min_telefon er en referanse til Telefon-objektet En referanse holder minnelokasjonen til et objekt Den kan brukes til å kalle objektets metoder

Referanser min_telefon = Telefon(98765432) a = min_telefon b = a Vi kan også ha flere referanser til et objekt Her refererer både min_telefon, a og b til samme objekt Alle tre holder minnelokasjonen til objektet

self class Telefon: def init (self, nummer): self._nummer = nummer min_telefon = Telefon(98765432) self er en referanse som refererer til objektet selv Når konstruktøren kalles settes self lik objektet som opprettes

self class Telefon: def hent_nummer(self): return self._nummer def skriv_ut(self): print("tlf: ", self.hent_nummer()) self må være første parameter i alle metoder self brukes for å få tilgang til objektets instansvariable og for å kalle objektets metoder

Private variabler Hvorfor skriver vi _nummer og ikke bare nummer?

Private variabler Hvorfor skriver vi _nummer og ikke bare nummer? Dette er en kodekonvensjon for å deklarere en privat variabel Variablen kan ikke (burde ikke) aksesseres utenfor klassen

Private variabler Hvorfor skriver vi _nummer og ikke bare nummer? Dette er en kodekonvensjon for å deklarere en privat variabel Variablen kan ikke (burde ikke) aksesseres utenfor klassen Hvordan kan vi bruke den da?

Private variabler Hvorfor skriver vi _nummer og ikke bare nummer? Dette er en kodekonvensjon for å deklarere en privat variabel Variablen kan ikke (burde ikke) aksesseres utenfor klassen Hvordan kan vi bruke den da? Vi kan skrive metoder for å hente/sette variablen: hent_nummer, sett_nummer

Et eksempel

Oppgave: Telefonlager Vi skal lage et system for å lagre telefoner, et Telefonlager. Telefonlageret skal innehold en liste av Telefon-objekter, og ulike metoder for å manipulere telefonene i lista. class Telefonlager: def init (self): self._lager = [] def sett_inn(...): #...

Oppgave: Telefonlager Vi skal lage et system for å lagre telefoner, et Telefonlager. Telefonlageret skal innehold en liste av Telefon-objekter, og ulike metoder for å manipulere telefonene i lista. class Telefonlager: def init (self): self._lager = [] def sett_inn(...): #... Første oppgave: Sett inn telefoner i lageret

Sett inn telefoner class Telefonlager: def init (self): self._lager = [] def sett_inn(self, telefon): self._lager.append(telefon)

Oppgave: Telefonlager class Telefonlager: def init (self): self._lager = [] def skriv_ut(...): #... Andre oppgave: Skriv ut telefonene

Skrive ut telefoner def skriv_ut(self): for telefon in self._lager: print(telefon.hent_nummer())

Oppgave: Telefonlager class Telefonlager: def init (self): self._lager = [] def finn(...): #... Tredje oppgave: Finne og returnere en gitt telefon

Finne en gitt telefon Det er tre spørsmål vi må få svar på: Hva kan unikt identifisere en telefon?

Finne en gitt telefon Det er tre spørsmål vi må få svar på: Hva kan unikt identifisere en telefon? Hvordan vet vi om to telefoner er like?

Finne en gitt telefon Det er tre spørsmål vi må få svar på: Hva kan unikt identifisere en telefon? Hvordan vet vi om to telefoner er like? Hvordan kan vi besøke hvert element i lista?

Finne en gitt telefon Finne telefonen def finn(self, nummer): for telefon in self._lager: if (telefon.hent_nummer() == nummer): return telefon

Finne en gitt telefon Hva gjør vi hvis vi ikke finner telefonen?

Finne en gitt telefon Hva gjør vi hvis vi ikke finner telefonen? return None En referanse som ikke refererer til noe objekt, har verdien None def finn(self, nummer): for telefon in self._lager: if (telefon.hent_nummer() == nummer): return telefon return None

Flere oppgaver: Telefonlager Hvis dere synes dette var vanskelig: Finn telefonen med det minste telefonnummeret Finn telefonen med det største telefonnummeret Hvis dere synes dette var lett: Sorter telefonene i lageret Finn det nest minste og nest største telefonnummeret Finn det miderste telefonnummeret

Et større eksempel

Kontakter Nå skal vi utvide klassen Telefon slik at den kan lagre kontakter. Vi starter med å introdusere klassen Kontakt: class Kontakt: def init (self, navn, nummer): self._navn = navn self._nummer = nummer #...

Kontakter En Telefon skal inneholde en liste av Kontakt-objekter, og ulike metoder for å manipulere kontaktene i lista. class Telefon: def init (self): #... self._kontakter = [] def sett_inn(...): #...

Kontakter En Telefon skal inneholde en liste av Kontakt-objekter, og ulike metoder for å manipulere kontaktene i lista. class Telefon: def init (self): #... self._kontakter = [] def sett_inn(...): #... Oppgave: Sett inn kontakter i telefonen

Sett inn kontakter class Telefon: def init (self): #... self._kontakter = [] def sett_inn(self, kontakt): self._kontakter.append(kontakt)

Systemet vårt

Systemet vårt Oppgave: Hvordan kan vi utvide systemet slik at vi skriver ut kontaktene?

Skrive ut kontakter Gitt følgende kodeskjellett, hvordan kan vi, for hver telefon, skrive ut alle kontaktene? class Telefonlager: def skriv_ut(...): #... class Telefon: def skriv_ut(...): #... class Kontakt: def skriv_ut(...): #...

Skrive ut kontakter class Telefonlager: # old def skriv_ut(self): for telefon in self._lager: print(telefon.hent_nummer()) # new def skriv_ut(self): for telefon in self._lager: telefon.skriv_ut()

Skrive ut kontakter class Telefon: def skriv_ut(self): for kontakt in self._kontakter: kontakt.skriv_ut() class Kontakt: def skriv_ut(self): print(self._navn, self._nummer)

Takk for meg! Noen spørsmål?