Afhankelijke objecten

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Back-end Developer

Functieomschrijving Heb jij kort geleden je HBO ICT Informatica diploma in ontvangst mogen nemen? Of heb je een aantal jaar ervaring als Software Developer en ben je klaar voor een nieuw hoofdstuk in jouw carrière? Voor een gewaardeerde werkgever in de regio van Goirle zijn wij op zoek naar een junior/medior Back-end Developer met affiniteit met MS Acess. Samen met een vooruitstrevend team ben je verantwoordelijk voor het ontwikkelen van maatwerk software voor hun klanten. Je hebt kennis of ervaring van SQL en affiniteit met MS Acess. Je bent klantvriendelijk en flexibel ingesteld en vindt het leuk om klanten te

Bekijk vacature »

Medior/senior front end developer

Functie Vanwege de groei binnen het bedrijf zijn we op zoek naar versterking in het development team. Als back-end developer bouw je aan de bedrijfssoftware die ons helpt bij de primaire processen. Een leuk (intern) project dus waarbij je de software continu doorontwikkeld! Je werkt in een klein team, we hebben dagelijks stand-ups en iedere twee weken een scrum-sessie, begeleid door onze Scrum Master. Hierin krijg je uitgebreid de kans om je ideeën te presenteren, en te overleggen met je mede-ontwikkelaars en de Product Owner. Binnen de ontwikkelteams gebruiken we Trello, Gitlab, Jiira, Confluence en Boockstack. Hiernaast werken ze met

Bekijk vacature »

Ventilatiesysteem Productontwikkelaar HBO WO Verwa

Samengevat: Zij bieden flexibele ventilatiematerialen, geluidsdempers, rookgasafvoer producten en industrieslangen. Ben jij een technisch productontwikkelaar? Heb jij ervaring met het ontwikkelen van nieuwe producten? Vaste baan: Technisch Productontwikkelaar HBO WO €3.000 - €4.000 Zij bieden een variëteit aan flexibele ventilatiematerialen, geluiddempers, rookgasafvoer producten, industrieslangen en ventilatieslangen voor de scheepsbouw. Met slimme en innovatieve materialen zorgen wij voor een gezonde en frisse leefomgeving. Deze werkgever is een organisatie die volop in ontwikkeling is met hardwerkende collega's. Dit geeft goede ontwikkelingsmogelijkheden. De branche van dit bedrijf is Techniek en Engineering. Functie: Voor de vacature als Technisch Productontwikkelaar Ede Gld HBO WO ga

Bekijk vacature »

Robot Programmeur

Een verantwoordelijke baan met leuke uitdagingen. Heb jij ervaring met het programmeren van robots? Kan jij goed samenwerken met collega's die verschillende specialisaties hebben? Ben je oplossingsgericht, analytisch en flexibel? Ga dan aan de slag als Robot Programmeur bij Gibas in Nijkerk! Als Robot Programmeur kom je te werken bij Gibas. Dat betekent dat je gegarandeerd meewerkt aan unieke oplossingen in productieprocessen. Bij elk project moet er opnieuw geëngineerd en geprogrammeerd worden. Dat maakt jouw werk uitdagend! Voordat je robots gaat programmeren komt er het volgende bij kijken: De opdracht gaat van de afdeling Sales naar de afdeling Operations door

Bekijk vacature »

Database Developer

Functie omschrijving Voor een logistieke dienstverlener in omgeving Zuid Beijerland zijn wij op zoek naar versterking. Weet jij als geen ander systemen aan elkaar te koppelen en heb jij goede kennis van SQL en UML, lees dan snel verder! Jouw taken zien er als volgt uit: Je bent in deze rol voornamelijk verantwoordelijk voor het bouwen, implementeren en beheren van koppelingen tussen de bestaande systemen (zowel business 2 business als application 2 application). Daarnaast inventariseer je de wensen van in- en externe klanten, die je vervolgens samen met je collega's, vertaalt naar technische specificaties, die jullie zelf ontwikkelen en implementeren.

