729G06 Programmering och logik. OOP: Arv Allmänt: Undantagshantering

Relevanta dokument
729G75: Programmering och algoritmiskt tänkande. Tema 3, föreläsning 2

729G06 Programmering och logik. OOP: Klassdiagram, arv Allmänt: Undantagshantering

729G75: Programmering och algoritmiskt tänkande. Tema 3, föreläsning 2

Programmering och algoritmiskt tänkande. Tema 3, föreläsning 1 Jody Foo

Programmering grundkurs

Programmering grundkurs

TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 3 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Föreläsning 13 Datalogi 1 DA2001

EnKlass. Instans 3 av EnKlass. Instans 2 av EnKlass

Föreläsning 4 Programmeringsteknik DD1310. Felhantering. Syntax. try och except är reserverade ord som används för hantering av exekverings fel.

Programmering grundkurs

Objektorienterad Programmering (TDDC77)

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

Objektorienterad Programmering (TDDC77)

Statistik över heltal

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

Programmering grundkurs

Föreläsning 16 Arv. Jan Lönnberg T Grundkurs i programmering

Sammanfattning. Listor. List-manipulering. Matris. /home/lindahlm/activity-phd/teaching/11dd1310/exercise3/exercise3.py September 13, 20111

Objektorienterad Programmering (TDDC77)

Grundläggande datalogi - Övning 2

729G06 Programmering och logik. Info om pythondelen & introduktion till objektorienterad programmering.

Outline. Objektorienterad Programmering (TDDC77) Laborationsserie del två. Vad händer under HT2. Introduktion HT2 UML.

Skapa hashtabell. En hashtabell kan ses som en lista där programmeraren associerar egna nycklar (index) till varje element som ska läggas i tabellen :

Föreläsning 6 Programmeringsteknik och Matlab DD1312

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Introduktion. Byggstenar TDBA

Outline. Objektorienterad Programmering (TDDC77) Åsidosättning. Signatur. Åsidosättning. Abstrakta klasser. Ahmed Rezine.

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Python. Datatyper. Mer om datatyper. Heltal - 3 Flyttal - 2,456 Listor - [1,2,3,4] Strängar - spam!

Programmering grundkurs

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Arv (Inheritance) Multipelt arv finns i verkligheten. Överskuggning, metodbindning. Läsanvisning: ! Arv! Object, instanceof! Relationer!

Java-syntax (arv) Exempel: public class Crow extends Bird {... } Jämför med Lab 1: public class FirstApp extends Frame {... }

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Föreläsning 8 Programmeringsteknik och Matlab DD1312. Klassmetod. Egen modul

Konstruktion av klasser med klasser

Kodexempel från Programmering 2 Tobias Wrigstad, Ph.D.

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Classes och Interfaces, Objects och References, Initialization

729G06 Föreläsning 1 Objektorienterad programmering

Imperativ programmering. Föreläsning 4

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Klasshierarkier - repetition

Programmering för språkteknologer II, HT2014. Rum

DAT043 - Föreläsning 7

Objektorienterad programmering

Objektorienterad konstruktion

Typhierarkier del 1 Gränssnitt, ärvning mellan gränssnitt, ärvning mellan klasser

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Föreläsning 15: Repetition DVGA02

729G75: Programmering och algoritmiskt tänkande. Tema 1, föreläsning 1 Jody Foo

Föreläsningsmaterial (Arv) Skrivet av Andreas Lund

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser.

TDDI82 - Projekt. Christoffer Holm. Institutionen för datavetenskap (IDA)

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Arv. Objektorienterad och komponentbaserad programmering

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

Selektion och iteration

729G74 IT och programmering, grundkurs. Tema 2, Föreläsning 2 Jody Foo,

Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

729G75: Programmering och algoritmiskt tänkande. Tema 1. Föreläsning 1 Jody Foo

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 7/ Exempel: Implementation av Schackpjäser.

Föreläsning 9: Arv och UML

Abstrakta datatyper Laboration 2 GruDat, DD1344

Föreläsning 2 Programmeringsteknik och C DD1316

Att skriva till och läsa från terminalfönstret

Läsöversikt. Föreläsningar 2-6. Genomförande av laborationer

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Objekt-orienterad utveckling. Objektorienterad analys och design. Objekt-orienterad programutveckling. Objekt-orienterad analys och design: Litteratur

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Övning 6. Ali Tofigh 24 Oktober, 2006

Den klassiska programmodellen. Introduktion till programmering D0009E. Föreläsning 11: Filer och undantag. Filsystem. Interaktiva program.

Laboration 1 - Grunderna för OOP i Java

Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

