[oop] interface implementeren

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ambitieuze medior developer

Wat je gaat doen: Heb jij al een paar jaar ervaring als developer maar wil jij naar the next level? In ons NextLevelDev Programma helpen wij jou om de volgende stap te zetten: een mooi programma aan trainingen op het gebied van Java, hippe frameworks, Agile/Scrum, OCP-certificering en optioneel: andere JVM-talen als Kotlin en Scala; Cloud (AWS, Azure, GCP) Soc 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

Bekijk vacature »

Back-end developer

Dit ga je doen Development d.m.v. XQuery, JSON/XML en REST API's; Ontwikkelen aan een tof en complex zorgplatform; Koppelingen maken met de NoSQL database; Testen en documenteren van de ontwikkelde functionaliteiten; Samenwerking met andere front- en back-end ontwikkelaars. Hier ga je werken Voor een vooruitstrevende organisatie binnen de zorg in Den Haag zijn wij opzoek naar een Back-end Developer die ervaring heeft met o.a.XQuery en Vue.JS of daarin graag zou willen ontwikkelen. Je zal ontwikkelen aan een tof en complex zorgplatform en koppelingen maken met de NoSQL database. Ook het testen en documenteren van de ontwikkelde functionaliteiten behoort tot jouw

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 »

Java Developer / Sociaal domein

Dit ga je doen Nieuwbouw en doorontwikkeling; Beheer en wanneer nodig onderhoud; Bijdrage leveren in het functioneel- en technisch ontwerptraject; Analyseren van productie verstoringen; Meedenken over vernieuwingen en verbeteringen. Hier ga je werken De organisatie waar jij komt te werken focust zich op software development met een maatschappelijk tintje. De afdeling software ontwikkeling bestaat uit vijf verschillende scrum teams, met allen hun eigen focus gebied. Zo zijn er een aantal teams die zich focussen op specifieke applicaties, maar is er ook een team gericht op projecten. Binnen de organisatie staat innovatie en kwaliteit voorop. Een aantal applicaties draait nog op

Bekijk vacature »

Software Ontwikkelaar PHP

Functie omschrijving Software Ontwikkelaar PHP gezocht! Wij zijn op zoek naar een ervaren PHP Software Ontwikkelaar om het team van onze opdrachtgever te versterken! De ideale kandidaat zal fungeren als verlengstuk van klanten en complexe technische vraagstukken met enthousiasme benaderen. Naast het werken met de nieuwste technologieën, ben je in staat om aan meerdere projecten tegelijkertijd te werken. Als je deze uitdaging aangaat, werk je nauw samen met front-end developers en draag je bij aan het realiseren van grote veranderingen bij klanten. Het bedrijf zoekt iemand die zichzelf graag uitdaagt en altijd streeft naar het leveren van de beste resultaten.

Bekijk vacature »

C#.NET Developer

Functieomschrijving Voor een software ontwikkelaar in de omgeving van Vught zijn we op zoek naar een gemotiveerde C# ontwikkelaar. Deel jij hun passie voor development en dan vooral in C#.NET? Dan kan dit wel eens jouw droombaan zijn! Jouw werkzaamheden zullen er ongeveer als volgt uit gaan zien Door de wensen van de klant goed te begrijpen ga jij aan de slag dit om te zetten naar passende oplossingen en werk je deze uit tot een sterk eindproduct. Je gaat je bezighouden met de ontwikkeling van webapplicaties en websites, dit doe je door middel van ASP.NET, MVC Frameworks en C#.

Bekijk vacature »

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 »

Junior Front end developer Onderwijssoftware

Functie Als Junior front end developer kom jij terecht in een klein, maar hecht team bestaande uit 5 andere developers (waarvan 2 senioren, 2 medior en 1 junior). Met de gezamenlijke missie om “ieder kind te helpen met onze software” wordt er dagelijks gepassioneerd en hard gewerkt aan ons in-house ontwikkeld platform. Deze software is gebaseerd is op AI, machine Learning en wetenschappelijke inzichten. Dagelijks zul jij werken met onze high traffic webapplicatie. We hebben ruim 300.00 gebruikers en meer dan 2 miljard records waar je te maken mee krijgt! Verder zul jij je bezighouden met: – Het ontwikkelen van