Bekijk vacature »

.NET developer

Wat ga je doen als Full stack .NET developer Microsoft 365? Je stelt je op als sparringpartner voor het team en PO over toekomstige functionaliteiten, architectuur en mogelijke nieuwe producten. Je bent mede-verantwoordelijk voor het vertalen en omzetten van een user story in een passend technisch design. Je implementeert functionaliteiten op basis van een technisch design en user story. Je bent mede-verantwoordelijk voor het beheer van Azure DevOps, waaronder het beheer van GIT, Build Pipelines, Release Pipelines en geautomatiseerde testen. Hier herken jij jezelf in Hbo werk- en denkniveau of hoger aangevuld met relevante certificeringen en/of cursussen; Minimaal 3 jaar

Bekijk vacature »

Junior Developer Low-code

Dit ga je doen Low-code ontwikkeling van software voor landelijk bekende organisaties; Samenwerken in een team van 10 collega's; Opleveren van mooie eindproducten, middels de Agile methodiek; Direct contact met de eindklant over de gewenste oplossingen. Hier ga je werken Als startende IT-professional kom je te werken in de regio van Lelystad bij een organisatie die met toonaangevende klanten uit heel Nederland samen werkt. De producten en diensten van de organisatie bereiken miljoenen Nederlanders. Hierbij komt een grote hoeveelheid informatie kijken en deze moet discreet en veilig verwerkt worden. De processen die hierbij horen worden door het IT team vormgegeven.

Bekijk vacature »

Creatieve Front-end developer gezocht!

Functie Het front-end team bestaat momenteel uit 4 collega’s en is hard aan het groeien! Samen leveren jullie een essentiële bijdrage aan de applicaties die ze voor hun klanten realiseren. Je werkt in het front-end team samen met de back-end teams en product owners om te zorgen dat de applicaties een fijne gebruikerservaring opleveren. Jouw expertise zorgt ervoor dat de juiste keuzes gemaakt worden qua techniek en ontwerp, van back-end tot aan gebruiker. In samenspraak met je team bepalen jullie de beste keuze voor techniek. Ook is er altijd ruimte om nieuwe technieken te ontdekken. Eisen • Je hebt gedegen

Bekijk vacature »

Senior Node.js developer Digital Agency

Functie Door de groei van de organisatie zijn ze op zoek naar een Tech Lead. Als tech lead ben jij verantwoordelijk Als Back end Node.js developer kom je terecht in een van de 8 multidisciplinaire teams in het projectenhuis. Afhankelijk van jouw interesses, wensen en capaciteiten word je bij projecten en onderwerpen naar keuze betrokken. Als ervaren ontwikkelaar zul jij vaak leiding nemen in de projecten en in het team een aanvoerder zijn van technische discussies. Uiteindelijk wil jij natuurlijk de klantwensen zo goed mogelijk vertalen naar robuuste code. De projecten kunnen varieren van langlopende- tot kleinschalige trajecten. Voorheen werkte

Bekijk vacature »

Medior Java developer (fullstack)

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 »

.NET Developer te Naarden

Bedrijfsomschrijving Voor mijn klant ben ik op zoek naar een .NET Developer om het huidige team te komen versterken. Deze organisatie bevindt zich in de logistieke sector, en zij hebben een eigen ERP systeem ontwikkeld dat zij inzetten ter optimalisatie van de logistieke processen van haar eindklanten. Deze organisatie bestaat inmiddels al ruim 20 jaar, waarbij zij een duidelijke missie hebben, namelijk: het werk van de eindklant makkelijker maken door de systemen die zij leveren. Ze werken over heel de wereld, wat deze organisatie een echte internationale speler maakt. Binnen de organisatie kenmerken ze zich door een dynamische en professionele

Bekijk vacature »

Oracle Apex Developer

