[oop] abstract vraagje

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior Front-end Developer

Wordt jij de nieuwe Front end specialist / developer? Dan werk je dagelijks met collega’s aan de mooiste IT-projecten. Sogeti is een organisatie met een goede werksfeer en zo min mogelijk hiërarchische verhoudingen. 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 binnen als

Bekijk vacature »

Medior .NET Ontwikkelaar

In het kort Als .NET ontwikkelaar ga je binnen onze business unit Transport en Logistiek aan de slag complexe maatwerk software voor bedrijf kritische systemen binnen de technische automatisering. Denk bijvoorbeeld een IoT-oplossing voor de logistieke sector waarbij we van ruim 200.000 machines de telemetrie en events verwerken. We zijn actief in de distributielogistiek, havenlogistiek en productielogistiek. Naast C# en .NET Core maken we ook gebruik van Azure technologie. En als trotse Microsoft Gold Partner leren we graag van en met jou. Wil jij jezelf blijven ontwikkelen binnen de technische automatisering met .NET, dan gaan we deze uitdaging graag met

Bekijk vacature »

Applicatiebeheerder/ Ontwikkelaar

Dit ga je doen - Verantwoordelijkheid dragen voor het complexe applicatielandschap; - Schakelen met eindgebruikers en leveranciers; - Verdeling in werkzaamheden tussen dagelijks beheer ontwikkelen; - Het analyseren van de behoeften van gebruikers en het vertalen hiervan naar functionele specificaties voor de applicaties; - Actief bijdragen aan het leveren van passende oplossingen voor het applicatielandschap. Hier ga je werken Deze organisatie, gevestigd in de regio van Amsterdam is een van de meest toonaangevende mediaorganisaties in Nederland. Door de organisatiecultuur krijg jij veel ruimte om initiatief te nemen en zelfstandig aan het werk te gaan. Samen met het IT team zorg

Bekijk vacature »

Applicatie ontwikkelaar

Functie omschrijving Zelfstandige applicatie ontwikkelaar gezocht voor familiair bedrijf in omgeving Capelle ad Ijssel Ben jij op zoek naar een nieuwe uitdaging en zoek jij een informele werkgever waar je zelfstandig kunt werken binnen een leuk IT team, lees dan snel verder want wie weet zijn wij op zoek naar jou! Een deel van jouw werkzaamheden: Onderhouden en ontwikkelen van de IT systemen; Opzetten van Azure Cloud systemen, denk aan interfaces, hardware op de Cloud, webportalen of BI functies; Werken aan scripts binnen verschillende software applicaties, denk aan ERP en CAD; Ontwikkelen en implementeren van MS PowerApps en Power BI.

Bekijk vacature »

Fullstack 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 »

E-Identity Developer met Projectleider Kwaliteiten

Functieomschrijving Voor de kamer van koophandel zijn we op zoek naar een E-Identity developer met projectleider kwaliteiten. Voor deze opdracht zoekt KVK een Informatieanalist met Technisch Projectleider en ICT developer kwaliteiten, met kennis van E-identity. We zoeken in de breedte en niet specifiek in de diepte qua skillset. Een Junior Projectmanager, een Junior Informatieanalist, een Junior Developer (full stack), een Junior Designer en een Junior ICT architect ineen, met een sterk gevoel van stakeholder management en planning vaardigheden. Door de internationale setting, én de realisatie van ontsluiting van en naar basisregisters toe zijn wij op zoek naar enige ervaring binnen

Bekijk vacature »

Senior pega developer

You work on software that makes colleagues and customers happy! Thanks to your IT skills, De Mandemakers Groep really makes a difference for its customers. Do coding, testing and deployments make your heart beat faster? Then apply today as Senior Pega Developer at De Mandemakers Groep! Wat ga je doen? The job title gives it away: You will be developing Pega software. This ranges from technical design, coding and testing to test automation, deployments and bug fixing. Your goal is to continuously improve our systems so that colleagues can work efficiently and customers receive optimal service. You don't have to

Bekijk vacature »

PHP Developer

Functieomschrijving Vanuit het hoofdkantoor in de regio van Bergen op Zoom ben je als PHP Developer niet alleen gefocust op het ontwikkelen van Software. Daarnaast ben je ook voortdurend bezig met het zoeken naar nieuwe mogelijkheden en innovaties die essentieel kunnen zijn voor de efficiëntie van software ontwikkeling. Je deelt veel kennis en informatie met het team en ontvangt deze dan ook graag terug. Techstack: PHP, Symfony & mySQL. Bedrijfsprofiel Deze uitdagende opdrachtgever is ruim 20 jaar actief in de regio Bergen op Zoom. Het vooruitstrevende team staat de hele dag voor je klaar om je te helpen en ondersteunen.

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 »

