Klasser og Objekter i Python. Uge 11

Relaterede dokumenter
Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16,

Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16,

Lær Python - Dag 4, modul 2 Objektorienteret programmering

Lær Python - Dag 4, modul 1 Objektorienteret programmering

Øvelse 9. Klasser, objekter og sql-tabeller insert code here

UML til kravspecificering

METODER ARV KLASSER. Grundlæggende programmering Lektion 5

SWC eksamens-spørgsmål. Oversigt

Software Construction 1 semester (SWC) Spørgsmål 1

Udvidelse og specialisering. Klassehierarkier. Nedarvningsterminologi. Interfaces. Statiske og dynamiske typer. Polymorfi. Abstrakte klasser.

Rename og redefine. Abstrakte klasser. Dynamisk binding.

Lær Python - Dag 3, modul 1 Læse og skrive filer

Lær Python dag 1 - modul 1

Tree klassen fra sidste forelæsning

Introduktion til programmering. Afslutning

Introduktion til funktioner, moduler og scopes i Python

klient Webside Forespørgsel/ Nye data Python program Database kommando svar Database

Side 1. Databaser og SQL. Dagens gang. Databasebegreber. Introduktion til SQL Kap 1-5

Programmeringscamp. Implementer funktionerne én for én og test hele tiden.

Analyse, problemområde, anvendelsesområde

Programmeringscamp Opbygning og specialisering af klassehierarki. Simulering af en kasselinje

Metodehåndbog. Begrebsmodeller, Informationsmodeller og Begrebsdefinitioner. Udarbejdet i fællesskab mellem Udbetaling Danmark/KL/KOMBIT

Objekt-orienteret programmering uden klasser: Self.

4 Basal Objekt-orienteret Programmering I.

ER-modellen. Databaser, efterår Troels Andreasen. Efterår 2002

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Grundlæggende Programmering ITU, Efterår Skriftlig eksamen i Grundlæggende Programmering

Videregående Programmering for Diplom-E Noter

2. Husk at give execute-tilladelser. I Filezilla højreklikker I på den overførte file, så vælger I fileattributes og sætter kryds i execute.

Introduktion til programmering. Programmeringssprog Uge 44 Computer Science, kap 6. Learning Python: kap 13, 14.

Databasesystemer, forår 2006 IT Universitetet i København. Forelæsning 3: E-R modellering. 16. februar Forelæser: Rasmus Pagh

Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion

Systemkald DM Obligatoriske opgave. Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/ Afleveret af: Jacob Christiansen,

Casper Fabricius ActiveRecord. O/RM i Ruby on Rails

Introduktion til ActionScript, fortsat

Databasesystemer, forår 2005 IT Universitetet i København. Forelæsning 3: E-R modellering. 17. februar Forelæser: Rasmus Pagh

klient Webside Forespørgsel/ Nye data Python program Database kommando svar Database

Objektorienteret design med arv og polymorfi:

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java

Introduktion til programmering. Uge 38.1 Python 2 Learning Python, kap 8-12.

Objektorientering. Programkvalitet

Database for udviklere. Jan Lund Madsen PBS10107

Listen over reserverede ord er meget lang, men de væsentligste vil jeg beskrive her i denne artikel:

DM507 Algoritmer og datastrukturer

Udgivelsen er beskyttet af Creative Commons license, Navngivning 2.5

Informations- og datamodellering

DM507 Algoritmer og datastrukturer

Abstrakte datatyper C#-version

Projekt - Visual Basic for Applications N på stribe

Indhold. Side 2 af 26

Python programmering. Per Tøfting. MacFest

DM507 Algoritmer og datastrukturer

Martin Olsen. DM507 Projekt Del I. 19. marts 2012 FOTO: Colourbox

! Kia Dahlen. Kamilla Klein, Pia Jensen og Maria Korshøj Andersen.

DAVAR Omdøbt til SagDokumentFormat. Attention er skilt ud i et selvstændigt format, AttentionFormat.

Objektorienteret Programmering

PUT og INPUT funktionerne

MapBasic &.NET interaktion. MapBasic.NET. Jakob Lanstorp IT konsulent COWI. Odense 23. Juni jun 2011 MapBasic &.

Hvad er Objekter - Programmering

DM507 Algoritmer og datastrukturer

Begrænsninger i SQL. Databaser, efterår Troels Andreasen

Begreber om Godt Software

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.

ERFARING MED IMPLEMENTERING AF BENTLEY I-MODEL COMPOSITION SERVER (ICS) FOR PDF

Transkript:

Klasser og Objekter i Python Uge 11

