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

Like dokumenter
Klasser og objekter. Tuva Kristine Thoresen 4. november 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

Eksamensoppgaver 2014

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

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

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

INF1000 Eksamen 2014 (modifisert)

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

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

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

Objektorientert programmering i Python

Hvorfor objektorientert programmering?

INF1000 Eksamen 2014 (modifisert)

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

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

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

Seminaroppgaver IN1010, uke 2

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

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

IN Seminaroppgaver til uke 11

Introduksjon til objektorientert programmering

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

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

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

UNIVERSITETET I OSLO

IN1010 våren januar. Objektorientering i Java

Ch.9: Objektorientert programmering

INF1010 våren januar. Objektorientering i Java

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

Informasjon Eksamen i IN1000 høsten 2017


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

Ch.7: Innføring i klasser

UNIVERSITETET I OSLO

INF våren 2017

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

Objektorientert programmering og løsning av ODE er

IN1000 Obligatorisk innlevering 7

INF120: Oblig 3. Yngve Mardal Moe

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

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

IN våren 2019 Onsdag 16. januar

IN våren 2018 Tirsdag 16. januar

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

EKSAMENSOPPGAVE. : INF-1400 Objektorientert programmering. Oppgavesettet er på 5 sider inklusiv forside

Faglærerne prøver å besøker eksamenslokalet mellom klokka 15 og 16 for å oppklare eventuelle uklarheter og feil i oppgaveteksten.

Forside. 1 Hva skrives ut?

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Unntak (exceptions) (Kap 6) Dictionaries (Kap. 9) Terje Rydland - IDI/NTNU

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

Tillatte hjelpemidler: alle skrevne og trykte. Antall sider: 2 (+ 1 side vedlegg, bakerst). Oppgave 1 [25%]

INF Løsning på seminaropppgaver til uke 8

Innhold. INF1000 Høst Unified Modeling Language (UML) Unified Modeling Language (UML)

Løsningsveiledning for eksamensoppgaven i INF

Sortering med Comparable og Comparator

UNIVERSITETET I OSLO

Obligatorisk oppgave 4: Lege/Resept

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

Øvingsforelesning 7 i Python (TDT4110)

INF Seminaroppgaver til uke 3

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

UNIVERSITETET I OSLO

INF1010 våren Grensesnitt

INF Obligatorisk innlevering 7 - Hangman

Prøveeksamen IN1000. IN Prøveeksamen. Dato november 2017 Tid 12:30-12:00 Alle trykte og skrevne hjelpemidler er tillatt.

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

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I)

MENGDER (SETS) Læringsmål og pensum. Kapittel 9.2

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

Obligatorisk oppgave 1 INF1020 h2005

IN1010 V19, Obligatorisk oppgave 2

TDT4110 Informasjonsteknologi grunnkurs: Tema: Dictionaries og mengder (sets) - Kapittel 9. Professor Alf Inge Wang

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

TDT4120 Øvingsforelesning 1 Introduksjon til Python

Obligatorisk oppgave 4 i INF1010, våren 2014: "Leger og resepter" Versjon 1.1

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) Løsningsforslag

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

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Dictionaries og sets (mengder) Utgave 3: Kap. 9. Terje Rydland - IDI/NTNU

Algoritmer og Datastrukturer

Studieaktiviteter i INF1010

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

Dictionary er et objekt som lagrer en samling av data. Minner litt om lister men har klare forskjeller:

Dagens forelesning. INF1010 Datastrukturer Lister og køer Pekerkjedelister Øvelser. Innhold i dette lysarksettet

INF1010 våren Grensesnitt

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

INF1000 Prøveeksamen Oppgave 7 og 9

Kapittel 5: Objektkommunikasjon

2 Om statiske variable/konstanter og statiske metoder.

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

UNIVERSITETET I OSLO

Kondisjonstest. Algoritmer og datastrukturer. Python-oppgaver - LF. Onsdag 6. oktober Her er noen repetisjonsoppgaver i Python.

Gjennomgang av eksamen H99

EKSAMENSOPPGAVE. Vil det bli gått oppklaringsrunde i eksamenslokalet? Svar: NEI

INF1010 Binære søketrær ++

Eksamensrelevant repetisjonsstoff. Deklarasjoner og variabeltyper. Konstanter

Øvingsforelesning 2 - TDT4120. Grafer og hashing. Benjamin Bjørnseth

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

UNIVERSITETET I OSLO

OPPGAVE 5b og 8b Java Kode

Transkript:

Klasser og objekter Tuva Kristine Thoresen (tuvakt@ifi.uio.no) Institutt for Informatikk 21. oktober 2016

Innhold Klasser og objekter Implementasjon Et eksempel Dictionary

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

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

Dictionary

Dictionary (Ordbok) En ordbok er en container som lagrer nøkler og verdier. Hver nøkkel i ordboka har en tilhørende verdi ordliste = {"hei": 8, "katt": 10, "hund": 2} Hver nøkkel må være unik Vi henter ut og setter inn verdier basert på nøklen (nøkkel, verdi)-parene er ikke lagret i en bestemt rekkefølge Det er veldig enkelt (og raskt) å finne et element!

Dictionary (Ordbok) Operasjoner på en ordbok: ordliste = {"hei": 8, "katt": 10, "hund": 2} ordliste["hei"] # gir 8 ordliste["ku"] = 20 # setter inn "ku": 20 if "ku" in ordliste: # finnes nøklen "ku" i lista? for nokler in ordliste: # iterere over nøklene

Oppgave: Telefonlager Nå skal vi skrive om telefonlageret, ved hjelp av en ordbok (dictionary). Skriv om metodene: sett_inn skriv_ut finn Hvordan blir dette? Blir noe enklere?

Sett inn telefoner class Telefonlager: def init (self): self._lager = {} def sett_inn(self, telefon): nokkel = telefon.hent_nummer() self._lager[nokkel] = telefon

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

Finne en gitt telefon def finn(self, nummer): if nummer in self._lager: return self._lager[nummer] return None

Takk for meg! Noen spørsmål?