Dit ga je doen Jouw taken bestaan uit: Het bouwen maatwerk Oracle applicaties voor Europese business units; Het implementeren van de nieuwste technieken om te blijven innoveren; Actief meedenken en aandragen van verbetervoorstellen. Hier ga je werken Deze organisatie in de regio Veenendaal is een van wereld grootste retailers met ruim 16.000 winkels in 27 markten en jaarlijks ruim 5,3 miljard klanten die winkelen bij een van hun welbekende retailmerken. Binnen de organisatie is er een IT Group actief die dient als IT Service Provider voor de hele organisatie en waar dagelijks IT'ers werken aan state-of-the-art IT oplossingen. Dit doen

Bekijk vacature »

Front-end React developer

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 »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

Bekijk vacature »

Software Programmeur

Functie omschrijving Voor onze opdrachtgever in omgeving Rotterdam zijn wij opzoek naar een software programmeur die goed kan schrijven in de talen C of C++ en die het leuk vind om te werken met Linux! Werkzaamheden Programmeur Je bent bezig met het ontwikkelen van software en webapplicaties. Je kunt technische klussen uitvoeren op locatie. Je onderhoudt contact met de projectleider om er zeker van te zijn dat een project goed verloopt. Je zult klanten ondersteunen. Verder zul je technische ontwerpen en gebruikersdocumentaties schrijven en deze onderhouden. Bedrijfsprofiel Dit bedrijf wil de klanten een volledige oplossing kunnen bieden, waarbij ze een

Bekijk vacature »
Jan terhuijzen

jan terhuijzen

29/11/2013 22:10:42
Quote Anchor link
Hallo,

Bij OOP doe je wel eens een object meegeven aan een ander object.
Bijvoorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
class A {
    private $_b;
    public function __construct(B $objVanB) {
        $this->_b = $objVanB;
    }

    public function doeIetsMetB() {
        $this->_b->doeIets();
    }
}

class B {
}

?>

Is dit goed gebruik van OOP?
Hierdoor worden klasses wel afhankelijk van elkaar, dus wil je klassen gaan hergebruiken, dan moet je de andere klassen mee nemen, omdat de ene klasse de andere nodig heeft.
Gewijzigd op 29/11/2013 22:14:06 door Jan terhuijzen
 
PHP hulp

PHP hulp

24/11/2024 02:05:35
 
Ozzie PHP

Ozzie PHP

29/11/2013 23:36:06
Quote Anchor link
Het komt vaak voor dat een class A class B nodig heeft, dus daar is op zich niks vreemds aan. Je moet wel proberen om het allemaal zo onafhankelijk mogelijk te programmeren en te zorgen dat je het niet te strict maakt.

Stel dat jouw class A een fabriek voorstelt die auto's in elkaar zet, dan zou het prettig zijn als deze fabriek niet alleen een auto/class B(MW) in elkaar kan zetten, maar ook overweg kan met een class A(lpha Romeo) en class C(itroën). Dus dat is wel iets om telkens goed over na te denken.
 
Wouter J

Wouter J

29/11/2013 23:53:58
Quote Anchor link
Ja, het is heel erg goed om andere klassen in andere klassen te gebruiken. Hierdoor weet je dat je de verantwoordelijkheden goed hebt verdeelt. Deze manier van injecteren van klassen heet Dependency Injection, een erg populair begrip in de PHP wereld tegenwoordig.

Er is echter 1 basis principe van OO die je goed in de gaten moet houden: Programmeer naar een interface, geen implementatie. Dit betekend dat je in jouw geval gelimiteerd bent tot alleen object B. Dat wil je niet, stel je hebt straks een andere implementatie van B die je C noemt, dan werkt het al niet.

