[oop] lege class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Front-end developer (React)

Functie Het frontend team bestaat momenteel uit 4 dedicated front-enders en is hard aan het groeien! Ook werken er diverse designers waar je veel mee schakelt. Samen leveren jullie een essentiële bijdrage aan de applicaties die ze voor hun klanten realiseren, jij bent hierin de schakel tussen de eindgebruiker en de slimme backend. Je werkt in het frontend team samen met de backend teams en product owners om te zorgen dat onze applicaties een fijne gebruikerservaring opleveren. Ze werken o.a. met: React, Atomic design, Styled components, JavaScript / TypeScript, NPM, Webpack Blade templates, HTML, SCSS, Git flow. Eisen • HBO

Bekijk vacature »

Medior .NET Ontwikkelaar

In het kort Als .NET ontwikkelaar ga je binnen onze business unit Transport en Logistiek aan de slag complexe maatwerk software voor bedrijf kritische systemen binnen de technische automatisering. Denk bijvoorbeeld een IoT-oplossing voor de logistieke sector waarbij we van ruim 200.000 machines de telemetrie en events verwerken. We zijn actief in de distributielogistiek, havenlogistiek en productielogistiek. Naast C# en .NET Core maken we ook gebruik van Azure technologie. En als trotse Microsoft Gold Partner leren we graag van en met jou. Wil jij jezelf blijven ontwikkelen binnen de technische automatisering met .NET, dan gaan we deze uitdaging graag met

Bekijk vacature »

Senior/Lead Python developer

Functie Samen met je team, bestaande uit een senior, 2 mediors en één junior ontwikkelaar ga je op een Agile-gebaseerde aanpak werken aan hun software. Je hebt oog voor kwaliteit, risico’s en klantbelang. Communicatie met je collega’s en waar nodig ook met klanten speelt een belangrijke rol in het bereiken van een succesvol resultaat. Als persoon ben je slim, krijg je dingen voor elkaar en ga je resultaatgericht te werk. Binnen het development team is er veel zelfstandigheid, los van de stand-up (10:00 uur) en zo nu en dan pair-programming sessies. Technieken die zij gebruiken zijn o.a. Python, Django, MySQL,

Bekijk vacature »

Typescript Developer / Cloud platform

Dit ga je doen (Door)Ontwikkelen van het cloud platform; (Door)Ontwikkelen van microservices; Bouwen van nieuwe functionaliteiten; Verbeteringen aandragen voor het cloud platform; Sparren met de business. Hier ga je werken Onze opdrachtgever, gevestigd in regio Eindhoven, levert een compleet dienstenpakket op het gebied van IT. Zij pakken verschillende (complexe) vraagstukken van grote organisaties op. De sfeer intern is gezellig en informeel. Men houdt van hard werken maar gezelligheid door middel van een borrel of gezamenlijke lunch komt er veel voor. Als Typescript ontwikkelaar word je onderdeel van het team gericht op de (door)ontwikkeling van hun eigen cloud platform welke wordt

Bekijk vacature »

C# ontwikkelaar

Functie omschrijving Werk jij graag met C# en het .NET framework in een leuk familiebedrijf? Lees dan snel verder! Jouw takenpakket hierbij is: Je gaat maatwerk software ontwikkelen en softwareoplossingen creëren. Je gaat werken in een Microsoft omgeving (ASP.NET) en gebruikt daarnaast C# en MVC. Samen met het huidige IT team binnen deze organisatie verwerk je de wensen van de klant tot een (eind)product. Daarnaast optimaliseer je de bestaande software. Bedrijfsprofiel Deze organisatie is gevestigd in de omgeving van Best en is een echt familiebedrijf. Je komt te werken in een klein team van developers, die zich voornamelijk bezighouden met

Bekijk vacature »

Back-end .NET Developer

