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

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

Objektorientert programmering i Python

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

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

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

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

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

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

Hvorfor objektorientert programmering?

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

Introduksjon til objektorientert programmering

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

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

Informasjon Prøveeksamen i IN1000 høsten 2018

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

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

Informasjon Eksamen i IN1000 høsten 2017

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

IN Seminaroppgaver til uke 11

INF1000 Eksamen 2014 (modifisert)

Eksamensoppgaver 2014

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

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

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

INF1000 Eksamen 2014 (modifisert)

Øvingsforelesning 1 Python (TDT4110)

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

IN1000 Obligatorisk innlevering 7

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

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

UNIVERSITETET I OSLO

INF1000: noen avsluttende ord

Innhold. INF1000 Høst Klasser og objekter. Uke 7: Mer objektorientert programmering Siri Moe Jensen

Finne ut om en løsning er helt riktig og korrigere ved behov

Finne ut om en løsning er helt riktig og korrigere ved behov

TDT4110 Informasjonsteknologi grunnkurs: Tema: Lister og tupler. - 3rd edition: Kapittel 7. Professor Alf Inge Wang

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

UNIVERSITETET I OSLO

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

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

INF våren 2017

Ch.7: Innføring i klasser

Ch.9: Objektorientert programmering

Seminaroppgaver IN1010, uke 2

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

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

Repetisjon: operatorene ++ og -- Java 5. Nøtt. Oppgave 1 (fra forrige gang) 0 udefinert udefinert. Alternativ 1 Prefiks-operator

2 Om statiske variable/konstanter og statiske metoder.

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

Python: Strenger 3. utgave: Kapittel 8

INF1000: Forelesning 6. Klasser og objekter del 1

Innhold. IN1000 Høst Hva skal evalueres? Fra kurssidene. Uke 12: Pensumgjennomgang og eksamenstips

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

IN våren 2019 Onsdag 16. januar

UNIVERSITETET I OSLO

IN våren 2018 Tirsdag 16. januar

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

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

INF1000: noen avsluttende ord

Øvingsforelesning 7 i Python (TDT4110)

INF Obligatorisk innlevering 7 - Hangman

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

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

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

INF Obligatorisk innlevering 6

Forelesning inf Java 5

Forelesning inf Java 5

UNIVERSITETET I OSLO