TDDE10 TDDE11, 725G91/2. Objektorienterad programmering i Java, Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Transkript:

729G06 Programmering och logik OOP: Arv Allmänt: Undantagshantering

Upplägg av Python-delen

Dagens föreläsning Arv: hierarkisk återanvändning av kod Undantag och undantagshantering: ett system för att hantera saker som inte fungerar som de ska.

Klassdiagram ett slags pseudokod för OOP

UML: Unified Modelling Language Klassnamn namn : attributtyp namn : attributtyp = defaultvärde operation() operation() : returdatatyp operation(parameterlista) operation(parameterlista) : returdatatyp

UML, klassdiagram: relationer mellan objekt Objekt kan ha någon form av relation till andra objekt association: allmän relation. kardinalitet (antal) och roll kan anges. "Student har läst 0..* böcker" aggregering: typ av association. "har en", "del av". "Student äger 0..* böcker" komposition: typ av association. "består av". "Student har 1 hjärta" (starkare beroende mellan objekten, tänk "kan inte finnas utan") arv (basklass/härledd klass): ärver attribut/operation från (kommer mer om detta strax) beroende: svag relation. t.ex. någon metod får in en instans som argument. implementation: man kan använda klassdefinitioner som mallar för andra klasser. Denna association kan användas för att visa när en klass implementerar en sådan klassmall (abstrakta klasser)

UML: Relationer Yanpas. Wikimedia Commons En dubbelriktad association kan ritas utan pilar.

NinjaZombieSimulation NinjaZombieSimulation screen : turtle.screen zombie_color : str ninja_color : str ninjas : Swarm zombies : Swarm add_zombie( turtle : turtle.turtle ) add_ninja( turtle : turtle.turtle ) move_zombies_towards_ninjas() move_ninjas_away_from_zombies() scatter_all() run_timestep()

turtle.turtle, Swarm & NinjaZombieSimulation NinjaZombieSimulation Swarm screen : turtle.screen turtle.turtle 0 * 1 friction : float away_towards_multiplier : float bounds : tuple move_speed : float 2 1 zombie_color : str ninja_color : str ninjas : Swarm zombies : Swarm pref_swarm_spacing : float turtle_swarm : list turtle_velocities : list add_zombie( turtle : turtle.turtle ) add_ninja( turtle : turtle.turtle ) move_zombies_towards_ninjas() run_swarm_behaviours() move_ninjas_away_from_zombies() scatter_all() run_timestep()

Arv i Python

Hierarkiska relationer http://www.biologycorner.com/worksheets/taxonomy_interpret.html

Arv / härleda klasser När en klass ärver från en annan, följer alla attribut, dvs instansvariabler och metoder med. Syfte: Abstraktion och kodåtervinning

Exempel object class DataFile(object): str () : str def init (self, filepath=none): self.filepath = filepath data = DataFile("data.txt") print(data) DataFile filepath : str

Arv i Python Alla klasser i Python har en basklass - en klass som de bygger vidare på. Klassen object är den mest grundläggande klassen i Python. Klassen object har metoder som alla andra klasser ärver som t.ex. str () Om klassen DataFile bygger vidare på object, kallar man object för basklassen för klassen DataFile(eng. base class). DataFile är en klass, härledd (eng. derived) från klassen object.

Syntax klass med arv class Base(object): pass class Derived(Base): pass

Arv i Python forts En härledd klass har alla attribut (instansvariabler och metoder) som dess basklass har. En härledd klass kan ges ytterligare attribut. En härledd klass kan överrida attribut från dess basklass.

Arv - exempel class Animal(object): def init (self): self.food = "plants" def run(self): print("i run like the wind.") # Härledda klasser ärver alla attribut från # sin basklass, dvs instansvariabler och # metoder class Horse(Animal): pass >>> h = Horse() >>> h.run() I run like the wind.

Basklass - härledd klass: med init class Base(object): def init (self, arg1): self.arg1 = arg1 class DerivedA(Base): def init (self, arg1, arg2): # Explicit anrop av basklassens init ()-metod Base. init (self, arg1) self.arg2 = arg2 class DerivedB(Base): def init (self, arg1, arg2): # Användning av super för att referera till basklassen # syntax: super(härledd_klass, instans_av_härledd_klass) super(derivedb, self). init (arg1) self.arg2 = arg2

Undantag Exceptions

Exceptions - undantag Exceptions (sv undantag) är ett sätt att hantera fel i kod som kan utlösas (eng throw/raise). Vid fel kan ett undantag utlösas. Programmet avbryter sitt normala flöde för att gå in i "undantagsläge". Finns inget specificerat undantagsläge, kraschar programmet.