Bekijk vacature »

Junior .NET Software Developer

Dit ga je doen Software development met behulp van C# .NET en / of PHP, je mag zelf kiezen waar jij je in wil specialiseren Meedenken over het nieuwe pakket, waar moet het aan voldoen? Unit-, integratie- en diverse andere tests schrijven en uitvoeren Nauw samenwerken met je IT collega's zoals Testers, Developers, DevOps Specialisten en Architecten Jezelf ontwikkelen met behulp van trainingen en cursussen Hier ga je werken Onze klant, een grote speler in de medische sector, is op zoek naar een enthousiaste junior (of meer ervaren) Software Developer die klaar is voor een nieuwe stap in zijn of

Bekijk vacature »

Back End Developer

As a Back End developer at KUBUS you will be developing the (web) application and services of BIMcollab. You have a focus on the back end of our software, for which we mainly work with C# and .NET. We use a full-stack approach, which means that in addition to the back-end, you will also help with other parts of the code. As a software company, KUBUS is in a unique position. We build our own products that are used by tens of thousands of users worldwide. Our company is just the right size: big enough to make a real impact

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 Front-end Ontwikkelaar

Wij zoeken een .Net Front-end Ontwikkelaar! Omschrijving Kun jij snel schakelen en ben je stressbestendig? Dan zoeken wij jou! Als .Net Front-end Ontwikkelaar help je mee aan de webapplicatie die over de hele wereld door allerlei bedrijven wordt gebruikt. Je werkt daarnaast mee aan nieuwe en verbeterde functionaliteiten en helpt met het oplossen van bugs. Over de opdrachtgever Je komt te werken in een ambitieus team dat zich blijft ontwikkelen. Dit is alle informatie die we nu kunnen delen over de werkplek. Als jij de .Net Front-end Ontwikkelaar bent voor deze job, vertellen we je snel nóg meer. Eisen Heb

Bekijk vacature »

Scrum Master

TenneT is hard groeiend om de onze ambities waar te kunnen maken. Zo nemen wij een leidende rol in het aanjagen van de energietransitie. Het werven van nieuw talent speelt daarin een cruciale rol. Wij zijn op zoek naar een gedreven Scrum master op onze locatie Arnhem die hieraan wil bijdragen en misschien ben jij dat wel? Jouw bijdrage aan TenneT Je begeleidt twee teams binnen de afdeling Platform Services (PLS). Je helpt mee de devops manier van werken van de teams verder door te ontwikkelen. Je helpt de PO bij het managen van de product backlog; het voorbereiden van

Bekijk vacature »

C# Developer Research and Development - Delft

Vacature details Vakgebied: Software/IT Opleiding: Medior Werklocatie: Delft Vacature ID: 6307 Introductie C# Developer Research and Development - Delft - Onze klant is één van de meest innovatieve bedrijven in de region van Delft. Op dit moment zijn ze voor het innovatie centrum. In het innovatie centrum wordt gewerkt aan de nieuwste technieken voor navigatie software. R&D / C# / Pattern Recognition / Algorithms / 3d Data / DotNET Functieomschrijving Als C# Developer kom je te werken in een innovatief scrumteam. We ontwikkelen en door ontwikkelen de nieuwste technieken op het gebied van navigatie software. Deze software wordt onder andere

Bekijk vacature »

Dynamische Oracle/APEX Ontwikkelaar in de logistie

Bedrijfsomschrijving De organisatie in de regio Rotterdam is gespecialiseerd in het ontwikkelen van moderne webbased software voor de ERP branche. In totaal is er 20FTE aan specialisten actief binnen de organisatie. De ICT afdeling bestaat momenteel uit 15FTE. Ze groeien ontzettend hard en daarom zoeken zij een Oracle/APEX Developer die het reeds sterke team nog sterker komt maken. Hier werken ze op projectbasis voor verschillende grote organisaties in de logistieke sector. Het is een informele organisatie waarbinnen een fijne werksfeer heerst. Zoals aangegeven willen ze het team nog sterker maken en daarvoor zoeken ze bij voorkeur medior of senior Oracle/APEX

