Inheritance

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

IT Business Support Analyst

Dümmen Orange is wereldwijd de grootste veredelaar en producent van uitgangsmateriaal voor snijbloemen, bollen, tropische planten, potplanten, perkplanten en vaste planten. Voor onze IT afdeling in de Lier zoeken wij een IT Business Support Analyst. Functie inhoud Dümmen Orange groeit en bloeit! Dit resulteert in een snel veranderende en tevens uitdagende werkomgeving. Dümmen Orange ontwikkelt nieuwe applicaties zoals een Webshop, diverse Mobile Apps en implementeert het CRM systeem Sales Force. Deze applicaties zijn gericht op, en worden gebruikt door onze klanten. Het aantal klanten dat actief gebruik maakt van onze webshop en de mobile apps is sterk groeiende. Als IT

Bekijk vacature »

IT-traineeship junior software ontwikkelaar

Zoek jij een stevige uitdaging en de mogelijkheid om veel nieuwe dingen te leren in een dynamisch vakgebied? Doe mee aan ons IT Professional Program en ontwikkel jezelf tot software engineer! Je begint met een opleidingstraject van ongeveer 4 maanden. Hierin ga je aan de slag met verschillende technieken die je op conceptueel niveau leert te overzien en interpreteren. Onderwerpen die aan bod komen zijn o.a. programmeren (Java/C#/Python), Object Oriëntatie, Databases, Webservices & webtechnologieën, Domain Driven Design en Continuous Integration/Continuous Delivery. Sommige van deze onderdelen sluit je af met een examen en bijbehorende certificering. Het opleidingstraject zelf sluit je af

Bekijk vacature »

New Business Developer Naarden

Ben jij het zat om alle KvK-lijsten volledig af te bellen? Komt de koffie van die ene persoon waar je nog steeds geen deal hebt gesloten je neus uit? En blijf je potentiële klanten stalken zonder resultaat? Dan is het tijd om het anders te gaan doen! Neem afscheid van de standaard salesaanpak en ga bij PEAK-IT aan de slag met onze unieke en eigenwijze salesstrategie! Word onze New Business Developer in Naarden, die niet bang is om het anders te doen! Hoe maak jij onze klanten blij? Dankzij jou hoeven onze klanten niet bang te zijn dat hun IT-infrastructuur

Bekijk vacature »

Software Developer Geospatial Technology

Would you like to be part of an innovative, inspiring and international environment? Are you excited to work in a Geo-ICT, Asset Management, Energy, Water & Telecom industry and do you have strong programming skills? The job as Experienced GIS Software Developer offers the challenge you are looking for! Software Developer Geospatial Technology 32-40 hours per week Your Job As Experienced GIS Consultant you will work in an international team on projects at leading customers in the Netherlands. You will deal with design solutions in which emerging technologies play an important role. Along with your colleagues and customers you will

Bekijk vacature »

PHP Symfony (3) Developer

Bedrijfsomschrijving Onze klant is een dienstverlenend bedrijf die een eigen facturatiesysteem heeft ontwikkeld waar men zich met een relatief klein team (circa 20 mensen) dagelijks inzet om mooie en slimme applicaties te ontwikkelen. Ze groeien nog altijd echter nemen niet elke opdracht aan en ze kiezen als bedrijf alleen voor de projecten waar de meeste uitdaging in te vinden is. Het is een leuke en prettige partij om bij te werken en er is ook veel ruimte om met nieuwe technieken (lees: Symfony 3) aan de slag te gaan en deze uit te proberen. Functieomschrijving Samen met je collega’s ben

Bekijk vacature »

BI Developer

Bedrijfsomschrijving De organisatie waar je komt te werken als (Senior) BI Developer is een grote internationale financiële instelling. Met vele vestigingen in Nederland zijn ze een belangrijke speler op de financiële markt. Jij zal hoofdzakelijk op het kantoor in Amsterdam werkzaam zijn, maar het kan ook voorkomen dat je af en toe naar een andere vestiging gaat. Het bedrijf telt ongeveer 5000 medewerkers waarvan ruim 150 ICT'ers. Het team waar je in komt te werken als (Senior) BI Developer is een ambitieus BI team dat zich bezighoudt met lokale en internationale uitdagingen. Zo zit een Junior BI Developer, 2 (Medior)

Bekijk vacature »

Full Stack Java Developer

Functieomschrijving Wil jij zorgen voor de meest plezierige en efficiënte klant ervaring? Wil jij werken met state-of-the-art-systemen, onze business verbeteren en echt impact maken? Wat ga je doen als Full-stack Java Developer? Met jouw slimme en gave oplossingen breng je mensen en werk dichter bij elkaar. Samen met jouw team uiteraard. Binnenstromende functionele vragen vertalen naar technische creatieve oplossingen. Daar mag jij je in gaan vastbijten. Jouw focus bij ons zal liggen bij het 'self-service portaal' voor klanten, waar onze producten en diensten digitaal worden aangeboden aan onze klanten. Een portaal wat wij continue willen doorontwikkelen en dus ook onze

Bekijk vacature »

.NET DEVELOPER - GRADUATE PROGRAMMA

Functieomschrijving Ben je onlangs afgestudeerd van een IT-opleiding of heb je nog maar weinig ervaring opgedaan? En wil je toch graag aan de slag als .NET Developer? Lees dan snel verder, want op 5 juli en 9 augustus 2021 starten wij weer met een graduate programma waarin jij jezelf kunt ontwikkelen tot een volwaardige Fullstack .NET Developer! In juli en augustus krijg jij via de Experis Academy een unieke kans om jouw IT-carrière een kickstart te geven en jezelf te ontwikkelen tot Fullstack .NET Developer. Zo volg je de eerste drie maanden een full time op maat gemaakte training waarin

Bekijk vacature »

Medior C# Developer

Samen met het development team zorg je ervoor dat alle systemen achter de schermen vlekkeloos werken. Wat doe je als Medior C# Developer bij Coolblue? Als C# developer doe je regelmatig mee aan brainstormsessies over user experience, data en task flow met de UX Designer, Product Owner en Data Scientist in je team. Daarnaast schrijf je op zichzelf staande, consistente en testbare code die goed onderhoudbaar en toekomstbestendig is. Ook C# Developer worden bij Coolblue? Lees hieronder of het bij je past. Dit vind je leuk om te doen Werken met verschillende soorten data-opslag, zoals Oracle of Dynamo/Cosmos. Problemen oplossen

Bekijk vacature »

Banner Developer

Werken aan de zichtbaarheid van een van de snelst groeiende bedrijven van de Benelux? Wat doe je als Banner Developer bij Coolblue? Laat jij trots aan iedereen de Banners zien die je voor Coolblue hebt geschreven via HTML, CSS en Javascript? Dan wacht deze vacature op jou! Ook Banner Developer worden bij Coolblue? Lees hieronder of het bij je past. Dit vind je leuk om te doen Schrijven van HTML, CSS en Javascript waarmee je in snel tempo nieuwe modules maakt. Het bedenken van schaalbare modules die voor alle 35000 producten werken Volgen van webinars om zo jouw kennis up

Bekijk vacature »

IT-traineeship junior software developer

Zoek jij een stevige uitdaging en de mogelijkheid om veel nieuwe dingen te leren in een dynamisch vakgebied? Doe mee aan ons IT Professional Program en ontwikkel jezelf tot software engineer! Je begint met een opleidingstraject van ongeveer 4 maanden. Hierin ga je aan de slag met verschillende technieken die je op conceptueel niveau leert te overzien en interpreteren. Onderwerpen die aan bod komen zijn o.a. programmeren (Java/C#/Python), Object Oriëntatie, Databases, Webservices & webtechnologieën, Domain Driven Design en Continuous Integration/Continuous Delivery. Sommige van deze onderdelen sluit je af met een examen en bijbehorende certificering. Het opleidingstraject zelf sluit je af

Bekijk vacature »

IT-traineeship junior software developer

Zoek jij een stevige uitdaging en de mogelijkheid om veel nieuwe dingen te leren in een dynamisch vakgebied? Doe mee aan ons IT Professional Program en ontwikkel jezelf tot software engineer! Je begint met een opleidingstraject van ongeveer 4 maanden. Hierin ga je aan de slag met verschillende technieken die je op conceptueel niveau leert te overzien en interpreteren. Onderwerpen die aan bod komen zijn o.a. programmeren (Java/C#/Python), Object Oriëntatie, Databases, Webservices & webtechnologieën, Domain Driven Design en Continuous Integration/Continuous Delivery. Sommige van deze onderdelen sluit je af met een examen en bijbehorende certificering. Het opleidingstraject zelf sluit je af

Bekijk vacature »

Platform & Device Developer

Je werkt aan veel dynamische projecten als Platform & Device Developer binnen Coolblue, waarin je creativiteit kwijt kunt. Wat doe je als Platform & Device Developer bij Coolblue? Als Platform & Device Developer ben je verantwoordelijk voor het bouwen en het ontwikkelen van de platformen waarop alle Coolblue'ers werkzaam zijn. Je bent leergierig en gaat geen uitdaging uit de weg. Hiervoor wil je graag weten waarom sommige systemen of processen zo ontwikkeld zijn en ga je op onderzoek om dit te verbeteren. Je gaat in gesprek met verschillende stakeholders en developers om te kijken of je nieuwe oplossing werkt. Op

Bekijk vacature »

BI Developer/ Power BI

Bedrijfsomschrijving De organisatie staat aan het begin van een grote verandering op gebied van Data Analytics. De visie is om datadriven te werken en dat uit te rollen over meerdere zuster/ dochter organisaties in Nederland. De omgeving is volledig Microsoft gebaseerd. In een team van uiteindelijk 8 professionals ben je verantwoordelijk om de omgeving naar een nieuw niveau te tillen op gebied van BI. Dit houdt in dat je de huidige omgeving analyseert en met elkaar bepaalt welke kant de organisatie op moet. Je kan het bijna typeren als een greenfieldproject! Je hebt contact met Business Analisten om requirements te

Bekijk vacature »

Front-end Developer Vue.js Meewerkend voorman

Bedrijfsomschrijving Betreffende organisatie is gevestigd in de regio van Lelystad en is al ruim 20 jaar lang bedreven in het ontwikkelen en aanbieden van diverse communicatiemiddelen aan de consumentenmarkt. Hierin staan innovatie, optimale klantbeleving en een passie voor technologie centraal. Ruim 100 medewerkers staan dagelijks klaar om te zorgen voor een optimale klantbeleving en optimalisatie van het aanbod. Om diverse businessprocessen binnen de organisatie vloeiend te laten verlopen is software ontwikkeling van essentieel belang. Binnen de organisatie zijn drie scrumteams dagelijks bezig met het beheer en de doorontwikkeling van het applicatielandschap. Zij werken aan verschillende projecten om de beleving van

Bekijk vacature »
Lord Gaga

Lord Gaga

15/02/2016 18:03:26
Quote Anchor link
Hallo,

Omdat ik deze situatie nogal vaak tegenkom heb ik besloten toch maar te vragen hoe dit nou precies zit:
Wanneer gebruik je inheritance en wanneer geef je informatie mee via bijv. de constructor?

Ik snap dat deze vraag nogal onduidelijk is dus probeer ik het wat te verduidelijken via onderstaande pseudo code.

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
class Gem
{
    private String color = "red";
    private Event onPickUp;
    
    public Gem(String color, Event onPickUp)
    {
        this.color = color;
        this.onPickUp = onPickUp;
    }
}

Gem gem_1 = new Gem("red", Event.PlusOnePoint);
Gem gem_2 = new Gem("blue", Event.PlusTenPoints);


In bovenstaande voorbeeld is er dus 1 class en vanuit deze class kun je meerdere edelstenen aanmaken, elke edelsteen heeft een andere kleur en een andere callback.

Maar wat ook mogelijk is, is het volgende:

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
class abstract Gem
{
    public Gem()
    {
    }
    
    public void onPickUp()
    {
    }
}

class RedGem extends Gem
{
    public void onPickUp()
    {
        points++;
    }
}

class BlueGem extends Gem
{
    public void onPickUp()
    {
        points += 10;
    }
}

Gem gem_1 = new RedGem();
Gem gem_2 = new BlueGem();


Het voorbeeld is misschien een beetje simpel, maar ik hoop dat jullie mijn bedoeling snappen.

Alvast bedankt voor de hulp!
Gewijzigd op 15/02/2016 18:04:08 door Lord Gaga
 
PHP hulp

PHP hulp

11/05/2021 05:23:50
 
Frank Nietbelangrijk

Frank Nietbelangrijk

15/02/2016 20:13:31
Quote Anchor link
Overerving of inheritance gebruik je minder dan de meeste mensen in het begin verwachten. Je gebruikt het vaak als je een bestaande class niet meer wilt veranderen of voor objecten die in veel "smaken" vervaardigd kunnen worden met meerdere custom methods. Een aardig voorbeeld is de BaseController waar al heel wat functionaliteit in zit om views te genereren en modals aan te roepen. Welke en wannéér deze views of modals aangeroepen moeten worden is echter in iedere controller weer anders. Een ideale situatie om een basecontroller te extenden.

Informatie meegeven aan een functie (Een constructor is ook een functie) gebruik je veel, het liefst zo veel mogelijk. Stel dat je een User object hebt en data uit dit object voor de output in de view wilt gebruiken. Je geeft dan het User object gewoon mee aan de view. Als je ook nog even een email wilt genereren waarin wat data moet komen te staan dat uit het User object komt dan geef je dus het User object ook gewoon even door aan je Mailer class.

Wel moet je even letten waarvoor een constructor bedoeld is. Initialisatie van je (te instantiëren) object. De properties voorzien van een waarde dus.

Wat hier op aansluit is Dependency Injection. Zeker de moeite waard om te lezen.
 
Wouter J

Wouter J

15/02/2016 20:20:18
Quote Anchor link
Vaak is inheritance niet het antwoord. In de OO introducties wordt vaak veel te gemakkelijk over inheritance gesproken, waar deze dingen eigenlijk via een andere manier opgelost moesten worden. (bijv. het veelgebruikte "Admin extends User" verhaaltje).

In het algemeen mag je aannemen dat je bij data objecten (Gem in jouw geval) geen inheritance moet gebruiken. Data objecten bevatten namelijk alleen data, geen logic. Inheritance kun je het beste alleen toepassen in gevallen dat gedrag van een object veranderd. Omdat data objecten geen gedrag hebben kunnen ze deze ook niet anders hebben dat hun parent/child.

Als we naar je tweede voorbeeld gaan zien we dat er een duidelijk probleem ontstaat: Onze data objecten bevatten logica. Dit maakt het geheel veel moeilijker. Stel nu bijv. dat we moeilijkere criteria krijgen voor het opwaarderen van punten (bijv. mag alleen +10 als de slijper zijn werk goed heeft gedaan, mag alleen als de huidige valuta boven een bepaalde waarde zit, etc.). Je kan je indenken dat ons mooie data object ineens een bende van logica gaat worden.

Je kunt deze logica dus het beste opsplitsen naar een andere class, bijv. GemPointsCalculator:
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
interface GemPointsCalculator
{
    public int pointsForGem(Gem gem);
}

class SimpleGemPointsCalculator implements GemPointsCalculator
{
    public int pointsForGem(Gem gem)
    {
        switch (gem.color()) {
            case 'red':
                return gem.points() + 1;

                break;
            case 'blue':
                return gem.points() + 10;

                break;
        }
    }
}


Nu gaat deze class op gegeven moment ook veel logica bevatten. In dat geval moet je het waarschijnlijk nog meer opsplitsen, waardoor elke Gem zijn eigen GemPointsCalculator krijgt en een algemene calculator die deze dan kan aanroepen.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
class RedGemPointsCalculator implements ColeredGemPointsCalculator
{
    public string[] supportingColors()
    {
        return ['red'];
    }

    public int pointsForGem(Gem gem)
    {
        return gem.points() + 1;
    }
}
// ...
 
Lord Gaga

Lord Gaga

15/02/2016 20:37:49
Quote Anchor link
Bedankt voor de reacties!

Ik denk dat ik het een beetje beter begrijp dan voorheen. :P

In dit geval was de Gem class een simpel voorbeeld.
Waar ik in de praktijk mee bezig ben zijn enkele JavaScript spelletjes, en deze spelletjes bevatten natuurlijk elk onderdelen die in elk spelletje aanwezig zijn:

- De mainloop (voor game logic en renderen van entities)
- Scenes (voor menu's, verschillende levels, etc.)
- Entities (de objecten in de spelletjes)

Op dit moment twijfel ik dus over de 2 aanpakken in mijn openingspost, maak ik gebruik van:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
var game = new Game(
{
    onUpdate: function()
    {
    },
    onRender: function()
    {
    }
});


of toch van inheritance (pseudocode):

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
class abstract Game
{
    public void update()
    {
    }
    
    public void render()
    {
    }
}


En hoe doe ik dit met de andere objecten? (Scene, Entity, AssetLoader, etc.)

Wanneer ik naar verschillende JavaScript frameworks kijk, zie ik dat vooral de eerste manier vaak wordt toegepast, maar toch twijfel ik. (Ik weet dat ik beter gebruik kan maken van een bestaand framework maar ik wil het toch onder de knie krijgen dit zelf te kunnen.)
 



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.