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

ProcedureelObject georienteerd
Data en functies liggen los van elkaarData en functies horen bij elkaar
Functies dragen waardes overObjecten roepen elkaar aan

Kenmerken

Drie kenmerken van object orientatie:

  1. Encapsulatie
  2. Inheritance
  3. Polymorfisme

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

PatternVoorbeeldBetekenis
Een underscore vooraf_ varIndicatie dat het de bedoeling is deze alleen intern te gebruiken
Een underscore aan het eindvar_Gebruikt om conflicten met gereservereerde sleutelwoorden te voorkomen
Dubbele underscore vooraf_ _ varZorgt 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