Bekijk vacature »
Ozzie PHP

Ozzie PHP

06/03/2014 22:34:34
Quote Anchor link
Ola,

Ik heb een vraagje en wellicht kan iemand mij een duwtje in de goede richting geven.

Hoe moet je precies een interface gebruiken?

Maak je een interface op method niveau, of op class niveau?

Is het bijvoorbeeld de bedoeling dat je een datacollectionInterface maakt, met als methods get() en set(). Of is het de bedoeling dat je een getInterface en een setInterface, en dan eventueel een getSetInterface die die 2 andere interfaces extend?

Ik wil vooral de achterliggende gedachte van een interface proberen te begrijpen. Ik hoop dat iemand dat op een simpele manier kan uitleggen, want ik ben een beetje bang dat ik het anders verkeerd aanpak, om er vervolgens over een paar weken achter te komen dat ik alles opnieuw kan doen.

Kan iemand me een beetje wegwijs maken? Hoeft echt geen lang verhaal te zijn, maar met name hoe ik mijn interfaces het beste kan opbouwen. Even een zetje in de goede richting zeg maar. Alvast bedankt.
 
PHP hulp

PHP hulp

23/11/2024 21:52:41
 
- Raoul -

- Raoul -

07/03/2014 00:39:25
 
Ozzie PHP

Ozzie PHP

07/03/2014 10:26:36
Quote Anchor link
Tutorials zijn er genoeg. Wat ik vooral wil weten is op welke manier je een interface gebruikt.

Wat me opvalt is dat er mensen zijn die een interface gebruiken om één bepaalde method af te dwingen, en dat er mensen zijn die een interface gebruiken om de invulling van een class af te dwingen.

Een voorbeeld van het afdwingen van één method: printableInterface (de class moet een print method hebben)

Een voorbeeld van het afdwingen van een class: databaseInterface (de class moet een setQuery en execcute method hebben)

Eigenlijk heb ik 2 vragen:

1) gebruik je normaal gesproken beide methodes?

2) wanneer gebruik je een interface? Hoe weet je vantevoren of je een interface nodig hebt?
 
Reshad F

Reshad F

07/03/2014 11:27:42
Quote Anchor link
Je gebruikt een interface wanneer je wilt dat een klasse een methode verplicht implementeert. Je hoeft in die methodes verder niet alles verplicht vullen met logica maar zolang je die methodes maar erin hebt zitten. zo kan elke klasse die er gebruik van maakt de methode op eigen manier invullen. even een voorbeeldje


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
<?php
interface QuackBehavior {

    public function quack();

}


class RubberDuck implements QuackBehavior {

    public function quack()
    {

        return 'silence';
    }

}


class RiverDuck implements QuackBehavior {

    public function quack()
    {

        return 'quaaaackk!!';
    }

}


 ?>


Op deze manier verplicht je dat een klasse bepaalde methodes moet implementeren maar je bent vrij om zelf te bepalen hoe je deze invult.
 
Dos Moonen

Dos Moonen

07/03/2014 11:28:08
Quote Anchor link
Je gebruikt een interface om bepaalde functionaliteit af te dwingen. Of je voor die functionaliteit maar een methode of meerdere, of helemaal geen (marker pattern) nodig hebt hangt van de situatie af. (Ja, dit komt bijna elke keer terug)

interface Countable dwingt alleen de methode count() af om te kunnen gebruiken in count().
interface Serializable dwingt methoden serialize() en unserialize() af om het te kunnen gebruiken in de serialize() en unserialize() functies.
interface Iterator dwringt methoden current(), next(), key(), rewind() en valid() af het te gebruiken in een foreach.
 
Ozzie PHP

Ozzie PHP

