Inheritance

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Fullstack Java Developer

Functieomschrijving Are you an experienced Fullstack Java Developer looking for an international, creative and innovative environment? Would you like to work on a self-service data platform, making sure our data makes its way from a vast array of sources to the right place? At Randstad Groep Nederland (HQ) we are looking for you! We’re looking for a Fullstack Java Developer available to join our internal team immediately. Fullstack Java Development at Randstad Groep Nederland (HQ) Team Chef’s Special consists of a group of experienced professionals who together are pioneering in a development environment that is new to Randstad. Six Java

Bekijk vacature »

Android Software Developer / Atlassian

Over het bedrijf: Wij zijn een grote speler binnen app development. Ben jij een ervaren Android Developer? Ben je een expert met Android architectuur? Vaste baan: Android Software Developer Kotlin 2.700 - 4.300 Android Developer Op dit moment zijn we een scale-up. We zijn een sterke speler binnen app development en zijn hard op weg om marktleider te worden. Wij bieden verschillende opleidings- en ontwikkelingsmogelijkheden binnen ons bedrijf, waardoor je de kans krijgt om door te groeien. Daarnaast hebben we een laagdrempelige en gezellige bedrijfscultuur. Bij ons werk je aan onze eigen bedrijfsapplicaties. Je ontwikkelt met ons de meest nieuwe

Bekijk vacature »

.NET Software Developer – Smart Logistics

Heb jij ervaring met applicatie ontwikkeling, testen en onderhouden van missie-kritische .NET applicaties? En wil je graag met de nieuwste technologieën werken binnen een DevOps scrumteam? Lees dan snel verder! Wat ga je doen? “Use digital to move smarter De unit Smart Logistics binnen de Transport & Logistics sector van CGI ontwerpt, bouwt en onderhoudt veelal missie-kritische applicaties voor onze klanten uit de transport en logistieke sector. Zonder deze sector worden onze pakketjes niet op tijd afgeleverd, rijden de treinen niet meer van a naar b en varen schepen niet veilig de haven binnen. Om deze transport en logistieke ketens

Bekijk vacature »

Magento Developer

Bedrijfsomschrijving Dit informele bedrijf dat een aantal bekende webshops in beheer heeft is per direct op zoek naar een Senior Magento developer die de lopende webshops en andere e-commerce uitingen naar zijn hand zet. Deze gezellige organisatie telt 13 innovatieve jonge en ervaren medewerkers. Ze realiseren en beheren succesvolle webshop oplossingen en doen dit van A tot Z. Hierbij kun je denken aan bijvoorbeeld oplossingen voor warehouse en koppelingen naar kassasystemen. Bij dit bedrijf willen ze niet alleen een webshop opleveren maar gaat het om het doorontwikkelen, verbeteren en optimaliseren. Op dit moment zoeken zij een senior PHP developer die

Bekijk vacature »

PHP Developer Online Communicatiebranche / JavaScr

Wie wordt jouw werkgever?: Wij zijn werkzaam op het gebied van interne online communicatie. Heb jij uitstekende kennis van PHP en MySQL? Heb je ervaring met de online communicatiebranche? Vaste baan: PHP Developer Online Communicatiebranche MySQL 2.800 - 4.500 PHP Developer Wij hebben een hecht team van twintig medewerkers. We werken we elke dag aan de beste netwerken. Wij zijn een veelzijdige organisatie. Je werkt voor onze eigen IT organisatie. We werken met moderne technologie en staan open voor innovatie. Wat ga je precies doen?: Voor de vacature als PHP Developer Eindhoven MySQL ga je het volgende doen: Terwijl je

Bekijk vacature »

Software Developer OutSystems @ Regio Den Bosch

2021-07-21 iSense Software Developer OutSystems Heb je al ervaring met OutSystems of wil je je hierin (verder) verdiepen? Wil je graag werken bij een ambitieus bedrijf dat de grootste bedrijven van Nederland als klanten heeft? Dan is dit dé vacature voor jou! ISMO50519 Organisatie Voor onze klant, een ambitieus en vooruitstrevend bedrijf in regio Den Bosch, zoeken we een Software Developer die met OutSystems aan de slag gaat. Het bedrijf werkt voor verschillende bedrijven en heeft de grootste organisaties van Nederland als klanten! Je komt te werken in een team dat dedicated voor een klant werkt zodat je alle ins

Bekijk vacature »

IT-traineeship Low Code Developer

