Naar www.aaappp.nl/informatica of Instruct-online

Fundament Informatica - Basis 2016

module 4 Softwareontwikkeling

OO-stijl en Python

In hoofdstuk 1 Programmmeertalen wordt Python niet genoemd, maar Python staat op dit moment op de vierde plaats van de meest gevraagde programmeertalen en stijgt nog steeds. Bovendien is Python de beste programmeertaal om te leren programmeren.

Op het Mathematisch Centrum in Amsterdam was men reeds in de jaren 50 van de vorige eeuw bezig met het bedenken van programmeertalen. In het begin ging het over Algol en in de jaren 70 over ABC. ABC was bedacht als programmeertaal voor beginners. Vanaf 1989 onstond Python van Guido van Rossum. Daarna werden Python en van Rossum wereldberoemd.

Uiteraard kan je in Python ook in OO-stijl programmeren. De Turtle is helemaal zo geprogrammeerd. Die code hoef je dus niet zelf te maken, want die is reeds door een andere programmeur gemaakt. Je maakt een Turtle-object aan en dan heb je de beschikking over allerlei attributen en methodes van de Turtle. Je kunt de Turtle commando's geven door middel van Turtle-methodes. Je kunt de coördinaten, de richting, de kleur, enz. van de Turtle opvragen via Turtle-attributen. Je hoeft niet de code van de Turtle te begrijpen of in te zien, die is namelijk ingekapseld (encapsulation). In de documentatie staat beschreven hoe je het Turtle-object kunt gebruiken.

PSD's en Python

PSD's oftewel Nassi-Shneiderman diagrammen werden vroeger gebruikt om programma's op een eenvoudige manier te structureren. Tegenwoordig is het eenvoudiger om meteen een Python-programma te schrijven.

Hieronder zijn de voorbeelden uit hoofdstuk 2 PSD's maken vertaald in Python-programmatjes. De sequentie-, iteratie- en selectie-structuren van PSD's zijn rechtstreeks omgezet in Python-opdrachten met als grote voordeel dat je ze kunt testen (en misschien beter begrijpen). Dus start Python en test de voorbeelden!

2.2 Sequentie

In dit voorbeeld is een onderdeel uitgewerkt in de Python-functie vuurAansteken. De aanroep van vuurAansteken is de eerste opdracht in de sequentie. De andere opdrachten zijn niet verder uitgewerkt. Ze worden gewoon één voor één uitgevoerd. Test dit voorbeeld zelf. Maak nog uitwerking voor vuurUitdoen met "draai het gas dicht".

# gedetailleerde uitwerking van vuur aansteken

def vuurAansteken():
    print("--- begin vuur aansteken ---")
    print("pak doosje lucifers")
    print("haal een lucifer uit doosje")
    print("strijk lucifer langs zijkant")
    print("draai het gas open")
    print("houd brandende lucifer bij gas")
    print("blaas lucifer uit")
    print("--- einde vuur aansteken ---")


# bij 2.2 Sequentie voorbeeld ei bakken

vuurAansteken()
print("pan op het vuur zetten")
print("een halve eetlepel boter in de pan doen") 
print("boter laten smelten") 
print("ei breken en in de pan doen")
print("ei gedurende drie minuten bakken") 
print("vuur uitdoen")
      

2.3 Iteratie

# bij 2.3 Iteratie voorbeeld ei bakken met controle vooraf

print("vuur aansteken")
print("pan op het vuur zetten")
aantalGebakkenEieren = 0
while aantalGebakkenEieren < 3:
    print(aantalGebakkenEieren)
    print("een halve eetlepel boter in de pan doen") 
    print("boter laten smelten") 
    print("ei breken en in de pan doen")
    print("ei gedurende drie minuten bakken")
    print("ei op bord leggen")
    aantalGebakkenEieren += 1
print("vuur uitdoen")
      

In deze voorbeelden wordt de code na de dubbele punt van while precies drie keer herhaald (iteratie). Met behulp van de variabele aantalGebakkenEieren wordt dat bijgehouden. In het eerste voorbeeld wordt dat vooraf getest bij while.