Klasser og objekter En klasse beskriver en klump af samhørende funktioner og variable En klasse er en beskrivelse. Klassens objekter er instanser af klassen. En programudførelse indeholder objekter, ikke klasser

Samlingsmønstret Rekursiv definition Samling ::= {Del}* Del ::= Simpel Samling Samling Del Del Samling Del Del

Nedarvning Subklassen arver variable og funktioner fra superklassen Simpel: navn verbalize Samling: navn dele verbalize tilføj fjern Simpel bevarer superklassens verbalize Samling overskriver superklassens verbalize

init og andre funktioner class Del: def init (self, navn): self.navn = navn def verbalize(self): return self.navn superklasse class Samling(Del): def init (self, navn, dele): Del. init (self, navn) self.dele = dele def tilfoej(self,endel): self.dele.append(endel) def fjern(self,endel): self.dele.remove(endel) def verbalize(self): descr = self.navn + '(' for i in self.dele: descr += i.verbalize()+', ' descr = descr[0:-2]+ ')' return descr initialisering funktioner subklasse class Simpel(Del): def init (self, navn): Del. init (self, navn) subklasse

Dannelse af objekter Inits parametre bil = Samling('bil',[Simpel('karosseri'),Samling('hjul',[]),Simpel('motor')]) bil.dele[1].tilfoej(simpel('venstre forhjul')) bil.dele[1].tilfoej(simpel('hoejre forhjul')) bil.dele[1].tilfoej(simpel('venstre baghjul')) bil.dele[1].tilfoej(simpel('hoejre baghjul')) print bil.verbalize() Kald af hjulsamlingens tiltøj-funktion Output: bil(karosseri, hjul(venstre forhjul, hoejre forhjul, venstre baghjul, hoejre baghjul), motor)

Definition af klasser: klassenavn Class <klassenavn>(<evt. superklasse>): <init-funktionen> <funktioner der tilhører klassen> class Samling(Del): def init (self, navn, dele): Del. init (self, navn) self.dele = dele def tilfoej(self,endel): self.dele.append(endel) def fjern(self,endel): self.dele.remove(endel) def verbalize(self): descr = self.navn + '(' for i in self.dele: descr += i.verbalize()+', ' descr = descr[0:-2]+ ')' return descr superklasse Init funktionen Funktioner der tilhører klassen

Generering af klasser <klassenavn>(<inits parametre undtagen self>) Klasse definition class Simpel(Del): def init (self, navn): Del. init (self, navn) Simpel s init kalder superklassens init Generering af klasse Simpel('venstre forhjul') init kaldes automatisk når klassen genereres

Self self henviser til det nydannede objekt Når man i klassedefinitionen vil henvise til objektets egne funktioner eller variable skal det ske via self def getname(self): return self.name

Med og uden self class Samling(Del): def init (self, navn, dele): Del. init (self, navn) self.dele = dele stelnummer = 100 Stelnummer er blot en lokal variabel i init der forsvinder når funktionen har kørt. Dele er derimod fast knyttet til objektet >>> bil.dele [< main.simpel instance>, < main.samling instance >, < main.simpel instance >] >>> bil.stelnummer Traceback (most recent call last): File "<pyshell#7>", line 1, in? bil.stelnummer AttributeError: Samling instance has no attribute 'stelnummer' >>>

Self bruges også til at referere til objektets egne funktioner class Eksempel: def init (self,enliste): self.minliste = enliste def summer(self): resultat = 0 for i in self.minliste: resultat += i return resultat def udskrivsum(self): print self.summer() Eksempel -minliste +summer() +udskrivsum() etelement = Eksempel([1,2,3,4]) etelement.udskrivsum() Resultat: 10 >>>

Udeladelse af self def udskrivsum(self): print summer() Python ved ikke hvad summer refererer til: print summer() NameError: global name 'summer'is not defined

Benyttelse af klasser Man kan godt bruge klasser s funktioner (ubundne funktioner) uden at lave en instans, men så skal de have en instans som argument: etelement = Eksempel([1,2,3,4]) Eksempel.udskrivSum(etElement)

Hele Python består af objekter >>> L = [1,2,3] >>> L.append(4) >>> L [1, 2, 3, 4] >>>

Relationer mellem objekter Der er en én-mange relation mellem en samling og dens dele En relation er et abstrakt begreb der kan implementeres på mange måder. SQL: som en relation Python: som en liste af objekter

SQL Helhedens primærnøgle benyttes som fremmednøgle i delen

Python class Samling(Del): def init (self, navn, dele): Del. init (self, navn) self.dele = dele Helheden har en liste over de objekter der repræsenterer dens dele

Fordelen ved UML Vi kan beskrive de logiske forhold i problemområdet uden at skulle tage beslutninger om implementeringen