07/03/2014 11:42:59
Quote Anchor link
Oké. Stel nu ik heb een algemene data class waarin verschillende soorten data kunnen worden opgeslagen. Zo'n class heeft een get(), has() en set() method. Wat zijn dan redenen om hier een interface voor te maken, en op welke wijze kun je dat het beste doen?

Moet ik bijv. een losse getInterface, hasInterface en setInterface maken, en dan vervolgens een dataInterface die deze 3 interfaces extend?

Daarnaast vraag ik me ook af hoe je een interface moet noemen. Want hierboven zie ik "...able" interfaces. CountABLE, SerializABLE. Maar het kan ook een zelfstandig naamwoord zijn: IteratorInterface, DatabaseInterface. Zijn daar bepaalde redenen voor?
 
- Raoul -

- Raoul -

07/03/2014 12:09:02
Quote Anchor link
*Interface voor de namen altijd. Dat is de standaard.

En je moet ook niet voor alles een interface maken, dat is niet altijd nodig. Als je bijvoorbeeld verschillende type's classen hebt, bv.:
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
<?php

interface CarInterface {
    public function getNaam();
    public function getWielen();
}


class Volvo implements CarInterface {
    public function getNaam() { return "Volvo"; }
    public function getWielen() { return 4; }
}


class Citroen implements CarInterface {
    public function getNaam() { return "Citroen"; }
    public function getWielen() { return 4; }
}


$autos = [new Volvo(), new Citroen()];

foreach($autos as $auto) {
   if ($auto instanceof CarInterface) {
       echo $autos->getNaam();
   }
}

?>


Waarom hier nu een interface? Je hebt een foreach loop. Maar die array kan alles bevatten, maar omdat we verwachten we dat getNaam() in de interface verplicht word kunnen we die veilig gebruiken.




Wat heel belangrijk is, en vooral voor jou in het bijzondere Ozzie, is dat je eerst zelf wat dingen uitprobeert. Dan worden de use-cases van een interface vanzelf duidelijk.
Gewijzigd op 07/03/2014 12:10:14 door - Raoul -
 
Dos Moonen

Dos Moonen

07/03/2014 12:25:26
Quote Anchor link
"*Interface voor de namen altijd. Dat is de standaard."
Dat hangt af van wie je het vraagt, over welke taal je het hebt etc.


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

function consume(Consumable $substance) { ... } // function consume consumes a Consumable substance
function repair(Repairable $object) { ... } // function reparair repairs a Repairable substance

// versus


function consume(ConsumeInterface $substance) { ... } // function consume consumes a ConsumeInterface instance
function repair(RepairInterface $object) { ... } // function repair repairs a RepairInterface instance

// conclusie: *able vormt een beter over de tong rollende zin


?>


"Moet ik bijv. een losse getInterface, hasInterface en setInterface maken, en dan vervolgens een dataInterface die deze 3 interfaces extend?"
Als jij denkt dat je ze soms afzondelijk wilt implementeren...

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

// dit is bijvoorbeeld GEEN goed idee

class Meow {

  private $object;

  public function __construct(GetInteface $object) {
    $this->object = $object;
  }


  public function doGet() {
    // prima zolang Meow::setObject() niet is aangeroepen...
    return $this->object->get();
  }


  public function doHas($mixed) {
    // dit is onzin aangezien GetInterface alleen get() forceert
    return $this->object->has($mixed);
  }


  public function doSet($mixed) {
    // alleen correct als eerst Meow::setObject() is aangeroepen
    return $this->object->set($mixed);
  }


  public function setObject(SetInterface $object) {
    // Meow::$object was eerst een GetInterface instantie, nu wordt het een SetInterface instantie...
    // WTF!?!

    $this->object = $object;
  }
}


?>


Groepeer wat logisch is. Als het later blijkt dat opsplitsen logisch is kan het dan altijd nog. Ook is het niet veel werk omdat je alleen de interface aan hoeft te passen.
Als je het eerst opsplitst en later bedenkt dat het toch niet zo handig was is het meer moeite.
Gewijzigd op 07/03/2014 12:30:31 door Dos Moonen
 