Functie omschrijving C# / .NET Developer gezocht voor een dynamische organisatie in de regio Houten! Voor een leuke organisatie in de regio Houten zijn wij op zoek naar een Back-end developer die klaar is voor een nieuwe uitdaging. In deze functie werk jij aan verschillende projecten en ga je vaak bij klanten op bezoek. Binnen deze functie kun je een grote mate van uitdaging, diversiteit en verantwoordelijkheid treffen. Bedrijfsprofiel Waar ga je werken? Het bedrijf waar je gaat werken is gespecialiseerd in het ontwerpen en implementeren van procesautomatisering en procesinformatisering. Zij doen dit onder andere voor de (petro)chemie, pharma, infra,

Bekijk vacature »

Randstad B.V.- Freelance Senior Fullstack Develope

Startdatum: 01.05.2023 Richttarief: € 75,00 - €85,00 Duur van de opdracht: 1 jaar Uren per week: 40 Werkmodel: Hybride, dinsdag en donderdag aanwezig op kantoor in Diemen en meer wanneer dit nodig is. Functieomschrijving: De ideale kandidaat gaat onderdeel uitmaken van een junior team binnen het foundation domein. Vanuit het foundation domein werkt dit team samen met andere foundation teams en teams uit het online domein (professionals B2B en B2C) voor het bouwen en integreren van HRM functionaliteiten (verlof en benefits) in de persoonlijke portal van Interim Professionals. Er is meer backend werk dan frontend, maar kandidaat moet beiden leuk

Bekijk vacature »

Medior Java developer

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Software developer (Python)

Functie Je komt te werken in het IT-team bestaande uit de Lead developer en 4 (medior/senior) developers. Gezamenlijk werken jullie aan de verbetering en uitbreiding van de software. Binnen het development team is er veel vrijheid en zelfstandigheid, zonder dat ze hiermee afdoen aan de kwaliteit. Zo hebben ze elke ochtend een korte stand-up (10:00 uur) en houden ze zo nu en dan pair-programming sessies. Ook is er een hele professionele ontwikkelcyclus waarbij code altijd eerst door een collega wordt getest voordat het naar deployement gaat. Je hebt in je werk oog voor kwaliteit, risico’s en het klantbelang. Communicatie met

Bekijk vacature »

.Net ontwikkelaars voor de zorgsector

Bedrijfsomschrijving Voor onze klant in de omgeving van Zwolle zijn wij op zoek naar een ervaren .Net ontwikkelaar, bij voorkeur met ervaring binnen de belangrijkste sector van Nederland, namelijk: de zorgsector. Deze internationale organisatie ontwikkelt software voor de zorgsector. Er werken zo'n 25 medewerkers hard aan een oplossing die gebruikt wordt door heel Nederland. Er heerst een informele sfeer waarbij er altijd ruimte is voor een grapje. Je collega's zijn stuk voor stuk sterke ontwikkelaars vanuit verschillende achtergronden en met verschillende leeftijden. Je komt hier terecht in een organisatie die zich hard inzet om de zorgsector te verbeteren. De mogelijkheden

Bekijk vacature »

C# .Net Developer

Dit ga je doen Het bouwen van Api's; Nieuwe oplossingen bouwen met C# .Net; De huidige software uitbouwen met C# .Net; Meewerken in projecten; Meedenken aan de toekomstplannen en verbeteringen; Onderdeel van het Scrum Team. Hier ga je werken Onze klant is een dienstverlenende organisatie voor diverse soorten organisaties in Nederland. Ze zijn van oorsprong een familiebedrijf en er is een open cultuur. Ze zijn vooruitstrevend op IT gebied en hebben een eigen inhouse development team van circa 11 man. Je komt hier te werken in het subteam .Net Core. Hier werken ze volgens scrum met de nieuwste technieken en

Bekijk vacature »

Senior .NET Ontwikkelaar

In het kort Als Senior .NET ontwikkelaar ga je binnen onze business unit Transport en Logistiek aan de slag met complexe maatwerk software voor bedrijf kritische systemen binnen de technische automatisering. Denk bijvoorbeeld een IoT-oplossing voor de logistieke sector waarbij we van ruim 200.000 machines de telemetrie en events verwerken. We zijn actief in de distributielogistiek, havenlogistiek (denk aan ECT) en productielogistiek. Naast C# en .NET Core maken we ook gebruik van Azure technologie. En als trotse Microsoft Gold Partner leren we graag van en met jou. Wil jij jezelf blijven ontwikkelen binnen de technische automatisering met .NET, dan gaan

