{"id":2501,"date":"2021-01-22T15:44:14","date_gmt":"2021-01-22T14:44:14","guid":{"rendered":"https:\/\/gdksoftware.com\/knowledgebase\/solid-principles-in-delphi-1-the-single-responsibility-principle"},"modified":"2021-03-24T14:31:46","modified_gmt":"2021-03-24T13:31:46","slug":"solid-principles-in-delphi-1-het-single-responsibility-principle","status":"publish","type":"knowledge","link":"https:\/\/gdksoftware.com\/nl\/kennisbank\/solid-principles-in-delphi-1-het-single-responsibility-principle","title":{"rendered":"SOLID-principes in Delphi [1] &#8211; Het Single Responsibility principe"},"content":{"rendered":"<p>Het Single Responsibility principe.<\/p>\n<p>Vandaag duiken we in de <strong>S<\/strong> van de Solid principes: Het Single Responsibility Principe. Maar voor we beginnen, even een korte opfrisser over Solid.<\/p>\n<p>SOLID is een acroniem voor een reeks van vijf principes voor softwareontwikkeling, die, mits goed gevolgd, bedoeld zijn om ontwikkelaars te helpen flexibele en schone code te maken. De vijf principes zijn:<\/p>\n<p><strong>The Single Responsibility Principle<\/strong> \u2014 Klassen moeten slechts \u00e9\u00e9n verantwoordelijkheid hebben en dus slechts \u00e9\u00e9n reden om te veranderen.<\/p>\n<p><strong>The Open\/Closed Principle<\/strong> \u2014 Klassen en andere entiteiten moeten openstaan voor uitbreiding, maar gesloten zijn voor wijziging.<\/p>\n<p><strong>The Liskov Substitution Principle<\/strong> \u2014 Objecten moeten kunnen worden vervangen door hun subtypes.<\/p>\n<p><strong>The Interface Segregation Principle<\/strong> \u2014 Cli\u00ebnten mogen niet worden gedwongen af te hangen van interfaces die zij niet gebruiken.<\/p>\n<p><strong>The Dependency Inversion Principle<\/strong> \u2014 Vertrouwen op abstracties in plaats van op concreties.<\/p>\n<hr \/>\n<p>Dus, het Single Responsibility principe. Zoals de naam al suggereert, moet elke klasse in een programma \u00e9\u00e9n enkele verantwoordelijkheid hebben voor slechts \u00e9\u00e9n deel van de functionaliteit van het programma. Maar dat lijkt eenvoudiger dan het is. Wat is precies \u00e9\u00e9n deel van een programma, en hoe weet je wanneer je de functionaliteit moet scheiden? Het is te eenvoudig om te zeggen dat een klasse maar \u00e9\u00e9n ding moet doen.<\/p>\n<p>Robert C. Martin drukt het principe uit als<strong> \u2018Verzamel de dingen die om dezelfde redenen veranderen. Scheid de dingen die om verschillende redenen veranderen&#8217;<\/strong>, en meer recent <a href=\"https:\/\/blog.cleancoder.com\/uncle-bob\/2014\/05\/08\/SingleReponsibilityPrinciple.html\" target=\"_blank\" rel=\"noopener\"><strong>\u2018This principle is about people\u2019<\/strong><\/a>. Dat zou ons in de juiste richting moeten wijzen.<\/p>\n<p>Wanneer je een softwaremodule schrijft, wil je er zeker van zijn dat wanneer wijzigingen worden gevraagd, die wijzigingen slechts afkomstig kunnen zijn van \u00e9\u00e9n enkele persoon, of \u00e9\u00e9n enkele gekoppelde groep mensen die \u00e9\u00e9n nauw omschreven bedrijfsfunctie vertegenwoordigen. Dit betekent dat een softwaremodule of klasse \u00e9\u00e9n verantwoordelijkheid moet hebben <strong>voor die bepaalde groep mensen.<\/strong><\/p>\n<p>Het is gemakkelijker dit uit te leggen aan de hand van een voorbeeld. Laten we eens kijken naar de volgende klasse:<\/p>\n<div style=\"background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;\">\n<pre style=\"margin: 0; line-height: 125%;\"><span style=\"color: #008800; font-weight: bold;\">type<\/span>\r\n  TShip <span style=\"color: #333333;\">=<\/span> <span style=\"color: #008800; font-weight: bold;\">class<\/span>\r\n  <span style=\"color: #003388; font-weight: bold;\">private<\/span>\r\n    FPosition<span style=\"color: #333333;\">:<\/span> TPoint<span style=\"color: #333333;\">;<\/span>\r\n    FHeading<span style=\"color: #333333;\">:<\/span> <span style=\"color: #333399; font-weight: bold;\">Integer<\/span><span style=\"color: #333333;\">;<\/span>\r\n    FSpeed<span style=\"color: #333333;\">:<\/span> <span style=\"color: #333399; font-weight: bold;\">Integer<\/span><span style=\"color: #333333;\">;<\/span>\r\n    FCargoLoad<span style=\"color: #333333;\">:<\/span> <span style=\"color: #008800; font-weight: bold;\">string<\/span><span style=\"color: #333333;\">;<\/span>\r\n  <span style=\"color: #003388; font-weight: bold;\">public<\/span>\r\n    <span style=\"color: #008800; font-weight: bold;\">procedure<\/span> <span style=\"color: #0066bb; font-weight: bold;\">SetHeading<\/span>(NewHeading<span style=\"color: #333333;\">:<\/span> <span style=\"color: #333399; font-weight: bold;\">Integer<\/span>)<span style=\"color: #333333;\">;<\/span>\r\n    <span style=\"color: #008800; font-weight: bold;\">procedure<\/span> <span style=\"color: #0066bb; font-weight: bold;\">SetSpeed<\/span>(NewSpeed<span style=\"color: #333333;\">:<\/span> <span style=\"color: #333399; font-weight: bold;\">Integer<\/span>)<span style=\"color: #333333;\">;<\/span>\r\n    <span style=\"color: #008800; font-weight: bold;\">function<\/span> <span style=\"color: #0066bb; font-weight: bold;\">GetCoordinate<\/span><span style=\"color: #333333;\">:<\/span> TPoint<span style=\"color: #333333;\">;<\/span>\r\n    <span style=\"color: #008800; font-weight: bold;\">procedure<\/span> <span style=\"color: #0066bb; font-weight: bold;\">PlotCourse<\/span><span style=\"color: #333333;\">;<\/span>\r\n    <span style=\"color: #008800; font-weight: bold;\">procedure<\/span> <span style=\"color: #0066bb; font-weight: bold;\">LoadCargo<\/span>(NewCargo<span style=\"color: #333333;\">:<\/span> <span style=\"color: #008800; font-weight: bold;\">string<\/span>)<span style=\"color: #333333;\">;<\/span>\r\n    <span style=\"color: #008800; font-weight: bold;\">procedure<\/span> <span style=\"color: #0066bb; font-weight: bold;\">PrintCargo<\/span><span style=\"color: #333333;\">;<\/span>\r\n    <span style=\"color: #008800; font-weight: bold;\">procedure<\/span> <span style=\"color: #0066bb; font-weight: bold;\">ReportPosition<\/span><span style=\"color: #333333;\">;<\/span>\r\n    <span style=\"color: #008800; font-weight: bold;\">procedure<\/span> <span style=\"color: #0066bb; font-weight: bold;\">CalculateProfit<\/span><span style=\"color: #333333;\">;<\/span>\r\n  <span style=\"color: #008800; font-weight: bold;\">end<\/span><span style=\"color: #333333;\">;<\/span>\r\n<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p>Dit is een klasse die een aantal dingen doet, allemaal over het beheren van de positie en koers van een schip, de lading en wat rapportages. Aangezien dit een kort voorbeeld is om te laten zien hoe je moet denken over het Single Responsibility Principle, moet je niet te veel aandacht besteden aan de details van de code zelf; het gaat om het grote overzicht van de structuur van deze specifieke klasse.<\/p>\n<p>Ik denk dat we allemaal dit soort &#8216;God&#8217;-klassen kennen. Meestal volgepropt met veel functionaliteit en code, en het beheren van \u00e9\u00e9n bepaald deel of module van je programma. De vraag is, als we enkele veranderingen moeten aanbrengen in deze klasse, hoe kunnen we deze klasse dan refactoren om er zeker van te zijn dat we de dingen die om dezelfde reden veranderen samenbrengen, en de dingen die om verschillende redenen veranderen scheiden.<\/p>\n<p>Laten we even stoppen en nadenken over verantwoordelijkheden van deze code met betrekking tot de (groep van) mensen. We kunnen een aantal specifieke mensen aanwijzen die enige verantwoordelijkheid zullen dragen met betrekking tot het beheer van het schip, de richting en koers, en de rapportage-instrumenten. Laten we zeggen dat we in dit geval een schipper, een navigator, een ladingmeester en een financieel manager defini\u00ebren. Als je aan deze verschillende rollen denkt, is het opeens heel gemakkelijk om deze klasse in verschillende modules te verdelen, met slechts \u00e9\u00e9n verantwoordelijkheid voor die bepaalde rol. We zouden een klasse moeten hebben voor het bepalen van de koers en het vermogen (schipper), een voor het beheren van de positie en het uitzetten van de koers van het schip (navigator), een voor het beheren van de lading van dit schip (ladingmeester), en een voor al onze (financi\u00eble) rapportage (financieel manager).<\/p>\n<p>Onze nieuwe klassen zouden er nu als volgt uit kunnen zien:<\/p>\n<div style=\"background: #ffffff; overflow: auto; width: auto; border: solid gray; border-width: .1em .1em .1em .8em; padding: .2em .6em;\">\n<pre style=\"margin: 0; line-height: 125%;\"><span style=\"color: #008800; font-weight: bold;\">type<\/span>\r\n  TShipLocation <span style=\"color: #333333;\">=<\/span> <span style=\"color: #008800; font-weight: bold;\">class<\/span>\r\n  <span style=\"color: #003388; font-weight: bold;\">private<\/span>\r\n    FPosition<span style=\"color: #333333;\">:<\/span> TPoint<span style=\"color: #333333;\">;<\/span>\r\n  <span style=\"color: #003388; font-weight: bold;\">public<\/span>\r\n    <span style=\"color: #008800; font-weight: bold;\">function<\/span> <span style=\"color: #0066bb; font-weight: bold;\">GetCoordinate<\/span><span style=\"color: #333333;\">:<\/span> TPoint<span style=\"color: #333333;\">;<\/span>\r\n    <span style=\"color: #008800; font-weight: bold;\">procedure<\/span> <span style=\"color: #0066bb; font-weight: bold;\">PlotCourse<\/span><span style=\"color: #333333;\">;<\/span>\r\n    <span style=\"color: #008800; font-weight: bold;\">procedure<\/span> <span style=\"color: #0066bb; font-weight: bold;\">ReportPosition<\/span><span style=\"color: #333333;\">;<\/span>\r\n  <span style=\"color: #008800; font-weight: bold;\">end<\/span><span style=\"color: #333333;\">;<\/span>\r\n\r\n  TShipMovement <span style=\"color: #333333;\">=<\/span> <span style=\"color: #008800; font-weight: bold;\">class<\/span>\r\n  <span style=\"color: #003388; font-weight: bold;\">private<\/span>\r\n    FHeading<span style=\"color: #333333;\">:<\/span> <span style=\"color: #333399; font-weight: bold;\">Integer<\/span><span style=\"color: #333333;\">;<\/span>\r\n    FSpeed<span style=\"color: #333333;\">:<\/span> <span style=\"color: #333399; font-weight: bold;\">Integer<\/span><span style=\"color: #333333;\">;<\/span>\r\n  <span style=\"color: #003388; font-weight: bold;\">public<\/span>\r\n    <span style=\"color: #008800; font-weight: bold;\">procedure<\/span> <span style=\"color: #0066bb; font-weight: bold;\">SetHeading<\/span>(NewHeading<span style=\"color: #333333;\">:<\/span> <span style=\"color: #333399; font-weight: bold;\">Integer<\/span>)<span style=\"color: #333333;\">;<\/span>\r\n    <span style=\"color: #008800; font-weight: bold;\">procedure<\/span> <span style=\"color: #0066bb; font-weight: bold;\">SetSpeed<\/span>(NewSpeed<span style=\"color: #333333;\">:<\/span> <span style=\"color: #333399; font-weight: bold;\">Integer<\/span>)<span style=\"color: #333333;\">;<\/span>\r\n  <span style=\"color: #008800; font-weight: bold;\">end<\/span><span style=\"color: #333333;\">;<\/span>\r\n\r\n  TCargo <span style=\"color: #333333;\">=<\/span> <span style=\"color: #008800; font-weight: bold;\">class<\/span>\r\n  <span style=\"color: #003388; font-weight: bold;\">private<\/span>\r\n    FCargoLoad<span style=\"color: #333333;\">:<\/span> <span style=\"color: #008800; font-weight: bold;\">string<\/span><span style=\"color: #333333;\">;<\/span>\r\n  <span style=\"color: #003388; font-weight: bold;\">public<\/span>\r\n    <span style=\"color: #008800; font-weight: bold;\">procedure<\/span> <span style=\"color: #0066bb; font-weight: bold;\">LoadCargo<\/span>(NewCargo<span style=\"color: #333333;\">:<\/span> <span style=\"color: #008800; font-weight: bold;\">string<\/span>)<span style=\"color: #333333;\">;<\/span>\r\n    <span style=\"color: #008800; font-weight: bold;\">procedure<\/span> <span style=\"color: #0066bb; font-weight: bold;\">PrintCargo<\/span><span style=\"color: #333333;\">;<\/span>\r\n  <span style=\"color: #008800; font-weight: bold;\">end<\/span><span style=\"color: #333333;\">;<\/span>\r\n\r\n  TShipReport <span style=\"color: #333333;\">=<\/span> <span style=\"color: #008800; font-weight: bold;\">class<\/span>\r\n  <span style=\"color: #003388; font-weight: bold;\">public<\/span>\r\n    <span style=\"color: #008800; font-weight: bold;\">procedure<\/span> <span style=\"color: #0066bb; font-weight: bold;\">CalculateProfit<\/span><span style=\"color: #333333;\">;<\/span>\r\n  <span style=\"color: #008800; font-weight: bold;\">end<\/span><span style=\"color: #333333;\">;<\/span>\r\n\r\n  TShip <span style=\"color: #333333;\">=<\/span> <span style=\"color: #008800; font-weight: bold;\">class<\/span>\r\n  <span style=\"color: #003388; font-weight: bold;\">private<\/span>\r\n  <span style=\"color: #003388; font-weight: bold;\">public<\/span>\r\n    <span style=\"color: #888888;\">\/\/ reference to subclasses<\/span>\r\n  <span style=\"color: #008800; font-weight: bold;\">end<\/span><span style=\"color: #333333;\">;<\/span>\r\n<\/pre>\n<\/div>\n<p>&nbsp;<\/p>\n<p>Zou je dat ook gedaan hebben als je niet dacht aan de mensen achter de verantwoordelijkheden van de klasse? Misschien, maar ik kan me voorstellen dat de ShipLocation en ShipMovement klasse in dezelfde klasse terecht hadden kunnen komen.<\/p>\n<p>Dus, wat gebeurt er nu als we een feature request krijgen van de schipper om een boegschroef toe te voegen om het schip makkelijker te kunnen sturen in kleine kanaaltjes? Breng deze wijziging gewoon aan in de ShipMovement klasse, zonder de andere klassen te be\u00efnvloeden. En als we een nieuw ladingsysteem willen implementeren? Verander gewoon de Cargo klasse, wederom zonder de andere klassen aan te tasten.<\/p>\n<p>Ik hoop dat je nu ziet waarom het single responsibility principe eigenlijk over mensen gaat, of actors, en de verantwoordelijkheid van de functionaliteit van modules of klassen van je programma in relatie tot deze mensen. En natuurlijk kun je dit toepassen op verschillende niveaus van je programma, van modules tot klassen tot specifieke functies.<\/p>\n<p>Als je dit principe altijd in je achterhoofd houdt bij het refactoren of ontwerpen van een module of klasse, dan weet ik zeker dat je code beter onderhoudbaar is en makkelijk te veranderen is.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"featured_media":0,"parent":0,"template":"","class_list":["post-2501","knowledge","type-knowledge","status-publish","hentry","knowledge-category-delphi","knowledge-category-software-ontwikkeling"],"acf":{"author":1398,"type_hero":"compact","hero_image":2492,"hero_image_position":"\"30% 70%\"","hero_title":"SOLID-principes in Delphi [1] - Het principe van \u00e9\u00e9n enkele verantwoordelijkheid","hero_content":"","hero_link":null,"hero_show_h1":false},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.8 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>SOLID-principes in Delphi [1] - Het Single Responsibility principe - GDK Software<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/gdksoftware.com\/nl\/kennisbank\/solid-principles-in-delphi-1-het-single-responsibility-principle\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SOLID-principes in Delphi [1] - Het Single Responsibility principe\" \/>\n<meta property=\"og:description\" content=\"Het Single Responsibility principe. Vandaag duiken we in de S van de Solid principes: Het Single Responsibility Principe. Maar voor we beginnen, even een korte opfrisser over Solid. SOLID is een acroniem voor een reeks van vijf principes voor softwareontwikkeling, die, mits goed gevolgd, bedoeld zijn om ontwikkelaars te helpen flexibele en schone code te [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gdksoftware.com\/nl\/kennisbank\/solid-principles-in-delphi-1-het-single-responsibility-principle\" \/>\n<meta property=\"og:site_name\" content=\"GDK Software\" \/>\n<meta property=\"article:modified_time\" content=\"2021-03-24T13:31:46+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Geschatte leestijd\" \/>\n\t<meta name=\"twitter:data1\" content=\"5 minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\\\/solid-principles-in-delphi-1-het-single-responsibility-principle\",\"url\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\\\/solid-principles-in-delphi-1-het-single-responsibility-principle\",\"name\":\"SOLID-principes in Delphi [1] - Het Single Responsibility principe - GDK Software\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/nl#website\"},\"datePublished\":\"2021-01-22T14:44:14+00:00\",\"dateModified\":\"2021-03-24T13:31:46+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\\\/solid-principles-in-delphi-1-het-single-responsibility-principle#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\\\/solid-principles-in-delphi-1-het-single-responsibility-principle\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\\\/solid-principles-in-delphi-1-het-single-responsibility-principle#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/gdksoftware.com\\\/nl\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Knowledgebase\",\"item\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Software ontwikkeling\",\"item\":\"https:\\\/\\\/gdksoftware.com\\\/nl\\\/kennisbank-categorie\\\/software-ontwikkeling\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"SOLID-principes in Delphi [1] &#8211; Het Single Responsibility principe\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/gdksoftware.com\\\/nl#website\",\"url\":\"https:\\\/\\\/gdksoftware.com\\\/nl\",\"name\":\"GDK Software\",\"description\":\"Zet de stip op je horizon\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/gdksoftware.com\\\/nl?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-NL\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"SOLID-principes in Delphi [1] - Het Single Responsibility principe - GDK Software","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/gdksoftware.com\/nl\/kennisbank\/solid-principles-in-delphi-1-het-single-responsibility-principle","og_locale":"nl_NL","og_type":"article","og_title":"SOLID-principes in Delphi [1] - Het Single Responsibility principe","og_description":"Het Single Responsibility principe. Vandaag duiken we in de S van de Solid principes: Het Single Responsibility Principe. Maar voor we beginnen, even een korte opfrisser over Solid. SOLID is een acroniem voor een reeks van vijf principes voor softwareontwikkeling, die, mits goed gevolgd, bedoeld zijn om ontwikkelaars te helpen flexibele en schone code te [&hellip;]","og_url":"https:\/\/gdksoftware.com\/nl\/kennisbank\/solid-principles-in-delphi-1-het-single-responsibility-principle","og_site_name":"GDK Software","article_modified_time":"2021-03-24T13:31:46+00:00","twitter_card":"summary_large_image","twitter_misc":{"Geschatte leestijd":"5 minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/gdksoftware.com\/nl\/kennisbank\/solid-principles-in-delphi-1-het-single-responsibility-principle","url":"https:\/\/gdksoftware.com\/nl\/kennisbank\/solid-principles-in-delphi-1-het-single-responsibility-principle","name":"SOLID-principes in Delphi [1] - Het Single Responsibility principe - GDK Software","isPartOf":{"@id":"https:\/\/gdksoftware.com\/nl#website"},"datePublished":"2021-01-22T14:44:14+00:00","dateModified":"2021-03-24T13:31:46+00:00","breadcrumb":{"@id":"https:\/\/gdksoftware.com\/nl\/kennisbank\/solid-principles-in-delphi-1-het-single-responsibility-principle#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/gdksoftware.com\/nl\/kennisbank\/solid-principles-in-delphi-1-het-single-responsibility-principle"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/gdksoftware.com\/nl\/kennisbank\/solid-principles-in-delphi-1-het-single-responsibility-principle#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/gdksoftware.com\/nl"},{"@type":"ListItem","position":2,"name":"Knowledgebase","item":"https:\/\/gdksoftware.com\/nl\/kennisbank"},{"@type":"ListItem","position":3,"name":"Software ontwikkeling","item":"https:\/\/gdksoftware.com\/nl\/kennisbank-categorie\/software-ontwikkeling"},{"@type":"ListItem","position":4,"name":"SOLID-principes in Delphi [1] &#8211; Het Single Responsibility principe"}]},{"@type":"WebSite","@id":"https:\/\/gdksoftware.com\/nl#website","url":"https:\/\/gdksoftware.com\/nl","name":"GDK Software","description":"Zet de stip op je horizon","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/gdksoftware.com\/nl?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-NL"}]}},"_links":{"self":[{"href":"https:\/\/gdksoftware.com\/nl\/wp-json\/wp\/v2\/knowledge\/2501","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gdksoftware.com\/nl\/wp-json\/wp\/v2\/knowledge"}],"about":[{"href":"https:\/\/gdksoftware.com\/nl\/wp-json\/wp\/v2\/types\/knowledge"}],"acf:post":[{"embeddable":true,"href":"https:\/\/gdksoftware.com\/nl\/wp-json\/wp\/v2\/team\/1398"}],"wp:attachment":[{"href":"https:\/\/gdksoftware.com\/nl\/wp-json\/wp\/v2\/media?parent=2501"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}