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

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

729G06 Programmering och logik. OOP: 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

EnKlass. Instans 3 av EnKlass. Instans 2 av EnKlass

Föreläsning 13 Datalogi 1 DA2001

Programmering grundkurs

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

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

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

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

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)

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

Programmering grundkurs

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

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 :

Klasshierarkier - repetition

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

Föreläsning 6 Programmeringsteknik och Matlab DD1312

Imperativ programmering. Föreläsning 4

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

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

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

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

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

Grundläggande datalogi - Övning 2

Hos vad? och bör därför vara instanseller klassvariabel i vilken klass?

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.

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

Introduktion. Byggstenar TDBA

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

729G04 Programmering och diskret matematik. Python 3: Loopar

Objektorienterad Programmering (TDDC77)

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

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Laboration 1 - Grunderna för OOP i Java

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

Selektion och iteration

Konstruktion av klasser med klasser

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

Objektorienterad programmering Föreläsning 4

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Programmering grundkurs

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

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

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

Objektorienterad Programmering (TDDC77)

Föreläsning 13 Innehåll

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

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT / 33

Arv. Objektorienterad och komponentbaserad programmering

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

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

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

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?

Statistik över heltal

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 DD1310. Programmering. Programspråk

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

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

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

TDDC76 Programmering och datastrukturer

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

TDP005. Föreläsning 3 - UML. Filip Strömbäck

TDDC76 - Programmering och Datastrukturer

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

Grundläggande programmering med C# 7,5 högskolepoäng

729G04 Programmering och diskret matematik. Föreläsning 7

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

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Objektorienterad programmering Föreläsning 5

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

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

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

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

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

Repetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python

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

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

Ordlistor, filhantering och ut på webben. Linda Mannila

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

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

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

Abstrakta Klasser 2. Kodning är bara en liten del i programvaruutvecklingen 6% 1% 6% Abstrakta Klasser - deklaration. Programutveckling sker i faser

729G06 Föreläsning 1 Objektorienterad programmering

Språket Python - Del 1 Grundkurs i programmering med Python

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

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Objektorienterad Systemutveckling 1 (7,5 hp)

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

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

Transkript:

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

Upplägg av Python-delen

Dagens föreläsning En sista repetition av begreppen klass, instans, instansvariabel, instansmetod, konstruktor, self Klassdiagram: Vad? Varför? Hur? Arv: hierarkisk återanvändning av kod Undantag och undantagshantering: ett system för att hantera saker som inte fungerar som de ska.

Begrepp dess tillämpningar som ni måste förstå och kunna använda Om ni inte kan dem, lär er dem genast! Klass och instans: skillnad och relation mellan begreppen instansvariabler, instansmetoder, self Skapa en instans: Vad är en konstruktor? Hur ser anrop till en konstruktor ut? Vad gör metoden init ()? Syntax: Punkt-notation för moduler, klasser, instanser import av moduler

En klass är en mall som används för att skapa ett objekt objekt kallas också för instanser

En klass är definierar de instansvariabler och metoder som dess instanser kommer ha.

Instansvariabler och metoder kallas ibland gemensamt för en klass attribut

Instansiering Pokemon name : str my_turtle : turtle.turtle my_spit : turtle.turtle def move_to(self, x, y): self.my_turtle.setpos(x, y) draw_square(self): for i in range(4): p1 = Pokemon("Bulbasaur") name: "Bulbasaur" my_turtle : <turtle.turtle at 0x105f1a3c8> my_spit : <turtle.turtle at 0x105fb9160> move_to(self, x, y) draw_square(self) spit(self) p1 : Pokemon def spit(self): self.my_spit.fd(100) self.my_spit.bk(100)

Metodanrop Pokemon name : str my_turtle : turtle.turtle my_spit : turtle.turtle def move_to(self, x, y): self.my_turtle.setpos(x, y) draw_square(self): for i in range(4): p1 = Pokemon("Bulbasaur") name: "Bulbasaur" my_turtle : <turtle.turtle at 0x105f1a3c8> my_spit : <turtle.turtle at 0x105fb9160> move_to(self, x, y) draw_square(self) spit(self) p1 : Pokemon def spit(self): self.my_spit.fd(100) self.my_spit.bk(100) p1.move_to(100, 400) I Python är p1.move_to(100, 400) samma sak som Pokemon.move_to(p1, 100, 400) OBS! Detta är inte fallet för alla objektorienterade språk

Grammatik och lexikon för importer import_stmt ::= "import" module ["as" name] ( "," module ["as" name] )* "from" relative_module "import" identifier ["as" name] ( "," identifier ["as" name] )* "from" relative_module "import" "(" identifier ["as" name] ( "," identifier ["as" name] )* [","] ")" "from" module "import" "*" module ::= (identifier ".")* identifier relative_module ::= "."* module "."+ name ::= identifier https://docs.python.org/3.4/reference/simple_stmts.html#import Ovanstående notation är BNF (Backus Normal Form) som ofta används inom datavetenskap för att beskriva kontextfria grammatiker.

Grammatik och lexikon för importer import_stmt ::= "import" module ["as" name] ( "," module ["as" name] )* "from" relative_module "import" identifier ["as" name] ( "," identifier ["as" name] )* "from" relative_module "import" "(" identifier ["as" name] ( "," identifier ["as" name] )* [","] ")" "from" module "import" "*" Det finns 4 varianter - import random, turtle as t

Grammatik och lexikon för importer import_stmt ::= "import" module ["as" name] ( "," module ["as" name] )* "from" relative_module "import" identifier ["as" name] ( "," identifier ["as" name] )* "from" relative_module "import" "(" identifier ["as" name] ( "," identifier ["as" name] )* [","] ")" "from" module "import" "*" Det finns 4 varianter -import random, turtle as t - from random import randint, choice as random_choice

Grammatik och lexikon för importer import_stmt ::= "import" module ["as" name] ( "," module ["as" name] )* "from" relative_module "import" identifier ["as" name] ( "," identifier ["as" name] )* "from" relative_module "import" "(" identifier ["as" name] ( "," identifier ["as" name] )* [","] ")" "from" module "import" "*" Det finns 4 varianter -import random, turtle as t -from random import randint, choice as random_choice - from random import (randint, choice as random_choice)

Grammatik och lexikon för importer import_stmt ::= "import" module ["as" name] ( "," module ["as" name] )* "from" relative_module "import" identifier ["as" name] ( "," identifier ["as" name] )* "from" relative_module "import" "(" identifier ["as" name] ( "," identifier ["as" name] )* [","] ")" "from" module "import" "*" Det finns 4 varianter -import random, turtle as t -from random import randint, choice as random_choice -from random import (randint, choice as random_choice) - from random import *

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()

Swarm Swarm friction : float away_towards_multiplier : float bounds : tuple move_speed : float pref_swarm_spacing : float turtle_swarm : list turtle_velocities : list run_swarm_behaviours() add_turtle( turtle : turtle.turtle ) keep_swarm_distance() move_away_or_towards_positions( positions : list, towards : bool = True ) move_away_or_towards_position( position : turtle.vec2d, towards : bool = True ) calculate_unit_vec( vector : turtle.vec2d ) : turtle.vec2d calc_velocity( a_turtle : turtle.turtle, another_turtle : turtle.turtle ) : turtle.vect2d accelarate_turtle( turtle_index : int, accelaration : float ) update_velocities() wrap_turtles() wrap_turtle( a_turtle : turtle.turtle ) scatter_turtles() get_swarm_positions() : list get_swarm_center() : turtle.vec2d

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)