Bekijk vacature »

Frontend Developer - Leeuwarden

Als Frontend Developer bouw jij mee aan het onderwijs van de toekomst! In een scrum team werken met jonge en enthousiaste collega’s, moderne technieken, ruimte voor eigen ontwikkeling en op een proactieve wijze kunnen meewerken aan innovatie binnen het onderwijs. Magister is het state-of-the-art softwarepakket dat scholen in het voortgezet onderwijs op alle fronten ontzorgt. Van leerlingenadministratie tot het ondersteunen van individuele leerlijnen, van toegang tot digitaal lesmateriaal tot het plannen van het lesrooster. In de Magister app bedient Magister ruim 2,5 miljoen gebruikers waarvan, dagelijks meer dan 600.000 unieke. Hiermee is Magister de absolute marktleider in onderwijsland. Wat vragen

Bekijk vacature »

Junior .NET developer

Functie Ons programma is voor afgestudeerde enthousiastelingen die het als een uitdaging zien om met een klein dynamisch team bij de grootste bedrijven van Nederland aan de slag te gaan. Tijdens jouw dienstverband word jij begeleid door een talent manager. Het ontwikkelen van jouw talent staat hierbij centraal. Het programma doorloop je met een team van circa 8 Mede- trainees. De eerste maand start je met een fulltime inhouse opleiding. Deze staat geheel in het teken van de werkzaamheden die jij verder in het programma zult uitvoeren. Na deze opleidingsmaand ga je aan de slag in een dynamische omgeving bij

Bekijk vacature »

Software Developer

Functie omschrijving Psst hé jij daar! Op zoek naar een nieuwe uitdaging als developer? Wacht niet langer en reageer direct. In deze functie ga je bij een familiebedrijf werken als developer. Je gaat maatwerk software ontwikkelen met de Microsoft stack. Je gebruikt technieken als C#, ASP.NET en MVC. Je werkt in een leuk team van andere developers. Je krijgt veel vrijheid in je werk en kan flexibel werken. Dagje thuiswerken? Geen probleem! Daarnaast is er veel ruimte om écht mee te denken met het bedrijf en met de klanten. Bedrijfsprofiel Deze organisatie is gevestigd in de regio van Boxtel. Vanaf

Bekijk vacature »

Pagina: « vorige 1 2 3 4 volgende »

Ward van der Put
Moderator

Ward van der Put

10/03/2014 16:42:28
Quote Anchor link
Elke klasse een eigen interface geven, is meestal geen goed idee. Ik denk dat je beter af bent door het hogerop in de hiërarchie te formaliseren, bijvoorbeeld:

- class PathsCollection extends DataCollection
- abstract class DataCollection implements ArrayAccess, Countable, Serializable
 
PHP hulp

PHP hulp

27/11/2024 20:15:58
 
Ozzie PHP

Ozzie PHP

10/03/2014 16:45:44
Quote Anchor link
Die ArrayAccess gebruik ik niet. Ik wil juist van een array een object maken, niet andersom :)

Ik heb nu voor de DataCollection wel een interface gemaakt, die Countable en IteratorAggregate extendt.

Waar is die Serializable goed voor?
 
Ward van der Put
Moderator

Ward van der Put

10/03/2014 16:52:15
Quote Anchor link
Als je objecten wilt cachen, komt de Serializable interface van pas. Dat is natuurlijk ook een keuze, zoals alles, maar ik noemde het voorbeeld omdat deze ontwerpbeslissing eerder thuishoort op het niveau DataCollection dan op het niveau PathsCollection extends DataCollection.
 
Ozzie PHP

Ozzie PHP

10/03/2014 16:55:41
Quote Anchor link
Ah oke, op die manier.