Undantag i Python Om man vill hantera undantag i Python lägger man koden som kan utlösa undantag i ett try-block. Undantag hanteras sedan i ett except-block.

Exempel på undantag i Python ZeroDivisionError IOError IndexError KeyError TypeError

Mönster för undandagshantering i Python try: # här lägger man koden som kan utlösa ett undantag except [namn på exception] [as <namn på undantagsinstans>]: # här lägger man koden för vad som ska hända Här ska inte hakparenteserna skrivas ut, utan visar att det som står innanför dem är valfritt. Det som står inom mindre än/större än-tecken måste vara med. I det här fallet bara om 'as' används. Mindre än/större än-tecknena ska inte heller stå med.

Exempel: Fånga undantag letters = ["a", "b", "c", "d", "e", "f"] try: l_index = 0 while True: print(letters[l_index]) l_index += 1 except: print("an exception was raised.")

Exempel: Fånga och instansiera undantag letters = ["a", "b", "c", "d", "e", "f"] try: l_index = 0 while True: print(letters[l_index]) l_index += 1 except Exception as error: print("an exception was raised.") print(error)

Exempel: Fånga specifikt undantag letters = ["a", "b", "c", "d", "e", "f"] try: l_index = 0 while True: print(letters[l_index]) l_index += 1 except IndexError: print("index " + str(l_index) + " is out of bounds.")

Exempel: Fånga och instansiera specifikt undantag letters = ["a", "b", "c", "d", "e", "f"] try: l_index = 0 while True: print(letters[l_index]) l_index += 1 except IndexError as index_error: print("index " + str(l_index) + " is out of bounds.") print(index_error)

Olika sätt att använda undantag För att fånga potentiella fel i koden och åtgärda dem Som ett alternativ till "vanlig" flödeskontroll/if-satser

Kontroll av argument med hjälp av flera undantag def get_dog_desc(dog_dict): try: output_string = "My name is " + dog_dict['name'] + " " output_string += "and I am " + str(dog_dict['age']) + " years old." return output_string except TypeError as type_error: print("argument not a dictionary") print(type_error) except KeyError as key_error: print("wrong keys in dictionary.") print(key_error)

Kontroll av argument med hjälp av flera undantag som ett fall def get_dog_desc(dog_dict): try: output_string = "My name is " + dog_dict['name'] + " " output_string += "and I am " + str(dog_dict['age']) + " years old." return output_string except (TypeError, KeyError) as error: print("not a dictionary or key not present in dictionary.") print(error)

Mera arv

Exempel på OOP med arv Datorspel vi har figurer vissa är fordon vissa är individer vissa kan flyga vissa kan gå vissa har bränsle vissa kan gå sönder Vilka egenskaper och beteenden har olika karaktärer gemensamt? Kan vi gruppera dem?

Några figurer i spelet Super Truck Copter X Bowl Space Cat No Face Mr. Jetpack Sad Face Mini Bob

Klassdiagram klassens namn variabler metoder

Några figurer i spelet Super Truck x_pos Super ypos Truck image fuel forward backward Space Cat x_pos ypos Space Cat image fuel fly_up fly_down forward Sad Face backward Sad Face x_pos y_pos image forward backward No Face Copter X x_pos y_pos image fuel fly_up fly_down forward backward No Face x_pos ypos image forward backward jump Copter X Bowl Mr. Jetpack Mini Bob x_pos ypos image fuel forward backward Mini Bob Bowl x_pos ypos image fly_up fly_down forward backward Mr. Jetpack x_pos y_pos image fuel fly_up fly_down forward backward jump

Två klasser implementerade i Python class SuperTruck(object): def init (self): self.x_pos = 0 self.y_pos = 0 self.image = "supertruck.png" self.fuel = 100 def forward(self): self.x_pos += 10 def backward(self): self.x_pos -= 10 class SadFace(object): def init (self): self.x_pos = 0 self.y_pos = 0 self.image = "sadface.png" def forward(self): self.x_pos += 10 def backward(self): self.x_pos -= 10 LiU EXPANDING REALITY

Några figurer i spelet Super Truck x_pos Super ypos Truck image fuel forward backward Space Cat x_pos ypos Space Cat image fuel fly_up fly_down forward Sad Face backward Sad Face x_pos y_pos image forward backward No Face Copter X x_pos y_pos image fuel fly_up fly_down forward backward No Face x_pos ypos image forward backward jump Copter X Bowl Mr. Jetpack Mini Bob x_pos ypos image fuel forward backward Mini Bob Bowl x_pos ypos image fly_up fly_down forward backward Mr. Jetpack x_pos y_pos image fuel fly_up fly_down forward backward jump