Vind jij het leuk om veel contact te hebben met een klant en je te verdiepen in een domein? Lijkt het je interessant om enerzijds met de klant mee te denken, maar tegelijkertijd ook zelf een bijdrage te leveren aan de implementatie van een IT oplossing? Wij zijn op zoek naar starters die aan de slag willen als low-code engineer. In deze functie bouw je aan applicaties met behulp van een low-code platform, zoals Outsystems, Blueriq, Mendix of Pega. Dergelijke platformen stellen je in staat om snel een werkende applicatie te ontwikkelen en zijn hierdoor heel geschikt voor maatwerk projecten.

Bekijk vacature »

Full Stack Java Developer Graduate Program - Exper

Via Experis Academy krijg je een unieke kans om de in de branche gewilde expertise op te doen die jou tot een gewilde Full Stack Java Developer met een frontend-specialisatie maken. Het programma duurt 21 maanden en eindigt met een vaste baan bij een van onze vele, boeiende klanten, of je blijft bij ons (Experis) werken. Ons programma tot Java Developer Experis Academy start met een op maat gemaakte cursus die drie maanden duurt. Gedurende deze maanden komen theorie, praktijk en Java-certificeringen aan bod. Hierbij is het onderwijsprogramma gebaseerd op de principes als versnelde training en flipped classroom. De volgende

Bekijk vacature »

HR Organization Developer NL/DE

Als Organization Developer help je mee Coolblue zo in te richten dat alle Coolblue’ers optimaal hun werk kunnen doen. Wat doe je als HR Organization Developer NL/DE bij Coolblue? Heb jij een passie voor HR en doorvoeren van verbeteringen en wil je deze tastbaar maken door te werken aan interessante projecten, onder andere het uitbreiden van CoolblueBezorgt in Duitsland? Dan is dit dé functie voor jou. Ook HR Organization Developer worden bij Coolblue? Lees hieronder of het bij je past. Dit vind je leuk om te doen Zorgen voor het juiste organisatiemodel op jouw afdelingen, voor vandaag en voor de

Bekijk vacature »

Xamarin C# Developer

Als Xamarin C# Developer zorg je ervoor dat onze cross-platform mobiele apps onze medewerkers de best mogelijke manier geven om Coolblue te beheren. Wat doe je als Xamarin C# Developer bij Coolblue? Je specialiteit is ofwel C# OF mobiele app code, en je geniet van het werken met Xamarin. Je vindt het leuk om samen met je collega's te programmeren, om zo een hogere kwaliteit in de codebase te garanderen. Daarnaast denk je na over technische beslissingen zoals architectuur, tools en processen. Ook houd je de performance van je app in de gaten en analyseer je samen met je team

Bekijk vacature »

Developer / Low-code @ Regio Lelystad

2021-08-16 iSense Developer Low-code Vind jij het leuk om als Ontwikkelaar te werken aan een eindproduct voor verschillende grote klanten in Nederland en voel jij je prettig binnen een familiebedrijf? Lees dan snel verder en solliciteer! ISK50314 Nieuw Organisatie Als Developer 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. De organisatie

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 AWS. Problemen oplossen

Bekijk vacature »

PHP Developer / Yii / logistiek / WMS @ Regio Den

2021-06-23 iSense PHP Developer / Yii / logistiek / WMS Ben jij een Software Ontwikkelaar die zijn weg kent met PHP? Heb je affiniteit met de logistieke sector en wil je aan een maatwerk WMS pakket werken? Dan is dit dé vacature voor jou! ISDE50270 Organisatie Voor onze klant, een innovatieve speler op de logistieke markt, zoeken wij een Software Ontwikkelaar die zijn weg met PHP kent. Ze werken met het Yii 2 framework maar ervaring met Laravel of Symfony is ook meer dan welkom. Het bedrijf maakt maatwerk oplossingen voor de logistieke sector waaronder een WMS pakket. Er wordt

Bekijk vacature »

Typescript Developer / Cloud platform @ Regio Eind

2021-08-20 iSense Typescript Developer / Cloud platform Ben jij een Typescript Developer en werk je graag aan innovatieve producten? Lees dan snel verder! ISTA47805 Organisatie 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 gebruikt door verschillende klanten. Hierbij

Bekijk vacature »

Full stack developer - Oil & Gas

Ben jij een allround ontwikkelaar die wil bijdragen aan de energietransitie? Lees dan verder! Wat ga je doen? Als Full Stack Java Ontwikkelaar draag je verantwoordelijkheid voor het gehele proces van het omzetten van wensen, problemen of vragen naar concrete oplossingen. Integratie, testen, vastleggen van kennis en beslissingen, problem management en automation zijn onderdeel van je takenpakket in zowel SAFE of DevOps gestuurde omgevingen als ook in omgevingen die nog werken volgens het traditionele waterval model. Als ontwikkelaar krijg je alle mogelijkheden om je technisch verder te ontwikkelen en samen te werken met gedreven collega's. Wat breng je mee? •

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

22/09/2021 16:02:53
 
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.