Hoe kijk jij tegen het typehinten aan wat betreft inhoud. Is typehinten ook bedoeld om te voorkomen dat een obejct met "verkeerde" inhoud wordt gebruikt? (zie dit topic: http://www.phphulp.nl/php/forum/topic/oop-typehinten/94179/last/)
 
Ward van der Put
Moderator

Ward van der Put

10/03/2014 17:01:35
Quote Anchor link
Wat is "verkeerde inhoud"? Als je bijvoorbeeld een ongewenst datatype of een ongeldige datastructuur bedoelt, dan is het antwoord volmondig: ja, je kunt nooit te veel typehinten, wel te weinig.
 
Ozzie PHP

Ozzie PHP

10/03/2014 17:13:36
Quote Anchor link
Nou wat ik eigenlijk bedoel is meer dit:

Je hebt een object Foo en dat object heeft een object met Paden nodig. We hadden net vastgesteld dat PathsCollection en DataCollection is, en DataCollection implement een DataCollectionInterface. PathsCollection implement (via DataCollection) dus ook een DataCollectionInterface.

Goed, we hebben in class Foo dus een PathsCollection nodig. Die kan ik als volgt typehinten:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php

Class Foo {

  public function __construct(DataCollectionInterface $paths) {

  }

}


?>

Wat we nu dus in feite zeggen, is dat we een object willen wat voldoet aan de DataCollectionInterface. Echter, in plaats van een PathsCollection, zou ik dus ook een ConfigCollection, RoutesCollection of FooBarCollection kunnen meegeven. Is dat gebruikelijk? Of a) moet niet naar een interface maar naar een class (PathsCollection) typehinten, of b) moet ik wellicht een nieuwe PathsCollectionInterface maken, en daar naar typehinten?
 
Dos Moonen

Dos Moonen

10/03/2014 17:19:42
Quote Anchor link
Dan klinkt b beter. Het is specifieker en toch kan het met een object werken dat DataCollection niet extend, wat weer handig kan zijn voor unit tests.

interface PathsCollectionInterface extends DataCollectionInterface {}

class PathsCollection extends DataCollection implements PathsCollectionInterface { ... }
Gewijzigd op 10/03/2014 17:23:08 door Dos Moonen
 
Ozzie PHP

Ozzie PHP

10/03/2014 17:31:40
Quote Anchor link
Dos, hoe jij het omschrijft is inderdaad precies zoals ik het bedoelde bij optie b.

Maar is dit ook de bedoeling van het gebruik van interfaces? Moet een interface daar tegen "beschermen"? Dus in dit specifieke voorbeeld, moet een interface er voor waken dat ik alleen paden kan ingeven (en niet bijv. routes of configuratiesettings). Is dat waar een interface voor dient?
 
Ward van der Put
Moderator

Ward van der Put

10/03/2014 17:32:45
Quote Anchor link
Je ontkomt er dan niet aan te typehinten op de klasse. Eén klasse kan namelijk wel verschillende interfaces implementeren, maar je kunt niet typehinten met meerdere interfaces tegelijk.

Als je naast een PathsCollection nog een ConfigCollection en een RoutesCollection hebt, dan zou ik $paths wel concreet typehinten met PathsCollection $paths, niet met het ruimere DataCollectionInterface $paths. De klasse implementeert de interface (direct): je kunt dat niet meer elegant ombuigen als je dat (indirect) met de typehint op de interface doet in Foo.
 
Ozzie PHP

Ozzie PHP

10/03/2014 17:37:46
Quote Anchor link
En de andere oplossing, om een aparte PathsCollectionInterface te maken (zie hierboven het voorbeeld van Dos)?
 
Ward van der Put
Moderator

Ward van der Put

10/03/2014 17:46:06
Quote Anchor link
Dat is ook een mooie oplossing, maar heeft één nadeel. Als je

class PathsCollection implements PathsCollectionInterface

ooit vervangt door bijvoorbeeld

class PathsCollection implements CloudDataMapperInterface

dan heb je elders nog steeds op verschillende plaatsen de (verouderde) typehint PathsCollectionInterface $paths. Het implementeren van de interface zou ik daarom, zoals gezegd, in dit geval liever direct doen via de definitie van de klasse die de interface daadwerkelijk implementeert, niet indirect via op verschillende plaatsen rondzwervende typehints.
 
Dos Moonen

Dos Moonen

