[oop] abstract vraagje

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Software Ontwikkelaar

Java/Kotlin Developer Ben jij een ervaren Java/Kotlin developer met een passie voor het automatiseren van bedrijfsprocessen? Wil je graag deelnemen aan uitdagende projecten bij aansprekende klanten? En ben je op zoek naar een professioneel, ambitieus en dynamisch bedrijf om je carrière verder te ontwikkelen? Kom dan ons team bij Ritense in Amsterdam versterken! Zo ziet de functie eruit: Als Java/Kotlin developer bij Ritense ben je verantwoordelijk voor de ontwikkeling en implementatie van applicaties die bedrijfsprocessen automatiseren, zodat onze klanten slimmer, efficiënter en klantgerichter kunnen werken. Als developer ben je in de lead en zorg je voor de correcte oplevering van

Bekijk vacature »

Android developer

De functie Schiphol is een plek om te reizen, te verblijven en te werken. Door middel van data en technologie richten we op al deze gebieden het leef- en werkklimaat optimaal in en zorgen we voor een slimmere en efficiëntere operatie. Wij ontwikkelen nieuwe producten en diensten vanuit de wensen en behoeften van onze klanten, voorspellen passagier flows en testen digitale oplossingen om rijen en andere pijnpunten in het proces te verminderen. Met slimme feedback van sensortechnologie maken we zelfs data van toiletten en stoelen inzichtelijk en bruikbaar. Het Commercial Platform bestaat uit multidisciplinaire teams met een end-2-end verantwoordelijkheid voor

Bekijk vacature »

PHP Developer

Functieomschrijving Vanuit het hoofdkantoor in omgeving Roosendaal, ontwikkel je als PHP Developer niet alleen webapplicaties, maar ben je verder ook gefocust op het continu inspelen op nieuwe trends en ontwikkelingen m.b.t software development. Naast het bouwen van webapplicaties, ontwikkelen zij ook webshops en websites voor gave opdrachtgevers! Wat ga je doen? Het schrijven van schone en efficiënte codes volgens het Symfony framework; Het ontwerpen en implementeren van webapplicaties met het Symfony-framework; Onderhouden en updaten van bestaande applicaties die zijn gebouwd met het Symfony framework; Het testen van ontwikkelde applicaties om te zorgen dat ze goed functioneren en voldoen aan de

Bekijk vacature »