Ozzie PHP

Ozzie PHP

07/03/2014 12:34:02
Quote Anchor link
>> *Interface voor de namen altijd. Dat is de standaard.

Wat bedoel je Raoul?

@Dos: ik snap je voorbeeld niet helemaal :-s

Waarom dwing je bij setObject een SetInterface af?

>> Groepeer wat logisch is. Als het later blijkt dat opsplitsen logisch is kan het dan altijd nog. Ook is het niet veel werk omdat je alleen de interface aan hoeft te passen.

Zal ik onthouden. Goede tip.
 
- Raoul -

- Raoul -

07/03/2014 13:01:36
Quote Anchor link
*Interface
Wat betekent bv. CarInterface, niet *able.

En dos, we hebben het hier uiteraard over PHP en niet over een andere taal.
 
Ozzie PHP

Ozzie PHP

07/03/2014 13:15:51
Quote Anchor link
Ah oké, dat bedoelde je... ik dacht even dat je bedoelde interface vóór de namen, dus InterfaceCar. Maar nu begrijp ik je :)

Toevoeging op 07/03/2014 14:31:33:

Overigens... als in m'n interface een set method afdwing, kan ik dan in de class die die interface implement geen hints gebruiken? Dat lijkt namelijk niet te werken:

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
<?php

interface FooInterface {

  public function foo($bar);

}


class Foo implements FooInterface {

  public function foo(Bar $bar) {

  }

}


?>

Dit gaat fout, omdat ik in de Foo class in de foo() method een instance van Bar afdwing. Maar dat gaat dus niet. Dat is niet handig... want stel we hebben bijv. een set() method, dan wil ik soms dat de value een array is, en soms dat het een object is. Hoe doe ik zoiets dan?
Gewijzigd op 07/03/2014 13:16:08 door Ozzie PHP
 
Dos Moonen

Dos Moonen

07/03/2014 14:40:49
Quote Anchor link
- Raoul - op 07/03/2014 13:01:36:
*Interface
Wat betekent bv. CarInterface, niet *able.

En dos, we hebben het hier uiteraard over PHP en niet over een andere taal.


Carable is ook geen goed engels woord...


Ozzie, het punt dat ik probeerde te maken was dat omdat iets kan (GetInterface, HasInterface en SetInterface opsplitsen) het geen goed idee hoeft te zijn.
In het voorbeeld ben ik uitgegaan van een "ik plits ze op omdat het kan" aanpak en ben daarna inconsequent te werk gegaan. Wat jammer genoeg nog wel eens voorkomt. Zeker als je met meerdere aan de zelfde code base werkt.


PHP laat je niet toe om methoden te overloaden zoals in bijvoorbeeld Java. In php moet de method signature 100% gelijk zijn. Ook een reden waarom ik een algemene SetInterface in php een vreemd idee vind.
Gewijzigd op 07/03/2014 14:43:44 door Dos Moonen
 
Ozzie PHP

Ozzie PHP

07/03/2014 14:45:30
Quote Anchor link
Ik heb je punt begrepen Dos. Alleen ik had nog een andere vraag. Stel dus dat je een setInterface hebt, of misschien wel een dataInterface waarvan de set() method een onderdeel is... stel dat ik dan in een child class een set() method implementeer, maar ik wil dat het 2e argument van een bepaald type is, hoe doe ik dat dan? Als je het voorbeeld in mijn vorige post ziet, dan gaat het mis. Ik wil dus wel zorgen dat de child class een set method heeft, maar in de child class zelf wil ik dan kunnen afdwingen wat voor type het argument moet zijn. Hoe krijg je zoiets voor elkaar?
 
Dos Moonen

Dos Moonen

07/03/2014 14:51:49
Quote Anchor link
"Ik wil dus wel zorgen dat de child class een set method heeft, maar in de child class zelf wil ik dan kunnen afdwingen wat voor type het argument moet zijn. Hoe krijg je zoiets voor elkaar?"
Gooi een InvalidArgumentException.
 
Ozzie PHP

Ozzie PHP