Några figurer i spelet med arv Super Truck fuel MiniBob CopterX fuel fly_up fly_down SuperTruck fuel MrJetpack fuel fly_up fly_down jump Sad Face Space Cat SpaceCat fuel fly_up fly_down BasicCharacter x_pos y_pos image forward backward No Face jump Copter X NoFace Bowl fly_up fly_down SadFace Bowl Mr. Jetpack Mini Bob

Överskuggning (eng overriding) Klassen object definierar en metod str () som berättar hur den ska visas som sträng. En klass som har object som basklass, kan i sin tur definera om str (). Detta kallas för att metoden str () överskuggas.

Överskuggning - exempel class Animal(object): def init (self): self.food = "plants" def run(self): print("i run like the wind.") class Horse(Animal): def run(self): print("clippety-cloppety") Horse.run() överskuggar (eng. overrides) metoden Animal.run()

Implementation m. arv class BasicCharacter(object): def init (self): self.x_pos = 0 self.y_pos = 0 self.image = "default_image.png" def forward(self): self.x_pos += 5 def backward(self): self.x_pos -= 5 class SuperTruck(BasicCharacter): def init (self): super(supertruck, self). init () self.fuel = 100 self.image = "supertruck.png" class SadFace(BasicCharacter): def init (self): super(sadface, self). init () self.image = "sadface.png" SuperTruck. init () sätter en annan bild en basklassen.

Några figurer i spelet med arv Super Truck fuel MiniBob CopterX fuel fly_up fly_down SuperTruck fuel MrJetpack fuel fly_up fly_down jump Sad Face Space Cat SpaceCat fuel fly_up fly_down BasicCharacter x_pos y_pos image forward backward No Face jump Copter X NoFace Bowl fly_up fly_down SadFace Bowl Mr. Jetpack Mini Bob

Några figurer i spelet med mer arv Super Truck BasicCharacter x_pos y_pos image forward backward Copter X Bowl SadFace image: sadface FuelCharacter fuel FlyingJumpingFuelCharacter fuel Space Cat fly_up fly_down jump JumpingCharacter jump FlyingFuelCharacter fuel fly_up fly_down FlyingCharacter fly_up fly_down No Face Mr. Jetpack SuperTruck image: supertruck MiniBob image: minibob Sad Face MrJetpack image: mrjetpack NoFace image: noface SpaceCat image: spacecat Mini Bob CopterX image: copterx Bowl image: bowl

Multipla arv (överkurs) I Python kan klasser ärva attribut från fler än en basklass. Python stödjer multipla arv. Multipla arv är mer komplicerade än enkla arv eftersom konflikter kan uppstå. Oftast räcker det med enkla arv.

Några figurer i spelet med multipelt arv Super Truck MiniBob image: minibob SuperTruck image: supertruck MrJetpack image: mrjetpack FuelCharacter fuel Copter X SpaceCat image: spacecat Bowl Sad NoFace Space Cat JumpingCharacter jump image: noface No Face BasicCharacter x_pos y_pos image forward backward SadFace image: sadface CopterX image: copterx fly_up fly_down Mr. Jetpack FlyingCharacter Bowl image: bowl Mini Bob

Diamantproblemet BasicCharacter x_pos y_pos image forward backward FuelCharacter och FlyingCharacter ärver alla attribut från BasicCharacter FuelCharacter fuel FlyingCharacter fly_up fly_down CopterX image: copterx Vem ärver CopterX sina attribut från? Beror på ordning på arvet och om super() används eller om init () anropas explicit från en viss basklass

Diamantproblemet 2 food run Animal Horse has_wings: False run Bird has_wings: True run Pegasus Vem ärver Pegasus attributet has_wings från? Metoden run()?

Multipla arv class BasicCharacter(object): def init (self): self.x_pos = 0 self.y_pos = 0 self.image = "default_image.png" def forward(self): self.x_pos += 5 def backward(self): self.x_pos -= 5 class FlyingCharacter(BasicCharacter): def init (self): super(flyingcharacter, self). init () def fly_up(self): self.y_pos += 5 def fly_down(self): self.y_pos -= 5 class FuelCharacter(BasicCharacter): def init (self): super(fuelcharacter, self). init () self.fuel = 100 def forward(self): super(fuelcharacter, self).forward() self.fuel -= 1 def backward(self): super(fuelcharacter, self).backward() self.fuel -= 1 class CopterX(FlyingCharacter, FuelCharacter): def init (self): super(copterx, self). init ()