Daarom maak je een interface. Een interface is een contract in OO. In een interface zeg je: Zodra een klasse een interface implementeert heb je toegang tot deze functies Stel we hebben een CacherInterface met een method fetch en save, dan weten we zeker dat wanneer de klasse dat interface implementeert we toegang hebben tot die methods. Zodra je dus alleen die methods gebruikt in je klasse ben je niet meer afhankelijk van die specifieke implementatie (bijv. FileCacher), maar je bent afhankelijk geworden van een interface (CacherInterface). Hierdoor open je de deur voor elke cacher implementatie.

Wil je nou nog wat door gaan in dit onderwerp ga je kijken naar een dependency injection container, ook wel service container genoemd. Dit is een klasse waarin je aangeeft hoe een service gemaakt moet worden. Een service is een klasse die een andere klasse injecteert (A in jouw geval) of een klasse die een andere nodig kan hebben (B in jouw geval).

De dependency injection container weet dus precies hoe een klasse gemaakt moet worden, jij hoeft dan alleen nog maar die klasse op te vragen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
$container
= new Pimple(); // zie https://github.com/fabpot/pimple

// registreer hoe je de router.cacher service maakt

$container['router.cacher'] = function ($c) {
    return new RoutingFileCacher();
};

// en de router
$container['router'] = function ($c) {
    return new Router($c['router.cacher']); // de Router injecteert de cacher implementatie
};

class Router
{
    private $cacher;

    public function __construct(CacherInterface $cacher)
    {

        $this->cacher = $cacher;
    }


    // ...
    public function getRoutes()
    {

        $routes = $this->cacher->fetch('routes'); // door het contract van het interface weten we dat deze method beschikbaar is

        if (!$routes) {
            $routes = ...; // load de routes
            $this->cacher->save('routes', $routes);
        }


        return $routes;
    }
}

?>
 
Local Dev

Local Dev

30/11/2013 02:11:40
Quote Anchor link
Kijk ook eens naar AOP ( http://nl.wikipedia.org/wiki/Aspectgeoriënteerd_programmeren ), het gebruik hiervan lijkt mij beter/mooier met wat jij wilt bereiken.
Gewijzigd op 30/11/2013 20:07:27 door Local Dev
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

30/11/2013 09:58:59
Quote Anchor link
Ozzie PHP op 29/11/2013 23:36:06:
Het komt vaak voor dat een class A class B nodig heeft, dus daar is op zich niks vreemds aan. Je moet wel proberen om het allemaal zo onafhankelijk mogelijk te programmeren en te zorgen dat je het niet te strict maakt.

Stel dat jouw class A een fabriek voorstelt die auto's in elkaar zet, dan zou het prettig zijn als deze fabriek niet alleen een auto/class B(MW) in elkaar kan zetten, maar ook overweg kan met een class A(lpha Romeo) en class C(itroën). Dus dat is wel iets om telkens goed over na te denken.

Vind je?

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

    private $car;

    public function __construct($carbrand) {
        $this->car = $carbrand;
    }

}

?>


Dit kan in PHP, maar heeft in mijn ogen helemaal niets met OOP te maken.
Je maakt hier een object dat niet van te voren weet wat zijn verantwoordelijkheid is.
Gewijzigd op 30/11/2013 09:59:29 door Ger van Steenderen
 
Ozzie PHP

Ozzie PHP

30/11/2013 12:01:20
Quote Anchor link
Die verantwoordelijkheid kun je afdwingen met een interface. Het ging me erom dat je niet te strict programmeert en daarmee het gebruik van je classes beperkt. Zie ook het voorbeeld van Wouter.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

30/11/2013 12:46:27
Quote Anchor link
Het voorbeeld van Wouter is vrij strict:
public function __construct(CacherInterface $cacher)

Maar jij zegt in de laatste alinea dat een class(fabriek) met verschillende typen objecten(automerken) overweg moet kunnen.
 
Ozzie PHP

Ozzie PHP