10/03/2014 17:55:25
Quote Anchor link
Klinkt als een slechte reden. Als je ooit besluit dat PathsCollection stopt met het implementeren van PathsCollectionInterface en in plaats daarvan CloudDataMapperInterface implementeert dan hoor je al besloten te hebben om verder te gaan refactoren omdat je weet dat er dan dingen breken.
Gewijzigd op 10/03/2014 17:58:00 door Dos Moonen
 
Ward van der Put
Moderator

Ward van der Put

10/03/2014 18:07:17
Quote Anchor link
Maar vroeg of laat is er altijd een update nodig. Dat is toch wel een zekerheid in software engineering.

Dan heb ik liever één update van één klasse dan tientallen updates van evenveel typehints.

De code hoeft ook niet per se te breken, want je zou kunnen opschalen:

class PathsCollection implements PathsCollectionInterface, CloudDataMapperInterface

Dan ondersteunt de klasse de oude en de nieuwe interface, maar werken de typehints nog steeds met de oude interface. En ja, dat kan zowel een voordeel als een nadeel zijn.
 
Ozzie PHP

Ozzie PHP

10/03/2014 19:59:10
Quote Anchor link
Laten we nog even terugkomen op mijn eerdere vraag. Wat behoort een interface te doen? Hoort een interface alleen aan te geven wat voor methodes de implementing class behoort te hebben? Of moet/mag een interface ook zeggen waar de class voor dient?

Als we weer even terugkomen op een PathsCollection en een ConfigCollection. Beide ondersteunen dezelfde interface DataCollectionInterface. Als ik nu ergens in class Foo een PathsCollection nodig heb, volstaat het dan om te typehinten op DataCollection (hiermee dwingen we de benodigde methodes af) of is het beter om (ook) te typehinten op functionaliteit (ik wil enkel een PathsCollection en dus geen ConfigCollection)?

>> Dat is ook een mooie oplossing, maar heeft één nadeel. ... dan heb je elders nog steeds op verschillende plaatsen de (verouderde) typehint PathsCollectionInterface $paths.

Ward, ik snap precies wat je bedoelt... maar is dit niet altijd het geval?

Misschien begrijp ik je verkeerd, maar als ik het goed begrijp dan hebben we een interface X, en meerdere classes ondersteunen die interface. Dat is handig want dan weten we dat al die classes dezelfde methodes hebben. Als ik van de een op de andere dag besluit dat class Foo een bepaalde interface niet meer ondersteunt, dan lijkt het me logisch dat ik de boel breek. Maar dat is toch in alle gevallen zo?
 
Ward van der Put
Moderator

Ward van der Put

10/03/2014 20:25:33
Quote Anchor link
>> Hoort een interface alleen aan te geven wat voor methodes de implementing class behoort te hebben? Of moet/mag een interface ook zeggen waar de class voor dient?

Dat is eigenlijk hetzelfde. Via constanten beschrijf je wat elke implementatie van de interface "is" en via methoden wat elke implementatie kan "worden" of kan "doen". (Waarmee we voor de liefhebbers en passant mooi even het verschil hebben afgedekt tussen een functie en een procedure.) In dat opzicht lijkt het vrij letterlijk het spelletje Hints: je kunt via hints een ding omschrijven, zolang je het ding zelf maar niet met naam noemt.

>> Misschien begrijp ik je verkeerd, maar als ik het goed begrijp dan hebben we een interface X, en meerdere classes ondersteunen die interface. Dat is handig want dan weten we dat al die classes dezelfde methodes hebben. Als ik van de een op de andere dag besluit dat class Foo een bepaalde interface niet meer ondersteunt, dan lijkt het me logisch dat ik de boel breek. Maar dat is toch in alle gevallen zo?

Dat is ook logisch, maar dan wil ik liever het breekpunt zien in de klasse die de interface implementeert, niet in alle typehints van andere klassen die die ene klasse gebruiken.