Leksjon 6. Objekt. Evt. importsetninger. public class Klasse { Konstruktør. Objektmetoder. Innkapsling (private): set-og get-metoder

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

INF 1000 høsten 2011 Uke september

INF1000 undervisningen INF 1000 høsten 2011 Uke september

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

INF Seminaroppgaver til uke 3

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

INF1010 siste begreper før oblig 2

INF1000 Prøveeksamen Oppgave 7 og 9

INF1010 våren januar. Objektorientering i Java

Sortering med Comparable og Comparator

INF Ekstrainnlevering

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

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

2 Om statiske variable/konstanter og statiske metoder.

Øvingsforelesning 5 Python (TDT4110)

Oppgave 1. INF1000 Uke 13. Oppgave 2. Oppgave 3. Er dette lovlige deklarasjoner (når de foretas inni en metode)? JA NEI

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

TDT4110 IT Grunnkurs Høst 2016

EKSAMENSOPPGAVE / EKSAMENSOPPGÅVE

INF1000: Forelesning 7. Konstruktører Static

UNIVERSITETET I OSLO

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

IN1140, H2018 gruppetime oppgaver Introduksjon til Tekst i Python

Oppgavesettet består av 7 sider, inkludert denne forsiden. Kontroll& at oppgaven er komplett før du begynner å besvare spørsmålene.

Object interaction. Innhold. Abstraksjon Grunnleggende programmering i Java Monica Strand 3. september 2007.

UNIVERSITETET I OSLO

Hash-funksjoner. Introduksjon. Steg 1: Strekkoder. Eksempel. Skrevet av: Martin Strand

Oppgave 1. Oppgave 2. Oppgave 3. Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

Transkript:

Læringsmål uke 7 Introduksjon til objektorientert programmering INF1001 Høst 2016 Uke 7 Forstå (mer av) hva som skjer bak kulissene når vi oppretter og bruker objekter Kunne manipulere referanser og vite hvordan self og None brukes Kunne implementere "magiske metoder" for likhet i egendefinerte klasser Kunne skrive egne programmer med flere klasser og med instansvariable som refererer andre objekter Om tid: Demonstrere et verktøy som visualiserer hva som foregår i minnet ved utførelse av Python-programmer http://www.pythontutor.com/ Siri Moe Jensen INF1001 - Høst 2016 1 Siri Moe Jensen INF1001 - Høst 2016 2 Paradigmet objektorientering INF1001: Introduksjon til objektorientert programmering Python er verktøyet vi bruker Støtter, men krever ikke OO Objektreferanser Objekter lagres ikke direkte i variable: tall1 stud1 _navn = "Jo" _antmott = 0 tall1 = stud1 = Student("Jo") Variabelen stud1 inneholder en minne-adresse dvs den refererer til objektet (der dataene er lagret) Siri Moe Jensen INF1001 - Høst 2016 Siri Moe Jensen INF1001 - Høst 2016 4 1

Objektreferanser Objekter lagres ikke direkte i variable: tall1 stud1 _navn = "Jo" _antmott = 0 tall1 = stud1 = Student("Jo") "Jo" Variabelen stud1 inneholder en minne-adresse dvs den refererer til objektet (der dataene er lagret) Objektreferansen self def areal(self) : return self._lengde*self._bredde self _lengde = _bredde = Inne i klassemetodene brukes referansen self om objektet metodene er kallt på Siri Moe Jensen INF1001 - Høst 2016 Siri Moe Jensen INF1001 - Høst 2016 6 Hva skjer når vi oppretter et objekt? Hva skjer når vi oppretter et objekt? self lengde bredde 2 = Rektangel(,2) rek2 = Rektangel (8,) _lengde = _bredde = 2 = Rektangel(,2) rek2 = Rektangel (8,) _lengde = _bredde = 2 rek2 _lengde = 8 _bredde = Siri Moe Jensen INF1001 - Høst 2016 7 Siri Moe Jensen INF1001 - Høst 2016 8 2

Hva skjer når vi oppretter et objekt? Hva skjer når vi kaller objekt-metoder? stud1 = Student("Petter") Konstruktøren i klassen Student kalles automatisk når et nytt objekt av klassen opprettes Konstruktøren oppretter objektet med referanse self oppretter og initierer instansvariablene i objektet returnerer en referanse til objektet til kallstedet Instansvariable opprettes og initialiseres i hvert nye objekt def areal(self) : return self._lengde*self._bredde def reduser(self,lengde,bredde) : self._lengde -=lengde self._bredde -= bredde rek = Rektangel(,2) print (rek.areal()) rek.reduser(2,1) print (rek.areal()) rek Kjøring M:> rektangel.py 10 M:> _lengde = _bredde = 2 Siri Moe Jensen INF1001 - Høst 2016 9 Siri Moe Jensen INF1001 - Høst 2016 10 Hva skjer når vi kaller objekt-metoder? Hva skjer når vi kaller objekt-metoder def areal(self) : return self._lengde*self._bredde def reduser(self,lengde,bredde) : self._lengde -=lengde self._bredde -= bredde rek = Rektangel(,2) print (rek.areal()) rek.reduser(2,1) print (rek.areal()) rek Kjøring M:> rektangel.py 10 M:> _lengde = _bredde = 1 Objektet er endret!! Trenger ikke ta med noen returverdi for å spare på de nye verdiene, disse ligger i objektet til senere bruk! Returverdier brukes når vi skal bruke verdier eller resultater fra objektet på kallstedet Må se på dokumentasjonen av klassens grensesnitt for å vite hvordan kall på metoder virker eks: navn.upper() eller liste.append("per") Siri Moe Jensen INF1001 - Høst 2016 11 Siri Moe Jensen INF1001 - Høst 2016 12

NB for objektreferanser NB for objektreferanser ved kopiering: = Rektangel (, ) rek2 = # ikke nytt objekt! rek2.reduser(2,1) rek2 Når vi endrer rek2 gjelder endringene også for! _lengde = 1 _bredde= 4 ved kopiering: = Rektangel (, ) rek2 = # ikke nytt objekt! ved sammenligning: print(rek2 is ) print(rek2 == ) rek = Rektangel(, ) print(rek == rek2) rek2 rek _lengde = _bredde= _lengde = _bredde= (akkurat samme verdier).. men peker ikke på samme objekt! Siri Moe Jensen INF1001 - Høst 2016 1 Siri Moe Jensen INF1001 - Høst 2016 14 Sammenligning For innebygde typer, String, integer, List osv: == som før For egendefinerte typer (klasser: To referanser til samme objekt? Bruk is Samme innhold i to objekter? Må sjekke instansvariablene Vi kan lage en egen metode i klassen som gjør dette. Hvis metoden får navnet eq vil operatoren == sammenligne objekter av klassen slik vi implementerer det i metoden eksempel på eq metode def init (self, len, bredde) : self._lengde = len def eq (self, annen) : return (self._lengde == annen._lengde and self._bredde == annen._bredde) r1 = Rektangel(8,6) r2 = r1 print (r1 == r2) r = Rektangel(6,4) print (r == r2) M:> rekt2.py True False M:> Siri Moe Jensen INF1001 - Høst 2016 1 Siri Moe Jensen INF1001 - Høst 2016 16 4

None referansen En variabel som ikke refererer til noe objekt har verdien None None kan være en nyttig initialverdi Kan være nødvendig å sjekke mot None for å unngå å kalle på en metode i et objekt som ikke finnes (gir feil under kjøring) rek = None areal = rek.areal() Familie og navn Skriv en klasse Navn som skal huske og presentere på flere formater navn bestående av fornavn, mellomnavn og etternavn if rek is not None : areal = rek.areal() Siri Moe Jensen INF1001 - Høst 2016 17 Siri Moe Jensen INF1001 - Høst 2016 18 Grensesnitt for Navn Konstruktør med verdier for alle navn Metoder for å hente sortert hente naturlig Klasse Familie Skal holde orden på familiemedlemmer Legg til nytt medlem Sorter alfabetisk Skriv ut alle i familien Siri Moe Jensen INF1001 - Høst 2016 19 Siri Moe Jensen INF1001 - Høst 2016 20

Hvordan kan vi se for oss familien? Klassen Navn (fra livekoding) :Familie medl 0 1 2 Donald Ole Dole Doffen class Navn : def init (self,fornavn,mellom,etter) : self._fornavn = fornavn self._mellom = mellom self._etter = etter def sortert(self) : alfnavn = self._etter + ", "\ + self._fornavn + " " + self._mellom return alfnavn Siri Moe Jensen INF1001 - Høst 2016 21 Siri Moe Jensen INF1001 - Høst 2016 22 Klassen Familie (fra livekoding) Testprogram (fra livekoding) class Familie : def init (self) : self._medl =[] def leggtil(self,ny) : self._medl.append(ny) def skrivut(self) : for nvn in self._medl : print(nvn.sortert()) siri = Navn("Siri", "Moe", "Jensen") n1 = Navn ("a", "b", "c") f1 = Familie() f1.leggtil(siri) f1.leggtil(n1) f1.skrivut() Siri Moe Jensen INF1001 - Høst 2016 2 Siri Moe Jensen INF1001 - Høst 2016 24 6