729G75: Programmering och algoritmiskt tänkande Tema 3, föreläsning 2
Översikt Vanliga mönster när man designar en klass Klass-diagram Exempel Arv i Python
Egna klasser använd som egna datatyper, men även för att strukturera program
Egna klasser som datatyper Alla värden i Python är objekt, dvs instanser av någon klass. Klass == datatyp
Egna klasser för att bygga upp ett program Hur ser ett objektorienterat program ut? Vi tar skissar på ett exempel: program som laddar in en csv-fil visar data (t.ex. i terminalen eller i ett GUI-fönster) För att lättare kunna visualisera objektorienterad struktur använder vi klassdiagram
En klass klassens namn egenskaper beteenden
Klassdiagram ett slags pseudokod för OOP
Klassdiagram i UML Unified Modelling Language Klassnamn namn : attributtyp namn : attributtyp = defaultvärde operation() operation() : returdatatyp operation(parameterlista) operation(parameterlista) : returdatatyp
Exempel DataRow trial : str image_file : str time : int correct_answer : str subjects_answer : str degrees_rotated : int get_error_type() : int
UML, klassdiagram: relationer mellan objekt Objekt kan ha någon form av relation till andra objekt association: allmän relation. kardinalitet (antal) och roll (i praktiken variabelnamn) "lästa_böcker 0..*"
UML: Relationer Yanpas. Wikimedia Commons En dubbelriktad association kan ritas utan pilar.
Exempel LayoutTester layout_func : callable squares_frame_height : int squares_frame_width : int size_options : list ui_xpadding : int ui_ypadding : int squares 0..* tkinter.tklabel winfo_width() : float place(x : float, y : float) init_ui() init_control_panel() create_size_panel() create_num_squares_panel() create_start_pos_panel() create_run_quit_panel() create_squares() clear_squares() run_layout()
UML, klassdiagram: relationer mellan objekt Många olika typer finns, men i denna kurs behöver vi bara använda association. 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.
Egna klasser använd som egna datatyper, men även för att strukturera program
Egna klasser för att bygga upp ett program Hur ser ett objektorienterat program ut? Vi tar skissar på ett exempel: program som laddar in en csv-fil visar data (t.ex. i terminalen eller i ett GUI-fönster) För att lättare kunna visualisera objektorienterad struktur använder vi klassdiagram
Objekt som behållare (tänk matrosjkadockor)
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.
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
Arv, exempel