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



Relaterede dokumenter
Klasser og Objekter i Python. Uge 11

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

Programmeringscamp Opbygning og specialisering af klassehierarki. Simulering af en kasselinje

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

It og informationssøgning Forelæsning 7 1. november 2006 Jakob Grue Simonsen. Indlejring og Nedarvning

Skriftlig eksamen i Datalogi

Introduktion til programmering. UML, Uge 45 Computer science, kap 7, særl. 7.4 og 7.5. Martin Fowler: UML distilled, kap. 3. Addision-Wesley, 2004.

Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Ideen er simpel:

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

SWC eksamens-spørgsmål. Oversigt

Metaklasser i Smalltalk.

Lær Python dag 1 - modul 1

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

It og informationssøgning Forelæsning oktober 2006 Jakob Grue Simonsen. Klasser

Introduktion til programmering. Afslutning

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

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

METODER ARV KLASSER. Grundlæggende programmering Lektion 5

Introduktion til funktioner, moduler og scopes i Python

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

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Eksempel: Skat i år 2000

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

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

Tree klassen fra sidste forelæsning

It og informationssøgning Forelæsning 5 4. oktober 2006 Nils Andersen. Tilfældige tal. Statistisk test. Sæt og associationslister.

Rename og redefine. Abstrakte klasser. Dynamisk binding.

Program Dokumentation PC Software Skrevet af. Gruppen. Version 1.0

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

Videregående programmering i Java

dintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4

Videregående Programmering for Diplom-E Noter

UML til kravspecificering

4 Basal Objekt-orienteret Programmering I.

Introduktion til ActionScript, fortsat

class subklasse-navn extends superklasse-navn { } NorwaySpruce har superklassen Spruce, som igen har superklassen Tree.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

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

30 Objekt-orienteret Programmering i Andre Sprog.

Analyse, problemområde, anvendelsesområde

Aarhus Universitet, Science and Technology, Computer Science. Exam. Wednesday 27 June 2018, 9:00-11:00

Teknisk dokumentation

DM01 DM Obl. Afl. Jacob Christiansen, , D12, Elias 18/ Side 1 af 11

Dokumentation af programmering i Python 2.75

DATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004

SWC Elementer i klassedefinition

JAR Øvelse nr. 2. JAR-Manual, Version 1.0. Avanceret søgning. Regionsvejledning

Aarhus Universitet, Science and Technology, Computer Science. Mock Exam. Wednesday 27 June 2018, 9:00-11:00

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

It og informationssøgning Forelæsning december 2006 Jakob Grue Simonsen. Diverse emner af almen interesse

Introduktion Indtastning Funktioner Scripts Optimering. Matlab

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

Uniq.Survey-Xact.DK. Vejledning. Rambøll Management Olof Palmes Allé 20 DK-8200 Århus N Denmark. Tlf:

Objekt-orienteret programmering uden klasser: Self.

1 Start og afslutning. Help.

Forelæsning Uge 5 Mandag

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.

Forelæsning Uge 6 Mandag

Lektion 3. Grundlæggende programmering i VR

Klasser og objekter. (Afsnit i manualen)

Udarbejdet af: Frontal Lobe teamet, Jonathan Lawaetz og Joachim Skovbo Dato for opdatering: 27/05/18. Indholdsfortegnelse

#Alle Kan Kode. Lektion 25 - Enums

Python programmering. Per Tøfting. MacFest

It og informationssøgning Forelæsning september 2006 Nils Andersen. Gentagelser og tekster

Eksamen, DSDS, forår 2009

HVORDAN KAN REFERENCEARKITEKTUR IMPLEMENTERES I EN STANDARDISERET DOKUMENTATION?

JavaScript. nedarvning.

Objektorienteret Programmering

Civilingeniøreksamen januar Skriftelig prøve den 12. januar 2001 Kursusnummer 49104

DM536. Rapport og debug

Abstrakte datatyper C#-version

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

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

Programmering C RTG

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

ISO 27001/27002:2013 i SecureAware Policy TNG

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.

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning

12 Metaobjekt protokoller i CLOS.

Excel-4: Diagrammer og udskrift

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Æ Ø Å

10 Metodekombination og multimetoder i CLOS.

Forelæsning Uge 2 Torsdag

Objektorientering. Programkvalitet

It og informationssøgning Forelæsning september 2006 Nils Andersen. Underprogrammer og betingelser. Standardfunktioner, typeomsætning

Forelæsning Uge 12 Torsdag

Anvendelse af BPT til manuel test

Casper Fabricius ActiveRecord. O/RM i Ruby on Rails

Brug Photo Story 3 en let introduktion

Java Programmering. En bog for begyndere. Skrevet af Henrik Kressner

DATALOGI 0GB. Skriftlig eksamen tirsdag den 6. januar 2004