07/03/2014 14:55:47
Quote Anchor link
Hmmm, oké. Dat is een optie inderdaad. Maar wel irritant dat je dat dan niet via typehinting kan doen :-s

Toevoeging op 07/03/2014 14:56:57:

Ik kan trouwens toch wel in iedere child class de set method overschrijven? Stel ik heb een data class met een set() method. De data class implement de setInterface. Als ik dan een child heb van de data class, kan die de set method van de data class dan overschrijven?
Gewijzigd op 07/03/2014 14:58:28 door Ozzie PHP
 
- Raoul -

- Raoul -

07/03/2014 15:08:54
Quote Anchor link
Een setinterface is geen goed idee, want dan doe je iets anders dan wat interface voor dienen. Een data interface met get() en set() ZOU wel kunnen, maar dan enkel in bepaalde usecases.

Lees aub de tutorial die ik je doorstuurde eens door. Daar ga je veel van leren. Je snapt wat een interface is, maar niet wanneer je het moet gebruiken.
Gewijzigd op 07/03/2014 15:20:03 door - Raoul -
 
Dos Moonen

Dos Moonen

07/03/2014 15:15:24
Quote Anchor link
"Als ik dan een child heb van de data class, kan die de set method van de data class dan overschrijven?"
Niet altijd: http://3v4l.org/urnWI

En zoals hier boven gezegd wordt, stap af van het idee van een SetInterface a.u.b. Ook in je voorbeelden/vragen.
 
Ozzie PHP

Ozzie PHP

07/03/2014 18:02:13
Quote Anchor link
>> Je snapt wat een interface is, maar niet wanneer je het moet gebruiken.

Oké, inderdaad. Ik snap wat een interface is, maar ik weet inderdaad nog niet wanneer ik het moet gebruiken.

Kunnen jullie mij dan eens uitleggen waarom een setInterface geen goed idee is?

>> Niet altijd: http://3v4l.org/urnWI

Oké... maar zolang je de signature volgt dus wel?
 
Dos Moonen

Dos Moonen

10/03/2014 10:14:46
Quote Anchor link
"Oké, inderdaad. Ik snap wat een interface is, maar ik weet inderdaad nog niet wanneer ik het moet gebruiken."
Je moet niets. Maar het kan erg handig blijken. Als je programmeert op basis van interfaces in tegenstelling tot implementaties kun je fijn mock classes (http://en.wikipedia.org/wiki/Mock_object) gebruiken om unit tests te schrijven.

"Kunnen jullie mij dan eens uitleggen waarom een setInterface geen goed idee is?"
Een interface SetInterface/Setable binnen de global namespace is te vaag naar mijn idee. Binnen een namespace kan het een specifiekere betekenis hebben. Context is belangrijk.
Nogmaals: mijn mening is dat interfaces functionaliteit moet afdwingen. Het moet tot een zekere hoogte duidelijk worden wat die functionaliteit is. Met jouw SetInterface het het mij niet bepaald duidelijk wat de mogelijke gevolgen zijn van het setten, of wat het voor nut kan hebben.
Vergelijk dat met classes als Serializable, Countable en Iterator.

"Oké... maar zolang je de signature volgt dus wel?"
ja.
 
Wouter J

Wouter J

10/03/2014 12:15:55
Quote Anchor link
Interfaces zijn het contract. Het is de enige methode waarmee je kan zeggen: Nu weet je welke methods je mag aanroepen. Stel:
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 ObjectPersistInterface
{
    public function persist($object);
}


class ObjectFetchInterface
{
    public function find($id);
    public function findAll();
    public function findAllBy(array $conditions);
    public function findOneBy(array $conditions);
}

?>


Als ik nu in een method doe: ObjectFetchInterface $repository Dan weet ik dat ik van dat object de 4 find* methods mag aanroepen, de persist method niet.
 
Ozzie PHP

Ozzie PHP

10/03/2014 13:21:06
Quote Anchor link
Oké, ik geloof dat ik het begin te begrijpen. Dank jullie wel!
 



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.