TypeScript developer (tot € 6.000, - bruto pe

Functie Om bovenstaande ambities waar te kunnen maken zijn ze op zoek naar een ervaren Typecript developer die niet alleen zichzelf verder ontwikkelt, maar het ook leuk vinden om op termijn meer junior collega’s op pad te helpen. Je zult aan de slag gaan met het migreren van hun bestaande UI in Angular. Maar ook het ontwikkelen van een mobiele app. Hierbij hechten ze veel waarde aan User Experience en kiezen ze duidelijk voor kwaliteit i.p.v. snelheid. Je krijgt dus de ruimte om vanuit gedegen onderzoek te werk te gaan en het borgen van kwaliteit staat hoog in het vaandel.

Bekijk vacature »

Traineeship Full Stack .NET Developer

Dit ga je doen Start op 7 augustus 2023 bij de Experis Academy en ontwikkel jezelf tot een gewilde Full Stack .NET Developer. Maar hoe ziet het traineeship eruit en wat kun je verwachten? Periode 1 De eerste 3 maanden volg je fulltime, vanuit huis, een op maat gemaakte training in teamverband. Je leert belangrijke theorie en krijgt kennis van de benodigde vaardigheden en competenties die nodig zijn om de IT-arbeidsmarkt te betreden. Zowel zelfstandig als in teamverband voer je praktijkopdrachten op het gebied van front- en backend development uit. Wat er per week op het programma staat kun je

Bekijk vacature »

Magento developer

Functie E-commerce is een ‘’snelle’’ wereld. Om hierin continu voorop te blijven omarmen ze in een vroeg stadium nieuwe technieken. Een webshop is nooit af en kan altijd beter, sneller en efficiënter. Tegelijkertijd hebben ze vanaf hun oprichting altijd vastgehouden aan kwaliteit boven snelheid, en dit loont. Als back-end developer fungeer je als het verlengstuk van hun klanten. Technisch complexe zaken pak je met liefde op, en hierin werk je samen met o.a. front-end developers en designers. Klanten verwacht hierin kwaliteit van het hoogste niveau en een proactieve, meedenkende rol bij het maken van zowel technische als strategische keuzes. Ga

Bekijk vacature »

Front-end developer (Vue.js) gezocht!

Functie Als Front-end developer is het jouw doel om efficiënte en effectieve frontend code te ontwerpen, ontwikkelen en onderhouden die goed aansluit bij de functionele behoefte vanuit de klant. Je zorgt voor optimale SEO-resultaten, sitespeed en frontend security. You build it, you run it, you own it! Je maakt deel uit van een DevOps Scrum team en werkt samen met back-end developers, test-engineers, interaction designers en een projectmanager. Er zijn verschillende groepen Scrum teams. Een roadmap team is jouw ‘’thuisbasis’’, daar wordt gewerkt aan doorontwikkeling van bestaande omgevingen voor een aantal klanten. Hiernaast zijn er projectteams waar nieuwe omgevingen worden

Bekijk vacature »

Senior Mobile Developer

Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. Ga je bij ons als Senior Mobile Developer aan de slag? Dan werk je dagelijks met collega’s aan de mooiste IT-projecten. Deze snelgroeiende groep collega’s krijgt energie van hun vak en dat merk je op de werkvloer. Onze klantenkring is groot en divers, dat vraagt om flexibiliteit van jou. Tegelijkertijd betekent dit dagelijks nieuwe dingen leren én dat geen werkdag hetzelfde is. Natuurlijk krijg jij de mogelijkheid je te certificeren. We organiseren regelmatig technische Meet-ups en doen we veel aan kennisdeling waarbij iedereen welkom is, zowel

Bekijk vacature »

.NET developer

Functie Als junior .NET Developer start jij in een team met 15 developers. In het team is er genoeg senioriteit om ervoor te zorgen dat jij de juiste begeleiding krijgt. Jij begint als eerst alle software pakketten en processen eigen te maken. Vervolgens ga jij deze software programmeren, onderhouden en testen. Ook ga jij research doen naar nieuwe mogelijkheden en zoek jij uit hoe je dit kan implementeren. Jullie werken intern op project basis en afhankelijk van het project werken jullie wel of niet iedere ochtend met een standup. 50% van jullie werkzaamheden is maatwerk en de overige 50% is

Bekijk vacature »

Senior Front-end developer Consultancy

Functie Als front-end developer ga je aan de slag voor verschillende klanten, waarbij veel rekening wordt gehouden met waar je woont (dit is altijd binnen het uur), en word er gezocht naar een organisatie die past bij jou. Zowel qua persoonlijke ambities als de technische aansluiting. De opdrachten duren gemiddeld 1 à 2 jaar maar dit hangt ook af van je wensen. Je werkt in een teamverband voor een klant en zult nauw samenwerken met zowel eigen collega’s als die bij de klant werkzaam zijn. Ze zijn op zoek naar een technische front-end developer die ruime ervaring heeft in één

Bekijk vacature »

Full stack 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 »

PHP Developer

Zie jij mogelijkheden om onze tooling technisch te verbeteren en uit te bouwen? Over Jobmatix Jobmatix is een innovatieve en internationale speler op het gebied van jobmarketing. Onze jobmarketing automation tool helpt organisaties bij het aantrekken van nieuw talent door vacatures digitaal, geautomatiseerd en op een efficiënte manier te adverteren en onder de aandacht te brengen bij de doelgroep op 25+ jobboards. Volledig performance-based, waarbij organisaties betalen op basis van cost per click of cost per applicant. Maandelijks wordt onze jobmarketing automation tool al gebruikt door vele directe werkgevers, intermediairs en mediabureaus, waaronder Picnic, Rijkswaterstaat, AdverOnline, Schiphol, DPA, Teleperformance en

Bekijk vacature »

Senior Developer Betty Blocks Blauwe Haven Rotterd

Functieomschrijving Voor de Politie zijn wij opzoek naar een Senior Developer Betty Blocks Blauwe Haven Rotterdam. De politieorganisatie heeft jaarlijks te maken met een aanzienlijk aantal politiemedewerkers die vanwege mentale overbelasting niet of beperkt inzetbaar zijn. De Blauwe Haven Rotterdam ondersteunt deze politiemedewerkers in hun herstel en re-integratieproces. De huidige digitale systemen van de Politie bieden onvoldoende ondersteuning in het herstel- en re-integratieproces van politiemedewerkers. Zowel voor de politiemedewerkers als voor de organisatie. Politiemedewerkers worden buitengesloten, waardoor zij eigen regie verliezen. Begeleiders kunnen de voortgang van de medewerkers niet goed monitoren. Management beschikt niet over de mogelijkheid trends te signaleren

Bekijk vacature »

API Developer Red Hat Fuse

Dit ga je doen Als API Developer zal je verantwoordelijk zijn voor het: het maken van API's en het correct laten draaien van de API's op het platform. Hierdoor kom je in aanraking met Red Hat Fuse, Springt Boot, 3Scale, Red Hat SSO, Openshift en Azure DevOps; zorgen voor de kwaliteit van de ontwikkeling, integratie en prestaties van de API's; zorgen voor een stabiel integratieplatform. Hier ga je werken Deze organisatie is een toonaangevende speler in de vastgoedbranche en telt momenteel ruim 500 medewerkers. Met meer dan 150 applicaties staat er een complex applicatielandschap dat hoofdzakelijk op OpenShift, Azure en

Bekijk vacature »

.NET developer

Functie Als .NET developer werk jij samen in een multidisciplinair ontwikkel team met 1-2 Senior .NET developers, twee front-end developers, Data Scientists en één UX designer. Als team werken jullie aan het ontwikkelen van een Cloud based applicatie en aan het stabieler maken van deze applicatie. Ook unit testing gaat erg belangrijk worden in jouw nieuwe functie. Samen met de Senior .NET ontwikkelaar wordt jij verantwoordelijk voor het ontwikkelen van de API. Jullie werken met veel data en incidenteel komen er ook data vraagstukken en zullen er wat queries gedraaid moeten worden. Dit betekend dat jij veel gaat werken met

Bekijk vacature »

Pagina: « vorige 1 2

Wouter J

Wouter J

23/02/2014 20:06:40
Quote Anchor link
Dat laatste voorbeeld is compleet anders dan je voorbeeld met Users. In je laatste voorbeeld behoor je het strategy pattern te gebruiken. Hier hoor je helemaal geen inheritance voor te gebruiken (inheritance is 1 van de meeste misbruikte methodes in OO).

Met het strategy pattern heb je 1 klasse: Vehicle (voertuig, hoe je het beestje noemen wil) Dan hebben we vele andere strategy klassen die het gedrag van dit voortuig bepalen. Bijv:
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
40
41
42
43
44
45
46
47
48
49
50
<?php

interface VehicleHorn
{
    public function alert();
    public function normal();
}


class Toot implements VehicleHorn
{
    public function alert() { return 'TOOOEET!!'; }
    public function normal() { return 'toettoet'; }
}


class Bell implements VehicleHorn
{
    public function alert() { return 'TRIIING!'; }
    public function normal() { return 'tringtring'; }
}


class NoHorn implements VehicleHorn
{
    public function alert() { return '*silence*'; }
    public function normal() { return '*even more silence*'; }
}


class Vehicle
{
    protected $horn;

    public function __construct(VehicleHorn $horn)
    {

        $this->horn = $horn;
    }


    public function useHorn($alert = false)
    {

        return $alert ? $this->horn->alert() : $this->horn->normal();
    }
}


$car = new Vehicle(new Toot);
echo $car->useHorn(); //> 'toettoet'

$bicycle = new Vehicle(new Bell);
echo $car->useHorn(true); //> 'TRIIING!'

$oldBicycle = new Vehicle(new NoHorn);
echo $car->useHorn(); //> '*silence*'
?>
 
PHP hulp

PHP hulp

14/05/2024 12:38:44
 
Dennis Stolmeijer

Dennis Stolmeijer

23/02/2014 20:22:30
Quote Anchor link
Ozzie PHP op 23/02/2014 19:57:01:
Jongens, de discussie dwaalt een beetje af. Ik ga mijn vraag nog een keer stellen en ben dan benieuwd naar jullie antwoord. We vergeten even het hele database gebeuren.

Stel we hebben een auto en een fiets. Beiden zijn voertuigen, dus het lijkt me dan zinvol om een abstracte class Voertuig te maken. Mee eens?

Nu is mijn vraag wat er in die abstracte class thuis hoort.

We kunnen stellen dat ieder voertuig kan sturen, remmen en gasgeven. Dus in de voertuig class kunnen we de methods stuurLinks, stuurRechts, rem en gas zetten. Maar... hoort daar bijv. ook een method getNummerbord in? Veel voertuigen hebben een nummerbord, maar een fiets bijvoorbeeld niet. Plaatsen we de getNummerbord method in de voertuig class en accepteren we dat het mogelijk is dat iemand van een fietsobject het nummerbord opvraagt? Of plaatsen we getNummerbord alleen in de auto class?


Dit is een hele goeie vraag, zoals jij een paar berichten terug al zei: zijn er twee mogelijke manier van handelen. Welke manier van handelen het wij aanraden ligt naar mijn mening aan het aantal methoden/variabelen die fiets en auto van elkaar verschillen. Wanneer je er dus veel verschil is tussen auto en fiets zou ik 2 aparte klassen maken die ook mappen naar een Fiets/Auto tabel waarna die verwijzen naar een Voertuig tabel.

Wanneer de verschillen tussen een auto en fiets klein zijn dan zal ik een klasse en een tabel Voertuig ook accepteren.
 
Ozzie PHP

Ozzie PHP

23/02/2014 20:34:38
Quote Anchor link
@Wouter: thanks voor je voorbeeld. Ik snap ook wel wat je bedoelt. Maar wat doe je dan met een voertuig wat wel of niet een nummberbord heeft? En ieder voertuig moet sturen, remmen en gasgeven. Dan gebruik je daar toch wel een abstracte class voor die je extend?
 
Wouter J

Wouter J

23/02/2014 23:17:38
Quote Anchor link
>> Dan gebruik je daar toch wel een abstracte class voor die je extend?

Je extend niet, je hebt maar 1 klasse: Vehicle.

En om maar in het voorbeeld te blijven, ieder voertuig moet sturen, remmen en gasgeven. Maar als ik rem op een fiets doe ik dat met mijn handen en in een auto met mijn voet. Gasgeven doe ik op de fiets door als een gek rondjes te maken met mijn voet en in een auto door een pedaal door de vloer te drukken. Als ik stuur in een auto doe ik dat door het stuur te draaien, zit ik in een vliegtuig dan doe ik dat weer met 2 pedaaltjes en zit ik in een helikopter dan doe ik dat door een knuppel alle hoeken van de cabine te laten zien.
Zit ik op een segway dan doe ik dit allemaal door mijn lichaam te bewegen.

Dat alles iets moet kunnen hoeft niks te zeggen dat de manier waarop overal hetzelfde is. En als je ergens niet zeker van kan zijn dan mag je in de OO wereld jezelf er zeker niet op limiteren.

Gelukkig zijn er nog wel dingen die zeker zijn. Een User heeft bijv. altijd een naam en geboortedag. Of die een adres heeft weet je niet. En dan komen we weer bij een ander belangrijk OO principe: Iets wat veranderd moet los worden gekoppeld van hetgeen dat constant is.
 
Ozzie PHP

Ozzie PHP

23/02/2014 23:23:39
Quote Anchor link
>> Je extend niet, je hebt maar 1 klasse: Vehicle.

Oké... maar hoe doe je dat dan met een nummerbord?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$car
= new Vehicle;
$car->getLicensePlate();

$bike = new Vehicle;
$bike ->getLicensePlate(); // dit klopt niet, want een fiets heeft geen nummerbord
?>

>> En dan komen we weer bij een ander belangrijk OO principe: Iets wat veranderd moet los worden gekoppeld van hetgeen dat constant is.

Oké... je weet niet of ie een adres heeft zeg jij. Bedoel je dan dus, dat het adres NIET tot de default user class behoort?
 
Wouter J

Wouter J

23/02/2014 23:36:45
Quote Anchor link
>> maar hoe doe je dat dan met een nummerbord?

Een fiets heeft ook een registratie nummer, die staat welliswaar niet op een nummerbord, maar hij heeft er wel 1 (waarschijnlijk ergens in het frame gegraveerd). En een marineschip heeft ook een nummerbord, maar dan niet zo'n geel ding, maar een grote naam op de zijkant van het schip. Een nummerbord in nederland is ook weer anders dan een nummerbord in frankrijk (kleur enzo...). Dus ook dit wordt doormiddel van het Strategy pattern opgelost.

>> Bedoel je dan dus, dat het adres NIET tot de default user class behoort?

Er is geen default user class, er is maar 1 user class. En inderdaad, het adres hoort daar naar mijn mening van losgekoppeld te worden.

Edit:
Even mijn laatste statement uitleggen. Ik zou een Address class linken aan een User object ipv een User object aan een Address klasse. Dus:
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
// jij
$person = Person::born('Jaap', new \DateTime());
$person->livesIn(Address::parse('Janpietstraat 12', Postcode::parse('1643 KS')));

$post->sendCartTo($person);

// ik
$address = Address::parse('Janpietstraat 12', Postcode::parse('1643 KS'));
$address->assignTo(Person::born('Jaap', new \DateTime()));

$post->sendCarTo($address);
?>
Gewijzigd op 23/02/2014 23:42:24 door Wouter J
 
Ozzie PHP

Ozzie PHP

23/02/2014 23:40:47
Quote Anchor link
>> Er is geen default user class, er is maar 1 user class.

Ik bedoel eigenlijk een abstract user class, bijv.

Admin extends User

Is dat niet goed?

>> Een nummerbord in nederland is ook weer anders dan een nummerbord in frankrijk (kleur enzo...). Dus ook dit wordt doormiddel van het Strategy pattern opgelost.

Ah oké :)
 