Omdat in het tweede voorbeeld bij while niets wordt getest, wordt de code na de dubbele punt in principe oneindig keer herhaald. Maar de break onderbreekt de iteratie. Dat wordt achteraf in de iteratie getest.

Merk op dat het inspringen van de code in Python typografisch lijkt op iteratie van de PSD.

# bij 2.3 Iteratie voorbeeld ei bakken met controle achteraf

print("vuur aansteken")
print("pan op het vuur zetten")
aantalGebakkenEieren = 0
while True:
    print(aantalGebakkenEieren)
    print("een halve eetlepel boter in de pan doen") 
    print("boter laten smelten") 
    print("ei breken en in de pan doen")
    print("ei gedurende drie minuten bakken")
    print("ei op bord leggen")
    aantalGebakkenEieren += 1
    if aantalGebakkenEieren >= 3:
        break
print("vuur uitdoen")
      

2.4 Selectie

Deze PSD bestaat uit precies twee regels in Python. In het programma staat het vuur al aan. Je moet de variabele isHetVuurUit op True zetten om het vuur aansteken te testen. Probeer dit om te zien hoe dat werkt.

Het tweede gedeelte van dit programma is weer de iteratie om drie eieren te bakken, maar dit keer met for in plaats van while. Op deze manier zijn minder regels nodig.

# het vuur staat al aan!

isHetVuurUit = False

# bij 2.4 Selectie voorbeeld ei bakken

if isHetVuurUit:
    print("vuur aansteken")

print("pan op het vuur zetten")
for aantalGebakkenEieren in range(3):
    print(aantalGebakkenEieren)
    print("een halve eetlepel boter in de pan doen") 
    print("boter laten smelten") 
    print("ei breken en in de pan doen")
    print("ei gedurende drie minuten bakken")
    print("ei op bord leggen")
print("vuur uitdoen")
      
# bij 2.4 Selectie voorbeeld toegangsprijs

print("toets leeftijd in: ", end="")
leeftijd = int(input())
    
if leeftijd < 12:
    toegang = 5
elif leeftijd >= 60:
    toegang = 5
else:
    toegang = 10
print("toegangsprijs is "+str(toegang)+" euro")
      

2.6 Het nalopen van een PSD

In dit PSD staan: een sequentie van twee opdrachten, een iteratie en een selectie.

# bij 2.6 Het nalopen van een PSD

print("Dit bestand bestaat al.")
print("Toch onder deze naam opslaan? (J/N)")

while True:
    print("wacht op toetsindruk: ", end="")
    toets = input()
    if toets == "J" or toets == "N":
        break
    
if toets == "J":
    print("sla het bestand op")
      

Een simpel versiebeheersysteem voor Python

Iedere programmeur die software ontwikkelt, zou een versiebeheersysteem kunnen gebruiken. Dat is vooral het geval als je met meer programmeurs aan dezelfde software werkt. Maar dit geldt ook voor iemand die als enige programmeur een programma schrijft om een stadsgezicht te tekenen.

Een simpel versiebeheersysteem werkt als volgt:

Met verschillende versies kan je altijd teruggaan naar een vorige versie als er iets fout gaat. Verder is het nuttig om te documenteren (in commentaar of in een apart bestand) wat het verschil is tussen de verschillende versies. Professionele programmeurs combineren hun planning met verschillende versies. In elke versie maken ze iets nieuws en vermelden ze wat aan het programma is toegevoegd. Eventueel kan je verschillende probeersels in subversies vastleggen.

In de praktijk van professionele softwareontwikkeling is de behoefte ontstaan om steeds meer versies en subversies van programmas, modules, voor verschillende klanten en andere toepassingen te administreren en natuurlijk automatisch. Zo onstonden vanuit een simpel versiebeheersyteem, zoals hierboven beschreven, geautomatiseerd versiebeheersystemen.

Een echt versiebeheersysteem: GitHub

Uitleg over GitHub met Hello World

Demonstratie GitHub met Python Turtle van R. Koortens