/srv/irclogs.ubuntu.com/2011/03/19/#ubuntu-nl-mwanzo-klas.txt

FOADZo.14:24
leoquant  17:46
commandolineWelkom allemaal, het is 19:30, dus laten we beginnen.18:30
commandolinelaten we beginnen met het huiswerk van vorige keer bespreken, voordat we in een nieuw onderwerp duiken18:30
commandolineen daarvoor mag ik FOAD vandaag uitnodigen :)18:31
FOADDank u, dank u.18:31
FOADIk heb mijn poging op http://paste.ubuntu.com/582571/ geplaatst.  Vergeef me de idiosyncratische tekst maar.18:31
FOADEigenlijk gebeurt er niet zoveel, het programma doet letterlijk wat de opdracht vraag.  Ik was wel zo eigenwijs om het ding zichzelf niet te laten uitvoeren.18:32
FOADEn.. um.  Klopt het?18:32
commandolinemooi gebruik gemaakt van os.path18:32
commandolinemaar laat ik nog even een linkje geven naar het iets simpelere voorbeeld dat wij hebben gemaakt18:33
commandolineFOAD, wil jij ondertussen deze regel even wat uitgebreider uitleggen?18:33
DooitzedeJongKun je uitleggen wat er gebeurt bij de oplossing van FOAD18:33
DooitzedeJongFOAD?18:33
commandoline    if os.path.splitext( file )[ 1 ] == ".py" and os.path.realpath( sys.argv[ 0 ] ) != os.path.realpath( file ):18:33
DooitzedeJongcommandoline was mij voor18:33
FOADNatuurlijk.18:33
DooitzedeJongBedankt18:34
commandolinehttp://paste.ubuntu.com/579221/, ondertussen18:34
FOADDe if controleert 2 dingen: 1) of de extensie van het bestand "file" gelijk is aan py (dus, dat het (waarschijnlijk) een python bestand is.18:34
FOADMaar 2) ook of het bestand naar waar wordt gekeken niet toevallig het programma zelf is.  De naam van het programma zelf vind je via sys.argv[ 0 ].18:35
FOADIk gebruik realpath om zeker te weten dat hij absolute paden vergelijkt.  Ik weet eigenlijk niet zeker of het nodig is, maar ik denk het wel.18:35
FOADMoet ik dat nog verder toelichten?18:35
commandolineDooitzedeJong> Wat betekent die !=18:35
commandolineDooitzedeJong> niet gelijk aan?18:36
FOADDe reden dat ik dit doe is dat het programma niet zichzelf gaat aanroepen, want dan kan het zo lang gaan duren.18:36
commandoline<StefandeVries> Inderdaad, DooitzedeJong18:36
FOAD!- betekent "niet gelijk aan".18:36
commandolineok, bedankt voor de uitleg, FOAD. Heeft iemand idd nog vragen?18:36
FOADEh, !=18:36
commandolineok, dan gaan we verder18:37
commandolineoh, nog een vraag18:37
commandoline<DooitzedeJong> Wat moet je invullen..18:37
commandoline<DooitzedeJong> bij dir?18:37
StefandeVriesDooitzedeJong: de directory die je wilt scannen18:37
FOADIk besef me wel dat + "/" + een beetje os-afhankelijk is.18:37
StefandeVriesDooitzedeJong: bijvoorbeeld ja18:37
StefandeVriesAlle .py bestanden in die dir zullen dan worden uitgevoerd18:38
commandoline<DooitzedeJong> bijvoorbeeld /home ?18:38
StefandeVries^18:38
StefandeVriesAl beantwoord ;)18:38
commandolineOK, ik wil jullie vandaag wat leren over een andere manier van programma's ontwerpen18:39
commandolinetot nu toe hebben jullie procedureel geprogrammeerd18:39
commandolineje kunt met die manier van programmeren alles maken wat je ook kan met de methode die we vandaag gaan bespreken, maar daar wordt het niet altijd duidelijker op.18:40
StefandeVriesDooitzedeJong: al je programma's werden regel voor regel afgewerkt.18:40
commandoline* altijd duidelijker van18:40
commandoline<DooitzedeJong> |Wat houdt dat in|18:41
commandoline<DooitzedeJong> ?18:41
commandoline<DooitzedeJong> van 1 tot 10 het proces afhandelen?18:41
commandolinewas de vraag18:41
DooitzedeJongDie is beantwoord18:41
DooitzedeJongGa verder18:41
commandolineho, hier wat verwarring, ok, verder18:42
commandolinede methode die we gaan bespreken heet in het Engels 'Object Oriented Programming', kortweg OOP18:42
commandolinede Nederlandse vertaling daarvan is Objectgeoriënteerd programmeren18:44
commandolinedeze manier van programmeren is dus gewoon een andere manier om tegen het probleem dat je programma moet oplossen aan te kijken18:45
commandolineVoordat ik ga uitleggen hoe we die manier van programmeren toepassen in Python, wil ik jullie eerst proberen duidelijk te maken wat het hele concept inhoudt.18:46
commandolinewant pas als je dat begrijpt, kan je het toepassen in de praktijk18:46
commandolineOK, zoals het woord al zegt, gaat objectgeoriënteerd programmeren over objecten18:47
commandolinede eerste vraag om te stellen is dus: wat is een object?18:47
commandolineobjecten zoals je die gebruikt bij programmeren, lijken best sterk op objecten die je in de praktijk ziet18:48
commandolineLaten we eens een voorbeeld nemen18:49
commandolineBijvoorbeeld een fiets18:50
commandolineeen object zoals je dat gebruikt bij OOP, heeft twee kenmerken:18:50
commandoline- het object bevat handelingen (de zogenaamde methods)18:51
commandoline- het object bevat eigenschappen (de zogenaamde properties in het Engels)18:51
commandolineHet is ook mogelijk om die manier van kijken toe te passen op een object uit de praktijk, dus op het voorbeeld van de fiets.18:51
commandolineeen fiets heeft handelingen:18:51
commandoline- versnelling veranderen18:52
commandoline- remmen18:52
commandoline- versnellen18:52
StefandeVrieshannie: ja dus ;)18:52
commandolineook heeft een fiets eigenschappen:18:52
commandolinebijv. de huidige versnelling, en de huidige snelheid18:53
commandolinehet komt dus vaak voor, dat de handelingen die de fiets heeft de eigenschappen van de fiets veranderen.18:53
commandolineje kan zo'n manier van kijken naar objecten op allerlei dingen die je ziet toepassen18:53
commandolineis dit ongeveer duidelijk? Kunnen jullie je er wat bij voorstellen?18:54
commandolinehmm, ik heb nog niet iedereen overtuigd18:55
commandolinenog een voorbeeldje dan:18:55
commandolineoh, het gaat alleen om toepassen in een programma, dan ga ik toch door18:55
StefandeVriesFOAD: daarom is dit nog conceptuele uitleg, en geen Pythontoepassing18:55
commandolinejullie hebben namelijk al objecten gebruikt18:55
commandolineeentje die jullie je allemaal zullen herinneren, is de list18:56
commandolinede list is een object18:56
commandolineten eerste heeft het methods, we hebben nl. het volgende gedaan:18:56
commandolinelist = [1, 2, 3]18:56
commandolinelist.append(4)18:56
commandolineappend is een method, een handeling, van list18:56
commandolinelist heeft ook eigenschappen/properties, maar die kunnen we niet direct zien in dit geval.18:57
commandolineen list is nog maar één object18:58
commandoline<FOAD> Is het aantal elementen niet een property van list?18:58
StefandeVriesFOAD: nee, het is een enkel een property van die specifieke list18:58
Ronnie DooitzedeJong: dus bijvoorbeeld adresboek is ook een object?18:59
Ronniehet adresboek dat jullie gemaakt hebben nog niet, maar er is wel gemakkelijk een object met handelnigen van te maken18:59
Ronniebijvoorbeeld de handeling (voeg adres toe)18:59
commandolinehmm, laat ik nog even wat dingen toevoegen over de twee vragen:19:00
Ronnieof verwijder adres, zoek adres etc19:00
commandolineFOAD, het aantal elementen van een lijst is eigenlijk geen property, omdat ze d.m.v. de len()-method worden verkregen. Intern gaat dat via een method, voor de geïnteresseerden.19:00
commandolineover het adresboek, wij hebben voor het adresboek een dictionary gebruikt19:01
commandolineen een dictionary is een object.19:01
commandolinehet is alleen geen Adresboek-object, wat, zoals Ronnie al zei, bijv. een method voeg_adres_toe zou hebben19:02
commandolineeigenlijk is vrijwel alles in python een object, hoewel je dat niet meteen ziet.19:02
commandolineints, floats, strings, functies, dictionaries, lists, etc. zijn allemaal objects19:03
commandoline'Everything is an object'19:03
commandolinewordt dan ook wel eens over python gezegd.19:03
commandoline<DooitzedeJong> Kun je concreet een voorbeeld van een method geven?19:03
commandolinebij een list dus 'append'19:03
commandolinebij een string bijv. 'endswith'19:03
commandolineen bij een dictionary bijv. 'keys'19:03
commandoline<hannie> waarom noem je len() een method? het is toch een functie. Zijn alle functies dan methods?19:04
commandolineals ik dat inderdaad heb gedaan, is dat fout19:04
commandolinelen() is een functie19:04
commandolinemaar wat ik dacht ik zei is dat het intern een method aanroept19:04
commandolinemaar die onmerking maakt het geheel nu complexer, dus vergeet dat maar ;)19:05
commandolineok, ik hoor iedereen vragen om codevoorbeelden, dus ik zal jullie er een aantal geven.19:05
commandolineten eerste toch nog even als herhaling: http://paste.ubuntu.com/582591/19:06
commandolineje ziet 2 dingen:19:07
commandoline- een object kan meerdere keren aangemaakt worden19:07
commandoline- een object kan worden aangepast door het aanroepen van een handeling (method)19:07
commandolineis dat duidelijk?19:08
commandolinegoed, dan het tweede voorbeeld:19:09
commandolinehttp://paste.ubuntu.com/582592/19:09
commandolineje ziet hier een nieuwe constructie19:09
commandolinede zogenaamde class19:09
commandoline<hannie> Wordt het eigenlijk een variabele?19:09
commandolinein dat voorbeeld werden lists opgeslagen  ín een variabele19:09
commandolinehet eerste wat jullie moeten weten is wat een class is:19:09
commandolinehet is het ontwerp/de blauwdruk van een object19:10
commandolinezoals we ook al bij list zagen, is het mogelijk om meerdere lists aan te maken19:10
commandolinein het tweede voorbeeld, wordt een nieuwe class gedefinieerd:19:10
commandolineAdresboek19:10
commandolineen daardoor wordt het mogelijk om meerdere adresboeken te maken.19:11
commandolinevoordat ik de code regel voor regel ga uitleggen, wil ik eerst even stilstaan bij hoe het mogelijk is om deze class te gebruiken:19:11
commandoline- ten eerste is het nodig om een object te maken, net zoals in voorbeeld één.19:11
commandolinein dat geval ging het om deze regel:19:12
commandolinelist1 = []19:12
commandolinein dit geval gaat dat zo:19:12
commandolineadresboek1 = Adresboek()19:12
commandolineoverigens wordt de overeenkomst misschien duidelijker, als je weet dat je het eerste geval ook zo kan schrijven:19:12
commandolinelist1 = list()19:12
commandolineHet lijkt een functieaanroep, maar wat het in werkelijkheid is, is het maken van een object op basis van de eisen van de class.19:13
commandolinehet is nu mogelijk om methods (handelingen) van het object adresboek1 aan te roepen:19:14
commandolineadresboek1.voeg_toe("commandoline", "mail@adres-zeg-ik.niet")19:14
commandolineals ik daarna mijn mailadres weer wil verwijderen, kan dat zo:19:15
commandolineadresboek1.verwijder("commandoline")19:15
commandolinehet voordeel hiervan bovenop dat van een dictionary is klein in dit geval19:16
Ronniehannie: horen [] en {} ook tot de eigenschappen?19:16
commandolinemaar als dit object zou moeten controleren of het adresboek geldig was, dan zou het al veel schelen.19:16
commandolinehannie, ik kom er straks even op terug, als ik vertel wat de eigenschappen hier zijn19:17
commandolinehet voordeel van een object gebruiken is dus, dat je niet precies hoeft te weten wat er onder de motorkap gebeurt19:17
commandolineen opnieuw ook hergebruik, net zoals bij functies19:18
commandolineGoed, dat over het gebruik van deze class19:18
Ronnie Cugel_laptop: Is def __init__  een verplicht onderdeel van een classdefinitie?19:18
commandolinenu even verder over hoe de class zelf is opgebouwd19:18
Ronnienee, dat is niet perse nodig19:18
Ronnieuitleg hierover komt nog19:19
commandolineop lijn 1 zien jullie de declaratie van de class19:19
commandolinehet lijkt wel wat op het definieren van een functie19:19
commandolinein dit geval krijgt de class de naam 'Adresboek'19:19
commandolineen het laatste stukje, (object), mag je voorlopig aannemen als een verplicht iets19:20
commandoline<hannie> zijn dat twee underscores?19:20
commandoline__init__ bevat idd vier underscores19:20
commandolinetwee aan beide kanten19:20
commandolinezodra dat is gebeurd, begint de classdefinitie19:20
commandolinewe zien daarin functies, zoals we die al eerder hebben gezien19:21
commandolineik begin niet met de eerste, maar met de tweede:19:21
commandolinevoeg_toe19:21
commandolinedat is een hele normale functie, op één ding na.19:21
commandolinehet eerste argument is 'self'19:21
commandolineen jullie hebben zonet gezien, dat we dat argument niet meegeven, we deden immers:19:21
commandolineadresboek1 = Adresboek()19:21
commandolineadresboek1.voeg_toe("commandoline", "mijn_mail@adres.nl")19:22
commandolinedat eerste argument wordt gevuld door python19:22
commandolinepython geeft dan het object mee, waarop de method (de handeling) wordt aangeroepen19:22
commandolinedus eigenlijk is het gelijk aan dit, als dat het iets duidelijker maakt:19:22
commandolineAdresboek.voeg_toe(adresboek1, "commandoline", "mijn_mail@adres.nl")19:23
commandolinedat geeft de method dus de mogelijkheid, om iets te veranderen aan het object zelf19:23
commandolinein dit geval wordt de eigenschap 'adressen' verandert.19:24
commandolineDat is een dictionary, en er wordt een adres aan toegevoegd19:24
commandolineverwijder doet iets soortgelijks19:24
commandoline__init__ is nog wel bijzonder19:24
commandolinedie method wordt aangeroepen door python tijdens het maken van het object19:24
commandolinedus, bij deze regel code:19:24
commandolineadresboek1 = Adresboek()19:24
commandolinewat die method doet, is niks anders dan het toevoegen van de eigenschap 'adressen' aan het object19:25
commandolinegoed, nog vragen?19:25
commandolinedit is een ingewikkeld onderwerp, we gaan er iig de komende en waarschijnlijk ook nog de daaropvolgende les ermee verder19:26
commandoline<hannie> self, is dat een bewaarplaats waar later iets in komt?19:26
commandolinedat argument wordt dus ingevuld door python, als je een method aanroept19:26
commandolinehet is altijd het huidige object19:26
commandolinebijv:19:26
commandolineadresboek1 = Adresboek()19:26
commandolineadresboek2 = Adresboek()19:27
commandolineadresboek1.voeg_toe("naam", "mailadres")19:27
commandolineadresboek2.voeg_toe("naam", "mailadres")19:27
commandolinewat er eigenlijk gebeurd bij het aanroepen van de method19:27
commandolineis in beide gevallen anders19:27
commandolineterwijl het hetzelfde lijkt19:28
commandolinewant achter de schermen gebeurt:19:28
commandolineAdresboek.voeg_toe(adresboek1, "naam", "mailadres")19:28
commandolineAdresboek.voeg_toe(adresboek2, "naam", "mailadres")19:28
commandoline<hannie> en adresboek1, 2 enz. gebruik je later in een programma?19:28
commandolineinderdaad, het is in het adresboekprogramma dus opeens mogelijk om voor meerdere personen een adresboek te maken19:28
commandolinezonder een regel te veranderen aan de class Adresboek19:29
commandolineopnieuw een voordeel van classes :)19:29
commandolineok, het huiswerk:19:29
commandolinemaak een programma dat niks anders doet dan methods van Adresboek aanroepen19:30
commandolinemaak daarbij adresboeken aan voor meerdere personen.19:30
commandolineprobeer ook uit wat de laatste twee methods doen19:31
commandolineprobeer dus gewoon een echte situatie na te bootsen19:31
commandolinede echte handelingen die normaal op een Adresboek losgelaten zouden worden19:31
commandolinebegrijpt iedereen dat?19:31
commandolineten slotte nog even een verbeterd linkje, deze class werkt nl. niet ;)19:32
commandolineer is eigenlijk altijd wel hulp in #ubuntu-nl-mwanzo19:32
commandolinehttp://paste.ubuntu.com/582607/19:33
commandolineprobeer gewoon objects te maken van deze class dus en ze te gebruiken, dat is kortweg de opdracht19:34
commandolinesucces ermee en bedankt voor jullie komst!19:34
FOADDank je wel commandoline en support!19:34
commandolineik ben hier nog even voor vragen19:34
FOADIk vond het erg leuk om mijn oplossing te presenteren.19:35
commandolinebedankt voor de complimenten allemaal :)19:35
hanniecommandoline, en anderen, prettige avond nog19:46
commandolinejij ook, hannie19:46
commandolinelet op allemaal: de les gaat volgende week niet door19:51
commandolinei.v.m. dat ik wat anders heb19:51
Cugel_laptopJammer.19:52
=== ChanServ changed the topic of #Ubuntu-nl-mwanzo-klas to: 22 maart 2011 19.30-20.30 workshop werken met de wiki : #Ubuntu-nl-mwanzo-klas. Info: http://wiki.ubuntu-nl.org/community/mwanzo/Workshop/WikiInleiding Leiding: Rawchid. Logs op http://irclogs.ubuntu.com. Let ook op eventueel andere workshops. Alle cursisten join ook: #ubuntu-nl-mwanzo, daar kun je vragen stellen aan de workshopleiders.
FOADWat.19:56
FOAD:(19:56
leoquantFOAD,?19:56
FOADIk wil Python.19:56
leoquantdi 22 mrt is er weer wat anders19:57
FOADOh leuk, daar ga ik ook aan meedoen.19:57
leoquantpython komt waarschijnlijk een week later weer. de topics worden vrij direct bijgewerkt hier19:57
commandolineleoquant, python kómt een week daarna weer.19:58
leoquantjuist! ツ19:58
leoquantdeo volente19:59
Cugel_laptopWat komt er dan volgende week.20:00
commandolineeen workshop 'Werken met de wiki' door RawChid. :)20:01
DooitzedeJongWat gaat RawChid ons dan vertellen20:02
DooitzedeJong?20:03
commandolinehttp://wiki.ubuntu-nl.org/community/mwanzo/Workshop/WikiInleiding20:03
DooitzedeJongDom dat ik daar niet aan dacht, ben net de wiki aan het aanpassen :P20:04
DooitzedeJongik ga20:42
DooitzedeJongUndiFineD, we bespreken het nog wel even20:43
DooitzedeJongdoeg20:43
DooitzedeJongoops verkeerde kanaal20:43
UndiFineDok20:43

Generated by irclog2html.py 2.7 by Marius Gedminas - find it at mg.pov.lt!