2) Det er let at være produktiv med Python, da Python som regel kun har mellem 67 og 80% færre linier end tilsvarende C eller Java kode.

Design by Contract. Design and Programming by Contract. Oversigt. Prædikater

Python 3 Matematik Programmerings kursus:

Forelæsning Uge 12 Mandag

Java Klasse nedarvninger

Webserverprogrammering

Transkript:

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

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

Opgave materialer\uml opgave 2 08.doc

Composite mønstret Composite mønstret kan bruges til at repræsentere hierarkier af helheder og dele En bil består af karosseri, hjul og motor Et karosseri består af tag, døre og bund En motor består af stempler og karburator Composite mønstret er en abstraktion over alle den slags hierarkier

Composite mønstret Rekursiv definition Samling ::= {Del}* Del ::= Simpel Samling -del * -navn Del + str () Samling Del Del Samling Del Samling Del 1 -helhed -dele +tilfoej() +fjern() +hent() + str () Simpel

Begge arver navn fra overklas sen Samling tilføjer nye ting Nedarvning Subklassen arver variable og funktioner fra superklassen Simpel: navn str Samling: navn dele str tilføj fjern hent Simpel bevarer superklassens str -navn + str () Samling overskriver superklassens str 1 -helhed -dele -del * Samling +tilfoej() +fjern() +hent() + str () Del Simpel

init og andre funktioner class Del: def init (self, navn): self.navn = navn def str (self, niveau = 1): text = '\n' + niveau *' '+'(' + self.navn + ')' return text class Samling(Del): def init (self, navn, dele = None): Del. init (self, navn) self.dele = dele def tilfoej(self,endel): self.dele.append(endel) def fjern(self,endel): if endel in self.dele: self.dele.remove(endel) def hent(self,delnavn): for d in self.dele: if d.navn == delnavn: return d return None def str (self, niveau = 1): text = '\n' + niveau *' '+'(' + self.navn for endel in self.dele: text += endel. str (niveau+1) text += '\n' + niveau *' '+')' return text class Simpel(Del): def init (self, navn): Del. init (self, navn) initialisering funktioner superklasse subklasse subklasse

Dannelse af objekter Inits parametre bil = Samling('bil',[Samling('karosseri'),Samling('hjul'),Samling('motor')]) bil.hent('karosseri').tilfoej(simpel('tag')) bil.hent('karosseri').tilfoej(simpel('doere')) bil.hent('karosseri').tilfoej(simpel('bund')) bil.hent('hjul').tilfoej(simpel('venstre forhjul')) bil.hent('hjul').tilfoej(simpel('venstre forhjul')) bil.hent('hjul').tilfoej(simpel('hoejre forhjul')) bil.hent('hjul').tilfoej(simpel('venstre baghjul')) bil.hent('hjul').tilfoej(simpel('hoejre baghjul')) bil.hent('motor').tilfoej(simpel('stempler')) bil.hent('motor').tilfoej(simpel('karburator')) print bil Kald af hjulsamlingens tiltøj-funktion

