2. Objectegoriënteerd werken en de SOLID-principes Flashcards

1
Q

Wat zijn de SOLID-principes?

A

De SOLID-principes zijn een poging om een aantal basisprincipes voor goed objectgeoriënteerd ontwerp samen te brengen in een letterwoord dat in het geheugen blijft hangen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Wat zijn de kenmerken van een object?

A

Een object heeft een:
+ identiteit (uniek).
+ toestand (attributen).
+ gedrag (methodes).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Wat is het doel van object-georiënteerd programmeren?

A

Object-oriëntering is ontstaan uit een nood aan onderhoudsvriendelijker en gemakkelijker te hergebruiken software.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Wat zijn de basisideeën van object-georiënteerd programmeren?

A

+ modulariteit
+ encapsulering
+ overerving
+ polymorfisme

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Wat is modulariteit?

A

Ieder object is als het ware een bouwsteen. Een stuk software wordt opgebouwd uit die bouwstenen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Wat zijn de voordelen van modulariteit?

A

Goed passende bouwstenen geven een stuk software een overzichtelijke structuur.
Goede bouwstenen zijn uitwisselbaar.
Die twee zaken maken software gemakkelijker te begrijpen en te onderhouden.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Wat is encapsulering?

A

Een goed object heeft een zichtbaar en verborgen deel.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Hoe wordt het zichtbare deel van een object genoemd?

A

interface

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Wat is overerving?

A

Het is mogelijk een object af te leiden van een ander object.
Dat wil zeggen dat het afgeleide object de functionaliteit van het andere object overneemt, uitbreidt, of specialiseert.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Wat is polymorfisme?

A

Objecten met en gelijkaardige interface kunnen elkaars plaats innemen.
Hierdoor hoeft een object dat een functionaliteit nodig heeft van een ander object niet te weten welk concreet object dat is, zolang de functionaliteit er maar is.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Wat is het voordeel van polymorfisme?

A

Als programmeur moeten we niet vooraf zeggen welke concrete objecten welke taken zullen uitvoeren (early binding). We kunnen die keuze uitstellen tot het allerlaatste moment, namelijk de uitvoering van het programma (late binding).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Waarvoor staat het SOLID?

A
SOLID staat voor vijf principes:
\+ Single purpose
\+ Open/Closed
\+ Liskov substitution
\+ Interface segregation
\+ Dependency inversion
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Wat is het single purpose principle?

A

Elke klasse heeft 1 duidelijke verantwoordelijkheid.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Wat is het voordeel van het single purpose principle?

A

Als dit principe gevolgd wordt is het gemakkelijker om te begrijpen waar een klasse voor dient dan als een klasse die veel vage verantwoordelijkheden heeft.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Wat zijn aanwezingen dat een klasse het Single Purpose Principle volgt?

A

+ De klasse heeft een beperkte omvang.
+ De naam van de klasse maakt het doel duidelijk.
+ De klassen zijn gemakkelijk te ordenen in groepen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Wat zijn aanwijzingen dat een klasse het Single Purpose Principle niet volgt?

A

De klasse is:
+ erg groot.
+ zonder documentatie onbegrijpbaar.
+ maar voor 1 specifieke toepassing bruikbaar.

17
Q

Wat is het Open/Closed-principe?

A

Een goede klasse is zowel ‘open for extension’ en ‘closed for modification. Ze kan uitgebreid worden, maar haar gedrag kan niet gewijzigd worden.

18
Q

Waarom mag een klasse niet wijzigbaar zijn?

A

Een klasse wordt dikwijls op verschillende plaatsen gebruikt.
Het zou kunnen dat als je een klasse wijzigt op een plaats, dat die wijziging er voor zorgt dat de klasse niet meer goed werkt op de andere plaatsen.

19
Q

Hoe wordt het ‘Open/Closed-principe’ toegepast?

A

+ Functionaliteit wordt toegevoegd met nieuwe klassen, niet door het veranderen van bestaande klassen.
+ Er wordt overerving gebruikt.
+ Er worden interfaces gebruikt.

20
Q

Wat is het ‘Liskov substitutieprincipe’?

A

Een object moet altijd kunnen vervangen worden door een meer gespecialiseerd object, zonder dat het invloed heeft op de bestaande gebruikers van het object.
Als klasse A afgeleid afgeleid is van klasse B, dan kun je objecten van A overal gebruiken waar objecten van B bruikbaar zijn.

21
Q

Geef een voorbeeld van een geschonden ‘Liskov substitieprincipe’?

A

In Java heeft klasse String een methode length(). Het ‘contract’ van klasse String met zijn gebruikers is dat lenght() het aantal tekens in de string geeft. Je maakt nu een klasse MyString, afgeleid van String, met een override van length() die altijd -1 teruggeeft. MyString houdt zich dus niet aan het ‘contract’ van String, ook al kun je in principe in een programma een MyString gebruiken overal waar er een String staat.

22
Q

Wat is het ‘interface segregation’ principe?

A

Een object mag niet afhankelijk zijn van methodes die het niet gebruikt.
Anders geformuleerd: een object mag enkel de methodes hebben die het echt nodig heeft.

23
Q

Wat zijn de gevolgen als je het ‘interface seggregation’ principe niet volgt?

A

Dan krijg je objecten met erg veel methodes. Die moeten allemaal correct werken, ook al gebruik je ze niet, want het zou kunnen dat jij of iemand anders die ooit toch eens zult gebruiken. Dergelijke objecten zijn dus lastiger te onderhouden dan objecten die het principe wel volgen.

24
Q

Wat is het ‘dependency inversion’ principe?

A

High-level modules mogen niet afhankelijk zijn van low-level modules, maar moeten afhankelijk zijn van abstracties.
Abstracties mogen niet van details afhankelijk zijn. Details moeten afhankelijk zijn van abstracties.

25
Q

Waarom is het ‘dependency inversion’ principe belangrijk?

A

Als de high-level modules afhankelijk zijn van low-level modules dan wil dat zeggen dat je die low-level modules niet zomaar kunt veranderen. Dat maakt de software moeilijker te onderhouden, want een verandering in een low-level module (een detail) kan dan de werking van de high-level modules verstoren.

26
Q

Met welk principe is het ‘dependency inversion’ principe verwant?

A

Het principe van lage koppeling; een high-level module die van low-level modules afhankelijk is heeft een hoge koppeling.