N&O: Objectgericht Programmeren. (in Python)

Vergelijkbare documenten
Objectgericht Programmeren. (in Python)

NETWERKEN en OBJECTORIËNTATIE

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

Inleiding Programmeren 2

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

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

Inleiding Programmeren 2

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

Vakgroep CW KAHO Sint-Lieven

Programmeermethoden NA. Week 6: Lijsten

Overerving & Polymorfisme

Programmeermethoden NA

Programmeren in Java les 3

Abstracte klassen & Interfaces

Geavanceerde Programmeertechnologie. Prof. dr. Kris Luyten Jo Vermeulen

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

Programmeermethoden NA. Week 5: Functies (vervolg)

OEFENINGEN PYTHON REEKS 1

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

Programmeermethoden NA. Week 5: Functies (vervolg)

Kennis na het volgen van de training. Na het volgen van deze training bent u in staat:

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

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

Overzicht modulefiches Webdesigner

Modulewijzer Tirdat01

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

Modelleren en Programmeren

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

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

Programmeren I. 26 augustus Algemene Richtlijnen. Richtlijnen Programmeren 1

Programmeren 1 23 januari 2013 Prof. T. Schrijvers

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

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

SPOJ oplossingen Gilles Callebaut 7 augustus 2015

Modelleren en Programmeren

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

Labo 2 Programmeren II

Python (gem=1,86) Java (gem=1,57) Enquete cursus informatica 1e bachelors oefeningen beter aansluiten bij project?

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

Objectgericht programmeren 1.

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

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

Lessen Java: Reeks pag. 1

Inleiding Programmeren 2

PYTHON REEKS 2: FUNCTIES. Mathias Polfliet

Javascript oefenblad 1

Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing

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

II. ZELFGEDEFINIEERDE FUNCTIES

Verder zijn er de nodige websites waarbij voorbeelden van objectgeoriënteerd PHP (of Objec Oriented PHP, OO PHP) te vinden zijn.

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

Object-oriented programmeren met BlueJ en Visual Studio

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

X. Grafische elementen

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

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

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

6.1 Kwadraten [1] HERHALING: Volgorde bij berekeningen:

Een spoedcursus python

Wiskunde oefentoets hoofdstuk 10: Meetkundige berekeningen

Arduino Zuid-Limburg Workshop 2

Les 10 : Aanmaken van een database (deel2).

Syntax van opdracht. opdracht. expressie. variabele. = expressie ; klasse naam. methode naam. property naam += object

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

Oefeningen in verband met tweedegraadsvergelijkingen

Zoemzinnen. Algemene info. Functies met een variabel aantal argumenten

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

Objectgeoriënteerd programmeren in Java 1

Instructie voor Docenten. Hoofdstuk 13 OMTREK EN OPPERVLAKTE

OEFENINGEN PYTHON REEKS 1

Je gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python.

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

10 Meer over functies

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

OEFENINGEN PYTHON REEKS 4

Inleiding Programmeren 2

Hoofdstuk 3: De stelling van Pythagoras

Modelleren en Programmeren

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

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

Niet-numerieke data-types

Modulewijzer tirprog02/infprg01, programmeren in Java 2

Programmeren in C# Klassen schrijven

GEDETAILLEERDE INHOUD

Datastructuren college 10

OEFENINGEN PYTHON REEKS 1

Oefeningen in verband met tweedegraadsvergelijkingen

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

Transcriptie:

N&O: Objectgericht Programmeren (in Python)

N&O Twee aparte onderwerpen Internet en websites (50%) Programmeren in Python (50%) Komen samen in dynamische websites Webpagina als user interface voor Python programma s

Waarom objectgericht programmeren? Software is overal Meestal objectgericht Gebruiken, begrijpen, meedenken Doen van complexe berekeningen Automatiseren van taken Objectgerichte bibliotheken in Python

Doelstellingen Begrijpen en meedenken -> Hoorcolleges Met ook al veel aandacht voor Python code Op slide Live Oefening Programma s schrijven -> Practica

Evaluatie Begrijpen en meedenken Multiple choice vragen op examen (32%) Programma s schrijven Permanente evaluatie in practica (20%) Schriftelijke oefening op examen (48%)

Motivatie Programmeren is moeilijk

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

g1 = raw_input("grootste getal? ) m = int(g1) g2 = raw_input("kleinste getal?") 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 Grootste getal?70 Kleinste 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 Code opsplitsen 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 print str(ginpertonic(verhouding, 100))

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 (1998-1999) -$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, "gpt": ginpertonic1 } def ginpertonic1(data, tonic): cocktail = tonic / gintonic["tonic"] gin = cocktail * cocktail["gin"] return gin

± het idee gintonic = { "gin": 1, "tonic": 2, "gpt": 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, "gtp": ginpertonic2 } gintonic["gtp"](gintonic, 20) Zoals wiskundige stelling: wat onafhankelijk van hoe gintonic = { "gin": 0.33, "tonic": 0.67, "gtp": ginpertonic1 } gintonic["gtp"](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 Conventie: daar alle attributen van object maken

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): def init (zelf,b,h): def str (zelf):

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

Praktisch Email: joost.vennekens@kuleuven.be Slides downloaden: http://www.cs.kuleuven.be/~joost/dn/