Output ) ) (bil (karosseri (Tag) (Doere) (Bund) (hjul (venstre forhjul) (venstre forhjul) (hoejre forhjul) (venstre baghjul) (hoejre baghjul) (motor (stempler) (karburator) ) )

Definition af klasser: klassenavn Class <klassenavn>(<evt. superklasse>): <init-funktionen> <funktioner der tilhører klassen> superklasse class Samling(Del): '''repræsenterer en samling af dele, enten samlinger eller simple''' def init (self, navn, dele = None): Del. init (self, navn) self.dele = dele def tilfoej(self,endel): if self.dele == None: self.dele = [] self.dele.append(endel) def fjern(self,endel): if self.dele == None: self.dele = [] if endel in self.dele: self.dele.remove(endel) def hent(self,delnavn): for d in self.dele: if d.navn == delnavn: return d return None def str (self, niveau = 1): '''giver en textuel repræsentation af klassen str gør det muligt at printe klassen direkte''' text = '\n' + niveau *' '+'(' + self.navn for endel in self.dele: text += endel. str (niveau+1) text += '\n' + niveau *' '+')' return text Init funktionen Funktioner der tilhører klassen

Check om det er rigtigt: Introspektion Python indeholder en række funktioner der giver direkte adgang til dens indvolde Objekt. dict : en dictionary der gemmer objektets attributter og værdier Dir(object): returnerer alle de attributter og metoder der er knyttet til objektet.

Introspection def introspect(self): text = 'Dictionary: ' text += '\n'+ str(self. dict ) text += '\n'+'attributes and functions: ' text += '\n'+ str(dir(self)) return text

Eksempel Bil (Samling): Dictionary: {'dele': [< main.samling instance at 0x00FC2BE8>, < main.samling instance at 0x00FC2CD8>, < main.samling instance at 0x00FC2D00>], 'navn': 'bil'} Attributes and Functions : Tag (Simpel): [' doc ', ' init ', ' module ', ' str ', 'dele', 'fjern', 'hent', 'introspect', 'navn', 'tilfoej'] Dictionary: {'navn': 'Tag'} Attributes and Functions : [' doc ', ' init ', ' module ', ' str ', 'introspect', 'navn'] Nedarvede fra Python Brugerdefinerede

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

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] >>> object List +append() +count() +extend()

Relationer mellem objekter Der er en én-mange relation mellem en samling og dens dele -del * -navn Del + str () En relation er et abstrakt begreb der kan implementeres på mange måder. SQL: som en relation Python: som en liste af objekter 1 -helhed -dele Samling +tilfoej() +fjern() +hent() + str () Simpel

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

Python 1 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

Python 2 Den samme UML-relation kan implementeres på forskellig måde I stedet for en liste kan man bruge en dictionary

Python 3 class Samling(Del): '''repræsenterer en samling af dele, enten samlinger eller simple''' def init (self, navn): Del. init (self, navn) self.dele = {} def tilfoej(self,endel): self.dele[endel.navn] = endel def fjern(self,delnavn): if delnavn in self.dele.keys(): self.dele.pop(delnavn) def hent(self,delnavn): if delnavn in self.dele.keys(): return self.dele[delnavn] else: return None def str (self, niveau = 1): '''giver en textuel repræsentation af klassen''' text = '\n' + niveau *' '+'(' + self.navn for endel in self.dele.values(): text += endel. str (niveau+1) text += '\n' + niveau *' '+')' return text

Multipel nedarvning Kode Medium -betydning +afkode() +kode() Papir Lyd Digitalt Sprog Billed Musik -tykkelse -størrelse -farve +brænde() +sværte() +viske ud() -længde -starttid -sluttid +skrue op() +skrue ned() +modulere() -antal bytes +sætte bit() +fjerne bit() +skrive() +tegne() +spille() Børnebog Computerspil

Kode class Medium: def init (self, navn): self.navn = navn def introspect(self): text = 'Id: '+str(id(self)) text += '\ndictionary: ' text += '\n'+ str(self. dict ) text += '\n'+'attributes and functions: ' text += '\n'+ str(dir(self)) return text class Papir(Medium): def init (self,navn, tykkelse, stoerrelse,farve): Medium. init (self,navn) self.tykkelse = tykkelse self.stoerrelse = stoerrelse self.farve = farve def braende(self): pass def svaerte(self): pass def viske_ud(self): pass class Lyd(Medium): def init (self,navn, laengde, starttid,sluttid): Medium. init (self,navn) self.laengde = laengde self.starttid = starttid self.sluttid = sluttid def skrue_op(self): pass def skrue_ned(self): pass def modulere(self): pass class Digitalt(Medium): def init (self,navn, antal_bytes): Medium. init (self,navn) self.antal_bytes = antal_bytes def saette_bit(self): pass def fjerne_bit(self): pass class Kode: def init (self,betydning=''): self.betydning = betydning class Sprog(Kode): def init (self,betydning): Kode. init (self,betydning) def skrive(self): pass class Billed(Kode): def init (self,betydning): Kode. init (self,betydning) def tegne(self): pass class Musik(Kode): def init (self,betydning): Kode. init (self,betydning) def skrive(self): pass class BoerneBog(Papir,Sprog,Billed): def init (self,navn,tykkelse,stoerrelse,farve,betydning): Papir. init (self,navn, tykkelse, stoerrelse,farve) Sprog. init (self,'eventyr') Billed. init (self,'eventyr')

Hvad er der indeni? fyrtoejet = BoerneBog('Fyrtoejet','2mm','A4','hvid','eventyr') print fyrtoejet.introspect() Id: 26353296 Dictionary: {'tykkelse': '2mm', 'stoerrelse': 'A4', 'betydning': 'eventyr', 'farve': 'hvid', 'navn': 'Fyrtoejet'} Attributes and functions: [ 'betydning', 'braende', 'farve', 'navn', 'skrive', 'stoerrelse', 'svaerte', 'tegne', 'tykkelse', 'viske_ud']

To typer af UML-diagrammer Analyse diagrammer: repræsenterer den virkelige verden. Design diagrammer: repræsenterer ITsystemet.

Fordelen ved UML Vi kan beskrive de logiske forhold i problemområdet uden at skulle tage beslutninger om implementeringen At kunne dette er jeres hovedkvalifikation. Har vi et godt UML diagram er der ikke lang vej til implementering for dygtige programmører.

Opgave 9..\øvelser\øvelse 9.doc