Object oriëntatie is een andere manier van programmeren Het benadert meer de werkelijkheid
- Met object oriëntatie creëer je objecten die afgeleid zijn van werkelijke objecten
- Zo bestaat een FASTA in een object georiënteerde programmeertaal uit een object header en sequentie
Voordelen aan Object Oriëntatie
- Is meer zoals de werkelijkheid
- Beter uitbreidbaar
- Beter hergebruik van code
- Gestructureerd
Procedureel vs object georiënteerd
| Procedureel | Object georienteerd |
|---|---|
| Data en functies liggen los van elkaar | Data en functies horen bij elkaar |
| Functies dragen waardes over | Objecten roepen elkaar aan |
Kenmerken
Drie kenmerken van object orientatie:
Encapsulatie
Encapsulatie voorkomt dat data benaderbaar is zodat onmogelijke waardes worden voorkomen
Encapsulatie is:
- Omgeven van data (variabelen) met functionaliteit (functies)
- De variabelen zijn alleen te veranderen via de functies
(dia 12 t/m 19)
Data hiding
Een variabele voorafgegaan door een dubbele underscore (_ _ voornaam) is een verborgen variabele en alleen toegankelijk via functies
Classes
Een class is een nabootsing van een object uit de realiteit
Een stuk data staat dan centraal en is omringt met methodes.
Een class wordt gebruikt op dezelfde manier als een geïmporteerde code
Instance variabelen (self)
Objecten (instances) hebben ieder hun eigen waardes
De eigen waardes noemen we instance variabelen en worden voorafgegaan door self
(zie FASTA voorbeelden)
Instances
Instances zijn de objecten met ieder hun eigen waardes
Constructor: _ _ init _ _ (self)
De init(self) functie is een bijzondere functie
- We noemen dit de constructor en deze wordt aangeroepen bij initialisatie van het object
In de _ _ init _ _ (self) functie kun je instance variabelen initialiseren
De _ _ init _ _ (self) methode kun je ook uitbreiden met extra parameters voor de initialisatie (aanmaak) van het object
Bij het maken van een instance wordt de _ _ init _ _ (self) functie aangeroepen
Voorbeeld:
Designing
Betekenis van underscores
| Pattern | Voorbeeld | Betekenis |
|---|---|---|
| Een underscore vooraf | _ var | Indicatie dat het de bedoeling is deze alleen intern te gebruiken |
| Een underscore aan het eind | var_ | Gebruikt om conflicten met gereservereerde sleutelwoorden te voorkomen |
| Dubbele underscore vooraf | _ _ var | Zorgt voor het verbergen van een variabele in een class |
| Aan weerszijde een dubbele underscore | _ _ var__ | Speciale interne methode in een class |
Dubbele underscore
Een dubbele underscore heet ook wel “dunder”
- Dunder snelheid: _ _ snelheid
- Dunder init: _ _ init__(self)
Inheritance
Een eiwit sequentie kan overerven van sequentie. Het heeft alle eigenschappen plus nog wat extra eigenschappen
Bij inheritance kun je altijd zeggen “is-een” dus een eiwit sequentie is een goede overerving van sequentie
(dia 41 t/m 43)
Polymorfisme
Letterlijk veelvormig gedrag
Het overschrijven van de standaard functies in de super-class. (Denk aan de setsequence van Protein. Deze overschrijft de setsequence van de class Sequence
Hier nog een voorbeeld..:
Polymorfisme is ook terug te vinden bij:
- 1 + 1
- ‘1’ + ‘1’
- [‘a’,‘b’,‘c’]+[‘x’,‘y’]
- De add + operator weet afhankelijk van de context wat te doen
Samenvatting
- Classes zijn de blauwdruk voor objecten (instances)
- Een class beschermd haar data met functies (encapsulatie)
- Een class kan overerven uit een andere class (inheritance)
Variabelen die voorafgegaan worden door een dubbele underscore zijn verborgen variabelen
Het sleutelwoord self refereert aan de instance (het object)
_ _ init__(self) → Constructor _ _ str__(self) → impliciete aanroep bij print