30/11/2013 12:55:06
Quote Anchor link
Het was maar een voorbeeldje Ger om duidelijk te maken dat je je niet teveel moet beperken. Die fabriek moet weten dat ie bij iedere auto 4 banden een stuur, stoelen, een motor en carosserrie in elkaar moet zetten. Het zou jammer zijn als die geweldige fabriek uitsluitend een Opel Astra 1.2 in elkaar kan zetten en verder niets. Het zou leuk zijn als ie ook andere modellen in elkaar kan zetten. Het was gewoon een voorbeeldje.
 
Wouter J

Wouter J

30/11/2013 13:14:50
Quote Anchor link
Het zou helemaal niet jammer zijn als de fabriek uitsluitend Opel Astra's kan maken, sterker nog, dat is precies wat er in de echte wereld gebeurd.
 
Ozzie PHP

Ozzie PHP

30/11/2013 13:15:59
Quote Anchor link
Ik hoop toch dat ie ook een Astra 1.4 1.6 enz. in elkaar kan zetten.
 
Jan terhuijzen

jan terhuijzen

30/11/2013 13:37:00
Quote Anchor link
Hoe werkt dat precies met interfaces als parameters doorgeven? Ik kom er sinds 2 dagen achter dat je een interface kunt doorgeven als een parameter.
Wat gebeurt er dan?
Je slaat dan een interface op als property van een object, maar met een interface kun je toch niks doen? Want het is gewoon een lijst met methods.
 
Wouter J

Wouter J

30/11/2013 16:38:59
Quote Anchor link
Nee, je geeft geen interface mee. Je geeft aan dat een object een child moet zijn van dat interface.

Met het geen je voor een parameter zet geef je aan welk type class het moet zijn. Bijvoorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
class Database
{
    public function __construct(PDO $db)
    {

        // ...
    }
}


$pdo = new PDO(...);
$db = new Database($pdo); // werkt, het eerste argument is een instance of PDO

$mysqli = new MySQLi(...);
$db = new Database($mysqli); // error, het eerste argument is een instance of MySQLi, niet PDO
?>


Dit voorbeeld werkt met exacte klassen, je kan ook met child klassen en dus ook met interfaces type hinten:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
class RouteLoader
{
    public function __construct(CacherInterface $cacher)
    {

        // ...
    }
}


interface CacherInterface
{
    public function fetch($id);
    public function save($id, $data);
}


class FileCacher implements CacherInterface
{
    // ...
}

class DatabaseCacher implements CacherInterface
{
   // ...
}

class VerkeerdeCacher //! let op, implementeert niet CacherInterface
{
    // ...
}

$cacher = new FileCacher(...);
$loader = new RouteLoader($cacher); // werkt, 1e argument implementeert CacherInterface

$cacher = new DatabaseCacher(...);
$loader = new RouteLoader($cacher); // werkt ook, 1e argument implementeert weer CacherInterface

$cacher = new VerkeerdeCacher(...);
$loader = new RouteLoader($cacher); // werkt niet, 1e argument implementeert niet CacherInterface
?>
 
Reshad F

Reshad F

30/11/2013 20:00:28
Quote Anchor link
Wouter, Even terug naar die dependency injection. Is het nou zo dat je voor elke interface een andere service container hebt of heb je 1 service container voor je hele applicatie?

Ik heb DI nooit echt gebruikt moet ik zeggen maar is dit niet iets wat je in principe zou kunnen gebruiken ipv een singleton?
 
Wouter J

Wouter J

30/11/2013 20:21:06
Quote Anchor link
> Is het nou zo dat je voor elke interface een andere service container hebt of heb je 1 service container voor je hele applicatie?

1 voor heel je applicatie.

> Ik heb DI nooit echt gebruikt moet ik zeggen maar is dit niet iets wat je in principe zou kunnen gebruiken ipv een singleton?

Ja, behalve dat je singletons vanuit een object gebruikt en je bij een service container juist ervoor zorgt dat het object niet weet welke klasse hij krijgt. Maar wil je meer weten, maak even een nieuw topic :)
 



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.