programmeren H7 Object oriented programming.pdf
Document Details
Uploaded by FaultlessDidgeridoo
Tags
Full Transcript
PROGRAMMEREN THEORIE H7: OBJECT ORIENTED PROGRAMMING (OOP) PRINCIPES O.O.P. § Encapsulation: je hoeft niet te weten hoe iets geprogrammeerd is, alleen weten hoe objecten gebruikt worden. § Modulatrity: klassen zijn apart gedefinieerde dingen die kunnen hergebruikt worden. zoals de “math” module §...
PROGRAMMEREN THEORIE H7: OBJECT ORIENTED PROGRAMMING (OOP) PRINCIPES O.O.P. § Encapsulation: je hoeft niet te weten hoe iets geprogrammeerd is, alleen weten hoe objecten gebruikt worden. § Modulatrity: klassen zijn apart gedefinieerde dingen die kunnen hergebruikt worden. zoals de “math” module § Inheritance: laat het toe om onderdelen van klassen met andere klassen te delen. (zie later) § Polymorphism: laat toe om objecten te laten reageren afhankelijk van de beschreven methode in de klasse waartoe dit object behoort. 2 OBJECTEN VS KLASSEN § Een klasse is de definitie van een object § Een object is een instantie van een klasse die eerst dient aangemaakt te worden alvorens je die kan gebruiken 3 WAT BEVAT EEN KLASSE § Private of publieke gegevens (variabelen) die informatie over een object bevatten § Een constructor-methode die bij het creëren van een object wordt aangeroepen. Hier kan je ook alles initialiseren § Publieke methoden die door de gebruiker van het object kunnen worden aangeroepen § Properties die het toelaten om de private variabelen van een object te bevragen (get) of te wijzigen (set) § Private methoden die alleen binnen het object kunnen gebruikt worden 4 EEN VOORBEELD IN PYTHON txt = ‘montypython’ monthypython is dan de variabele waarde voor het object txt behorende tot de klasse string. Je kan gebruik maken van alle methoden die gedefinieerd zijn voor een string (bv: txt.upper(), txt.strip (), txt.replace (‘o’, ‘a’) … 5 OVERERVING Overerving wordt gebruikt om stukken van klassen te gebruiken uit andere reeds bestaande programmadelen. (Klasse) Een klasse kan van meerdere gedefinieerde klassen erven. 6 SUBKLASSE VS SUPERKLASSE § Een superklasse is een klasse die boven de nieuwe klasse is gedefinieerd. Objecten uit de subklasse kunnen erven van een superklasse § Een subklasse is een klasse die erft van een superklasse 7 CLASSIFICATIE Aan de hand van overerving worden objecten onderling gerangschikt. Dit resulteerde in een classificatie van de gedefinieerde klassen 8 HORIZONTALE VS VERTICALE CLASSIFICATIE Dieren Europa Azie Zoogdieren insecten vogels 9 METHOD Een methode is eigenlijk een functie (procedure) die beschrijft hoe een object iets zal doen. Het is dus een functie (procedure) die gedefinieerd is in een klasse en dus gebonden is aan alle objecten (instanties) van deze klasse. 10 EVENT Een event is iets wat gebeurt tijdens het programma (bv de klik met een muis op een knop). C# zal deze naar de bijbehorende event-handler-methode sturen, gesteld dat er zo een methode is voorzien (via bijvoorbeeld overerving). Normaal gesproken roepen we deze methode zelf nooit aan. 11 TOEGANKELIJKHEID VAN VARIABELEN, METHODS EN PROPERTIES § Public : toegankelijk vanuit elke klasse § Private : alleen toegankelijk vanuit de klasse waarin de methode, property of variabele gedefinieerd is § Protected : toegankelijk vanuit de klasse waarin de property, methode of variabele gedefinieerd is en vanuit elke sub-klasse hiervan. 12 PYTHON’S PHILISOPHY ON PRIVATE ATTRIBUTEN EN METHODEN “We are all adults here” Dit betekent dat alle methoden en attributen publiek zijn. Code convention : Als een methode of attribuut begint met “_ _” dan is die bedoeld als private. 13 OVERLOADING IN C# private void swap (ref int a, ref int b) { int aCopy; aCopy = a; a = b; b = aCopy; } private void swap (ref double a, ref double b) { double aSafe = a ; double bSafe = b ; a = bSafe ; b = aSafe ; } 14 OVERLOADING IN C# int c = 3 ; int d = 4 ; double g = 1.2 ; double h = 4.3 ; swap (ref c, ref d) ; swap (ref g, ref h); De omgeving waarin de swap functie wordt opgeroepen is bepalend welke functie er zal worden uitgevoerd. Aangezien c en d integers zijn zal c# de integer versie kiezen wanneer je die oproept met c en d, de double wordt opgeroepen indien je de functie aanroept met g en h. 15 OVERLOADING EN PYTHON Vorige vormen van overloading zijn eigen aan O.O.P. Door gebruik te maken van duck typing in Python, wordt dit type van overloading onmogelijk. Python maakt echter ook gebruik van een vorm van overloading namelijk : operator overloading 16 OPERATOR OVERLOADING de plus operator is een voorbeeld van een overloaded method. “Hello” + “world” is “helloworld” 3 + 5 is 8 Zo zou je ook voor een zelfgemaakte klasse een operator + kunnen definiëren. Daarvoor gebruik je de methodenaam _ _ add _ _ Voorbeeld (3, 2i) + (4, i) is (7, 3i) Naast de plus kunnen andere methoden makkelijk overloaded worden. Deze ‘speciale’ methoden vind je terug in volgende tabel. 17 ! collection operators, such as [ ], len ! general class operators, such as methods for printing, construction, etc. SPECIALE METHODEN IN PYTHON Table 12.1 lists some of the more commonly overloaded operators.2 Expression x+y x−y x*y x/y x == y x>y x >= y x<y x <= y x != y len(x) x in y x[key] x[key]=y x=myClass() print (x), str(x) Math-like Operators Method name Description add () Addition sub () Subtraction mul () Multiplication div () Division eq () Equality gt () Greater Than ge () Greater Than or Equal lt () Less Than le () Less Than or Equal ne () Not Equal Sequence Operators len () length of the sequence contains () does the sequence y contain x getitem () access element key of sequence x setitem () set element key of sequence x to value y General Class Operations init () constructor str () convert to a readable string repr () print a representation of x del () finalizer, called when x is garbage collected TABLE 12.1 Python special method names. 18 OVERRIDING Je kan een functie overschrijven. Dit doe je wanneer een functie erft van een superklasse, maar je wil dat de functie binnen de subklasse anders geïmplementeerd wordt. 19 EEN VOORBEELD IN PYTHON class Human: def get_brain_status(self): return 'Has internet' def sleep(self): return 'zzzz' class Student(Human): def get_brain_status(self): return 'Has to study' class Teacher(Human): def get_brain_status(self): return 'Knows all' student1 = Student() print(student1.sleep()) print(student1.get_brain_status()) >>> zzzz Has to study 20 THEORIE: Len Lemeire Hoofdlector EB24 Henleykaai 84, 4G08 [email protected] PRAKTIJK : Els Clarysse : [email protected] Ghent University @ugent Ghent University