Objectgericht Programmeren. (in Python)



Vergelijkbare documenten
N&O: Objectgericht Programmeren. (in Python)

NETWERKEN en OBJECTORIËNTATIE

Inleiding Programmeren 2

Informatica. Deel II: les 1. Java versus Python. Jan Lemeire Informatica deel II februari mei Parallel Systems: Introduction

Les 3. Gebruik in volledige programma Default argumenten Vergelijken van objecten

Informatica. Deel II: les 1. Java versus Python. Jan Lemeire Informatica deel II februari mei Parallel Systems: Introduction

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

Objectgericht programmeren 1.

Inleiding Programmeren 2

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Javascript oefenblad 1

Arrays. Complexe datastructuren. Waarom arrays. Geen stijlvol programma:

Programmeren in Java les 3

Overerving & Polymorfisme

Programmeermethoden NA. Week 6: Lijsten

Het relaas van de beginnende programmeur. Het hoe en waarom van de assistent

public Paneel() { knop = new JButton( Klik ); knop.addactionlistener( new KnopHandler() ); tekstvak = new JTextField(10); add(knop); add(tekstvak);

Programmeermethoden NA

INHOUDSOPGAVE. Over de auteur, de illustrator en de technische redacteuren 13

Inleiding Programmeren 2

Geeft de lengte van een object (string, lijst, tupel) terug als integer

Vakgroep CW KAHO Sint-Lieven

Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing

OEFENINGEN PYTHON REEKS 1

Modelleren en Programmeren

Code Voorbeeld Resultaat. print(6, end="") print(7) print(type(6)) <class 'int'> + optelling - aftrekking * vermenigvuldiging / deling 8 16 % modulo

Python. Vraag 1: Expressies en types. Vraag 1 b: Types -Ingebouwde functies- Vraag 1 a 3/10/14

Lessen Java: Reeks pag. 1

Tentamen Object Georiënteerd Programmeren TI januari 2013, Afdeling SCT, Faculteit EWI, TU Delft

Abstracte klassen & Interfaces

Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, uur

Programmeermethoden NA. Week 5: Functies (vervolg)

Programmeren 1 23 januari 2013 Prof. T. Schrijvers

Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, uur

PYTHON REEKS 2: FUNCTIES. Mathias Polfliet

Programmeermethoden NA. Week 5: Functies (vervolg)

Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010

Modulewijzer Tirdat01

Objectgericht programmeren 1.

Informatietechnologie 2. JavaScript. Functies, Objecten en toegang tot de DOM. Kristof Michiels

Hoofdstuk 0. Van Python tot Java.

Modelleren en Programmeren

Datastructuren college 10

Informatica. Deel II&III: les 1. Java versus Python. Jan Lemeire Informatica deel II&III februari mei Parallel Systems: Introduction

SPOJ oplossingen Gilles Callebaut 7 augustus 2015

Examen Programmeren 2e Bachelor Elektrotechniek en Computerwetenschappen Faculteit Ingenieurswetenschappen Academiejaar juni, 2010

GEDETAILLEERDE INHOUD

X. Grafische elementen

NAAM: Programmeren 1 Examen 21/01/2011

Hoofdstuk 1: Inleiding. Hoofdstuk 2: Klassen en objecten Datahiding: afschermen van implementatiedetails. Naar de buitenwereld toe enkel interfaces.

Wat is FP? The Haskell School of Expression. Functies. Types 1+1=2. Iedere expressie (en waarde) heeft een type.

II. ZELFGEDEFINIEERDE FUNCTIES

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

6.1 Kwadraten [1] HERHALING: Volgorde bij berekeningen:

APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN. Onderdeel van SmartProducts

Een spoedcursus python

Wiskunde oefentoets hoofdstuk 10: Meetkundige berekeningen

Geavanceerde Programmeertechnologie. Prof. dr. Kris Luyten Jo Vermeulen

Zelftest Inleiding Programmeren

[15] Variabelen in functies (of: een woordje over scope)

Uitwerking Tentamen Modelleren en Programmeren - versie 1 Woensdag 1 februari 2017, uur

OEFENINGEN PYTHON REEKS 1

Zoemzinnen. Algemene info. Functies met een variabel aantal argumenten

Programmeren in Java 3

Programmeren en Wetenschappelijk Rekenen in Python. Wi1205AE I.A.M. Goddijn, Faculteit EWI 22 april 2014

Datastructuren: stapels, rijen en binaire bomen

Tussentoets Programmeren en genomics, 8CA10, versie A 17 maart 2017, u.

VAN HET PROGRAMMEREN. Inleiding

Constanten. Variabelen. Expressies. Variabelen. Constanten. Voorbeeld : varid.py. een symbolische naam voor een object.

Programmeren in C# Samenvatting van C#

OEFENINGEN PYTHON REEKS 4

Niet-numerieke data-types

Python voor Natuur- en Sterrenkundigen Week 2

Inleiding Programmeren 2

Voorbeelden. Sorteren. Voorbeeld: n = 5. # intsort.py: sorteren van een rij getallen

Tentamen Object Georiënteerd Programmeren TI oktober 2014, Afdeling SCT, Faculteit EWI, TU Delft

Modulewijzer tirprog02/infprg01, programmeren in Java 2

public Bier ( string N, double P, Brouwerij B) { Naam = N; AlcoholPerc = P; Brouwer = B;

Modelleren en Programmeren

Naam:... INFO / WIS-INF / ASIB / IAJ. Theorie

MINICURSUS PHP. Op dit lesmateriaal is een Creative Commons licentie van toepassing Sebastiaan Franken en Rosalie de Klerk Bambara

Labo 2 Programmeren II

Programmeren in C++ Efficiënte zoekfunctie in een boek

Programmeren I. 26 augustus Algemene Richtlijnen. Richtlijnen Programmeren 1

Programmeren. a. 0, 0, 0 b. 0, 0, 27 c. 15, 12, 0 d. 15, 12, 27

continue in een for, while of do lus herhaalt de lus vroegtijdig. De volgende herhaling wordt onmiddellijk begonnen.

Interne voorstelling. types en conversies. Binaire en andere talstelsels. Voorstelling van gegevens: bits en bytes

Planning. 1. Mini College. 2. Introductiecursus Imperatief Programmeren. 3. Crash and Compile (vanaf 17:00 uur)

Datastructuren Werkcollege Intro

Vereiste kennis. 1 Java-editor. 2 Het compileren van een programma

Transcriptie:

Objectgericht Programmeren (in Python)

Motivatie Programmeren is moeilijk

Waarom? Complexiteit 100 200 300 400 500 kloc (1000 lijnen code)

g1 = raw_input("eerste getal?") g2 = raw_input("tweede getal?") m = int(g1) n = int(g2) r = m % n while r > 0: m = n n = r r = m % n print "GGD is " + str(n) m n r 70 42 28 42 28 14 28 14 0 Eerste getal?70 Tweede getal?42 GGD is 14

g1 = raw_input("eerste getal?") g2 = raw_input("tweede getal?") m = int(g1) Eerste getal?70 Tweede getal?42 GGD is 14 = -1*70 + 2*42 n = int(g2) a2 = 1 b = 1 a = 0 b2 = 0 c = m d = n q = c / d r = c % d a2 b a b2 c d q r while r > 0: c = d d = r t = a2 1 0 1-1 0 1 0 1 70 42 42 28 1 1 28 14 a2 = a a = t - q * a t = b2 b2 = b b = t - q * b q = c / d r = c % d 1 2-1 -1 28 14 2 0 print "ggd = "+str(d)+" = "+str(a)+"*"+str(m)+" + "+str(b)+"*"+str(n)

Waarom? Complexiteit 100 200 300 400 500 kloc (1000 lijnen code)

(Oude) oplossing Datastructuren Gegevens bijhouden Functies Gegevens manipuleren Zoals wiskundige stelling: wat onafhankelijk van hoe

Bijvoorbeeld Datastructuur Verhouding ingredienten Functie Hoeveel gin per tonic

Bijvoorbeeld Datastructuur verhouding = 0.5 Functie def ginpertonic(data, tonic): gin = data * tonic return gin

Bijvoorbeeld Datastructuur gintonic = { "gin": 0.33, "tonic": 0.67 } Functie def ginpertonic(data, tonic): cocktail = tonic / data["tonic"] gin = cocktail * data["gin"] return gin

Maar let op Datastructuur gintonic = { "gin": 0.33, "tonic": 0.67 } Functie def ginpertonic(verhouding, tonic): gin = verhouding * tonic return gin

RIP -$327.600.000

(Nieuwe) oplossing Datastructuren Gegevens bijhouden Functies Objecten Gegevens manipuleren

Object = Gegevens + Gedragen = Kennen + Kunnen

± het idee gintonic = { "gin": 0.33, "tonic": 0.67, "functie": ginpertonic1 } def ginpertonic1(data, tonic): cocktail = tonic / gintonic["tonic"] gin = cocktail * cocktail["gin"] return gin

± het idee gintonic = { "gin": 1, "tonic": 2, "functie": ginpertonic2 } def ginpertonic2(data, tonic): totaal = gintonic["gin"] + gintonic["tonic"] cocktail = tonic / gintonic["tonic"] gin = cocktail * cocktail["gin"] return gin / totaal

Voordeel gintonic = { "gin": 1, "tonic": 2, "functie": ginpertonic2 } gintonic["functie"](gintonic, 20) Zoals wiskundige stelling: wat onafhankelijk van hoe gintonic = { "gin": 0.33, "tonic": 0.67, "functie": ginpertonic1 } gintonic["functie"](gintonic, 20)

Klasse = Soort object

Illustratie Object aanmaken Attributen toevoegen en opvragen Object kan verschillende namen hebben

Object met functie class Rechthoek: pass x = Rechthoek() x.breedte = 4 x.hoogte = 5 def oppervlakte(rechthoek): return (rechthoek.breedte * rechthoek.hoogte) print oppervlakte(x)

Methode = functie in klasse class Rechthoek: def oppervlakte(zelf): return (zelf.breedte * zelf.hoogte) x = Rechthoek() x.breedte = 4 x.hoogte = 5 print x.oppervlakte() gintonic["functie"](gintonic, 20)

Methode = functie in klasse class Vierkant: def oppervlakte(zelf): return zelf.lengte ** 2 x = Vierkant() x.lengte = 4 print x.oppervlakte()

class Rechthoek: def oppervlakte(zelf): return zelf.breedte * zelf.hoogte class Vierkant: def oppervlakte(zelf): return zelf.lengte ** 2 x = Rechthoek() x.breedte = 4 x.hoogte = 5 y = Vierkant() y.lengte = 4 rij = [x,y] for figuur in rij: print figuur.oppervlakte()

class Rechthoek: def oppervlakte(zelf): return zelf.breedte * zelf.hoogte x = Rechthoek() x.breedte = 4 x.hoogte = 5 y = Rechthoek() y.breedte = 2 y.hoogte = 3 z = Rechthoek() z.breedte = 10 z.hoogte = 15

class Rechthoek: def oppervlakte(zelf): return zelf.breedte * zelf.hoogte def initializeer(zelf,b,h): zelf.breedte = b zelf.hoogte = h x = Rechthoek() x.initializeer(4,5) y = Rechthoek() y.initializeer(2,3) z = Rechthoek() z.initializeer(10,25)

class Rechthoek: def oppervlakte(zelf): return zelf.breedte * zelf.hoogte def init (zelf,b,h): zelf.breedte = b zelf.hoogte = h x = Rechthoek(4,5) y = Rechthoek(2,3) z = Rechthoek(10,25)

Constructor Wordt automatisch opgeroepen bij aanmaken van object Heeft atijd naam init Magische methode : dinges Bijkomend voordeel: daar kan je zien welke attributen object heeft

Magische methodes int(x) ---> x. int () float(x) ---> x. float () str(x) ---> x. str () print x ---> x. str ()

class Rechthoek: def oppervlakte(zelf): return zelf.breedte * zelf.hoogte def init (zelf,b,h): zelf.breedte = b zelf.hoogte = h >>> x = Rechthoek(4,5) >>> int(x) 20 >>> str(x) 'Rechthoek van 4x5' >>> print x Rechthoek van 4x5 def str (zelf): return ("Rechthoek van " + str(zelf.breedte) + "x" + str(zelf.hoogte)) def int (zelf): return zelf.oppervlakte()

Magische attributen >>> x = Rechthoek(1,2) >>> x. class <class main.rechthoek at 0x505930> >>> x. dict {'breedte': 1, 'hoogte': 2} >>> x. class. dict {' int ': <function int at 0x511030>, ' module ': ' main ', ' str ': <function str at 0x5061b0>, 'oppervlakte': <function oppervlakte at 0x503470>, ' doc ': None, ' init ': <function init at 0x5034f0>}

En wat met ons probleem? Complexiteit 100 200 300 400 500 kloc (1000 lijnen code)

class Rechthoek: Inkapseling def oppervlakte(zelf): return zelf.breedte * zelf.hoogte def init (zelf,b,h): zelf.breedte = b zelf.hoogte = h def str (zelf): return ("Rechthoek van " + str(zelf.breedte) + "x" + str(zelf.hoogte))

class Rechthoek: Inkapseling def oppervlakte(zelf): return zelf.opp def init (zelf,b,h): zelf.breedte = b zelf.opp = b * h def str (zelf): return ("Rechthoek van " + str(zelf.breedte) + "x" + str(zelf.opp / zelf.breedte))

class Rechthoek: Inkapseling def oppervlakte(zelf): def init (zelf,b,h): def str (zelf):

Praktisch Email: joost.vennekens@kuleuven.be Slides downloaden: http://www.cs.kuleuven.be/~joost/dn/ Schriftelijk examen (40%) + 25% P.E. practica + 20% website + 15% Netwerken