Wouter J

Wouter J

23/02/2014 23:49:32
Quote Anchor link
>> Is dat niet goed?

Nee, dat is 1 van de gevallen waarin inheritance overgebruikt wordt. Ik was vroeger een normaal lid van dit forum en nu ben ik een moderator. Ben ik nu ineens een andere persoon? Nee, ik ben nog steeds Wouter en noch mijn lichaam noch mijn ziel zijn veranderd (voor zover ik kan zien...). Waarom zou ik dan wel ineens een andere klasse zijn?

Om weer terug te komen op het principe van toen net: Het veranderlijke is hier wat de user kan, de rest blijft het zelfde. Dit is dus niet op te lossen door het veranderlijke gewoon nog een klasse op te schuiven, het zit dan nog steeds bij elkaar, alleen zie je dat in je code niet meer. Wat we echt moeten doen is wat een User mag loskoppelen van een User. Dit kun je bijv. doen door een Role object erbij te maken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$ozzie
= User::register('Ozzie');
$ozzie->setRoles(Role::create('READ'), Role::create('WRITE'), Role::create('EDIT_OWN'));

$wouter = User::register('Wouter');
$wouter->setRoles(Role::create('READ'), Role::create('WRITE'), Role::create('DELETE'), Role::create('EDIT'));