Mijn punt is vooral dat als je al een class Foo implements FooInterface hebt, een typehint zoals __construct(FooInterface $foo) of methode(FooInterface $foo) eerder in de weg zit dan iets toevoegt. De implementatie van de interface wordt al direct afgedwongen door de klasse. Het is dubbelop om dat nog eens indirect over te doen met een typehint in alle andere klassen die deze ene klasse gebruiken. En één klasse kun je makkelijker verbouwen dan alle typehints van de interface.
 
Ozzie PHP

Ozzie PHP

10/03/2014 20:38:59
Quote Anchor link
>> Via constanten beschrijf je wat elke implementatie van de interface "is" en via methoden wat elke implementatie kan "worden" of kan "doen".

Wat bedoel je hier met "constanten"? Bedoel je daarmee de naam van de interface?

>> De implementatie van de interface wordt al direct afgedwongen door de klasse.

Ik snap wat je bedoelt. Maar omgekeerd betekent het ook weer dat ik dus overal waar ik naar de class typehint, alleen die ene specifieke class kan gebruiken, en dus geen varianten van de PathsCollection class. Een FooPathsCollection zou dus niet werken, terwijl die bijv. wel de PathsCollectionInterface ondersteunt. Ik meen ooit gehoord te hebben dat je om die reden zoveel mogelijk naar interfaces moet programmeren, maar ik kan me vergissen.
 
Ward van der Put
Moderator

Ward van der Put

10/03/2014 20:49:46
Quote Anchor link
>> Wat bedoel je hier met "constanten"? Bedoel je daarmee de naam van de interface?

Nee, in een interface kun je niet alleen methoden maar ook constanten vastleggen. Daarmee beschrijf je dus niet alleen wat alle objecten met die interface kunnen "worden" (de methoden), maar ook wat ze in eerste aanleg bij hun geboorte al "zijn" (de constanten).

>> Ik snap wat je bedoelt. Maar omgekeerd betekent het ook weer dat ik dus overal waar ik naar de class typehint, alleen die ene specifieke class kan gebruiken, en dus geen varianten van de PathsCollection class.

Ja, maar ik neem aan dat als je een __construct($paths) voor paden nodig hebt, je dat redelijk dicht op de __construct(PathsCollection $paths) class-hint wilt programmeren, niet op de veel ruimere __construct(DataCollection $paths) interface-hint. Doe je dat namelijk niet, dan gooi je alles dat je speciaal voor paden aan PathsCollection hebt toegevoegd overboord.

Bovendien krijg je dan voor paden geen echt PathsCollection-object, maar meer een generiek DataCollection-object en zou je dus, per ongeluk, ook een ConfigCollection-object kunnen gebruiken waar je eigenlijk een PathsCollection-object nodig hebt.
 
Ozzie PHP

Ozzie PHP

10/03/2014 20:55:10
Quote Anchor link
>> Daarmee beschrijf je dus niet alleen wat alle objecten met die interface kunnen "worden" (de methoden), maar ook wat ze in eerste aanleg bij hun geboorte al "zijn" (de constanten).

Kun je hiervan een voorbeeldje geven?

>> Ja, maar... nodig hebt.

Helemaal mee eens. Maar waarom zou je niet een PathsCollectionInterface maken?
 
Ward van der Put
Moderator

Ward van der Put

10/03/2014 21:14:28
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
interface FooBarInterface
{
    const FOO = 'male';
    const BAR = 'female';
}

?>
 
Ozzie PHP

Ozzie PHP

10/03/2014 21:24:20
Quote Anchor link
Ah oke helder... in wat voor situaties zou je dat in de praktijk nodig kunnen hebben?

Wat betreft mijn andere vraag...

Quote:
Helemaal mee eens. Maar waarom zou je niet een PathsCollectionInterface maken?

Kun je dit nog toelichten? Ik weet ook niet of het een goed idee is om een PathsCollectionInterface te maken. Want ben je dan straks niet bezig om voor iedere class een interface te maken? Dat lijkt me ook weer niet de bedoeling. Maar waar leg je dan die grens? Anders gezegd: hoe bepaal je of je moet typehinten naar een class of naar een interface? Kunnen we daar niet een mooie regel voor bedenken? Dat zou wel zeer behulpzaam zijn denk ik.
 

Pagina: « vorige 1 2 3 4 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.