Back-end Developer Java

Dit ga je doen Het (door)ontwikkelen van een zelfgebouwde applicatie in Java, Spring Framework, SQL, HTML, CSS en Javascript; End-to-end beheer m.b.t. de applicatie en koppelen van applicaties binnen het landschap; Ontwikkelen van rapportages voor de interne organisatie; Ontwikkelen van aanvullende functionaliteiten m.b.t. de applicatie; Uitvoeren van testen en code reviews. Hier ga je werken Binnen deze organisatie kom je te werken op de afdeling die medische gegevens verzamelt vanuit het hele land. Denk hierbij aan vertrouwelijke persoonsgegevens. Het team verwerkt al deze data met als doel het waarborgen en verbeteren van de kwaliteit van de zorg in heel Nederland.

Bekijk vacature »

Frontend Developer - Leeuwarden

Als Frontend Developer bouw jij mee aan het onderwijs van de toekomst! In een scrum team werken met jonge en enthousiaste collega’s, moderne technieken, ruimte voor eigen ontwikkeling en op een proactieve wijze kunnen meewerken aan innovatie binnen het onderwijs. Magister is het state-of-the-art softwarepakket dat scholen in het voortgezet onderwijs op alle fronten ontzorgt. Van leerlingenadministratie tot het ondersteunen van individuele leerlijnen, van toegang tot digitaal lesmateriaal tot het plannen van het lesrooster. In de Magister app bedient Magister ruim 2,5 miljoen gebruikers waarvan, dagelijks meer dan 600.000 unieke. Hiermee is Magister de absolute marktleider in onderwijsland. Wat vragen

Bekijk vacature »

.NET developer

Functie Als .NET ontwikkelaar ga jij aan de slag bij een van onze klanten actief in de High Tech Industrie. Onze klanten zijn voornamelijk gelokaliseerd in de omgeving van Eindhoven. Wij zijn erg selectief als het gaat om de projecten die wij accepteren en richten ons dan ook alleen op innovatieve en complexe projecten. Omdat onze klanten voornamelijk gespecialiseerd zijn in de machinebouw, werk jij ook vaak dicht tegen de machines aan. Ons team bestaat momenteel uit Embedded engineers, IOT developers en Cloud engineers. Wij werken voornamelijk aan Microsoft projecten waar er gebruik wordt gemaakt van WPF, UWP, .NET Core

Bekijk vacature »

SQL Database Ontwikkelaar

Functie omschrijving Kan jij goed overweg met complexe algoritmes en het schrijven van procedures in T-SQL? Heb jij al wat ervaring opgedaan met SQL en vind je het tijd voor de volgende stap? Lees dan snel verder! Dit software bedrijf, gespecialiseerd in de ontwikkeling van logistieke software, is op zoek naar een ervaren SQL database developer. Jouw werkzaamheden zullen onder andere bestaan uit: Je houdt je bezig met het ontwerp en de ontwikkeling van MS SQL server databases, dit doe je met T-SQL als programmeer laag. De begeleiding van projecten van A tot Z, je zult aansluiten bij meetings met

Bekijk vacature »

Back end developer Python, PHP

Functie Jij als full stack ontwikkelaar zult komen te werken samen met 1 PHP ontwikkelaar een PO en een flexibele schil aan ontwikkelaars . Samen ga je ervoor zorgen dat de huidige producten doorontwikkeld worden. De marketplace is geschreven in PHP Laravel en in de front end React. De roostersoftware is ontwikkeld in Python in combinatie met React in de front end. Jij zult voornamelijk (lees 75%) werken aan de roostersoftware. Momenteel ligt de uitdaging in het feit dat de roostersoftware breder schaalbaar moet worden zodat het voor meerdere flexwerkers ingezet kan worden. Verder willen ze financiële koppelingen gaan maken

Bekijk vacature »

Lead developer

Functie Als lead developer wordt jij verantwoordelijk voor een van onze development teams. Samen met de Software Architect bewaak jij de kwaliteit en uitvoering van onze complexe vraagstukken. Daarnaast ben jij verantwoordelijk voor het inschatten, designen en ontwikkelen van middelgrote tot grote veranderingen in de software. Ook coördineer jij het proces rondom complexe technische vraagstukken. Verder bestaat jouw takenpakket uit het volgende: – Het aansturen van jouw development team; – Het begeleiden van Junior Software Engineers; – Het maken van technische analyses m.b.t. nieuwe aanvragen en het tijdsbestek inschatten voor de uitvoering hiervan; – Het uitvoeren van de ontwikkeling van

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

19/12/2024 08:58:51
 
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.