$guest = User::register('guest1235');
$guest->setRoles(Role::create('READ'));
?>


Bekijk trouwens ook even mijn edit, mocht je die gemist hebben.
Gewijzigd op 23/02/2014 23:49:57 door Wouter J
 
Ozzie PHP

Ozzie PHP

24/02/2014 00:03:49
Quote Anchor link
>> Nee, dat is 1 van de gevallen waarin inheritance overgebruikt wordt. Ik was vroeger een normaal lid van dit forum en nu ben ik een moderator. Ben ik nu ineens een andere persoon? Nee, ik ben nog steeds Wouter en noch mijn lichaam noch mijn ziel zijn veranderd (voor zover ik kan zien...). Waarom zou ik dan wel ineens een andere klasse zijn?

Maar zo zie ik het toch echt heel vaak hoor. En nee, je bent niet een ander persoon, maar je hebt bijv. andere rechten. In plaats van dat je zegt $wouter = new User(), zeg je dan $wouter = new Admin(), waarbij de Admin klasse dan meer rechten heeft dan de "default" user.

Begrijp me overigens niet verkeerd. Ik begrijp jouw insteek ook. Ik vraag me dus af, is dit een kwestie van persoonlijke voorkeur, of is het een daadwerkelijk beter dan het ander?

>> Bekijk trouwens ook even mijn edit, mocht je die gemist hebben.

Thanks, had 'm inderdaad gemist. Ik snap wat jij doet en ik snap oop de gedachtengang. Wat ik alleen niet begrijp... als je iemand een kaart wil sturen, dan ga je uit van die iemand, en niet van die iemand z'n adres. In je code wil je toch zoiets kunnen doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$user
= $this->getUser();
$post->sendCardTo($user->getAddress());
?>
 
Wouter J

Wouter J

24/02/2014 00:26:34
Quote Anchor link
>> Ik vraag me dus af, is dit een kwestie van persoonlijke voorkeur, of is het een daadwerkelijk beter dan het ander?

De een (1 klasse) volgt de OO basisprincipes, de ander niet.

>> als je iemand een kaart wil sturen, dan ga je uit van die iemand, en niet van die iemand z'n adres

Mijn brief gaat uit van de persoon. De enveloppe gaat uit van het adres, die je ergens hebt verkregen.
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
<?php

$person
= ...;

$letter = Letter::write(<<<EOT
Hallo {$person->getName()},

...

EOT
);

// YellowPages#getAddressForPerson is de factory van Address object (DataMapper als het ware)
$address = YellowPages::getAddressForPerson($person);

$post->sendCardTo($address);
?>


Merk ook op hoe veel dichter deze code bij de waarheid staat dan jouw code. Ik heb geen persoon waarvan ik het adres krijg, dat adres haal ik uit het telefoonboek of een adresboekje.
Gewijzigd op 24/02/2014 00:28:02 door Wouter J
 
Ozzie PHP

Ozzie PHP

24/02/2014 00:32:20
Quote Anchor link
>> Merk ook op hoe veel dichter deze code bij de waarheid staat dan jouw code. Ik heb geen persoon waarvan ik het adres krijg, dat adres haal ik uit het telefoonboek of een adresboekje.

Hehe, ja, ik snap wel wat je bedoelt. Maar ik vind het wel lastig om dat zelf zo te bedenken. En hoe zit dat dan bijv. met een e-mailadres? Koppel je die wel aan de persoon zelf?
 

Pagina: « vorige 1 2



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.