[oop] interface implementeren

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

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 »

Traineeship Full Stack Java developer

Dit ga je doen Start jij op 7 augustus bij de Experis Academy dan kickstart jij jouw IT-carrière! We leiden je op tot een gewilde Full Stack Java Developer met alle kennis en vaardigheden die nodig zijn om de arbeidsmarkt te betreden. Wat kun je verwachten, hoe zit een dag in het leven van een Trainee eruit? Periode 1 Als Full Stack Java Developer Trainee volg je vanuit huis een op maat gemaakte onlinetraining die in het Engels wordt gegeven. De tijd die je kwijt bent aan het volgen van de training kun je vergelijken met een fulltime werkweek. In

Bekijk vacature »

Back-End Developer in Laravel / PHP

Functie omschrijving Wij zijn op zoek naar een Medior PHP Laravel Developer voor een gaaf bedrijf in de omgeving van Amsterdam! Voor een enthousiast team die zich graag bezig houdt met softwareontwikkeling zijn wij op zoek naar versterking. Je werkt in een klein ontwikkelteam en bent zeer betrokken bij alle aspecten van de softwareoplossingen. Van het ontwerpen tot de oplevering. Binnen deze functie ga je aan de slag met het aanpassen, verbeteren en vernieuwen van de logistieke oplossingen. Je krijgt veel te maken met koppelingen naar systemen en de verzoeken van de klant. Je komt terecht in een team, waarbij

Bekijk vacature »

Front-end Developer

Dit ga je doen Het onderhouden, ontwikkelen en testen van front-end software van diverse klant- en medewerkersapplicaties; Het ontwikkelen van maatwerk front-end oplossingen in Vue.js en participeren in een scrumteam; Mede-verantwoordelijk voor het begeleiden en coachen van drie junior front-end developers; Verantwoordelijk voor code-reviews en het opstellen van de juiste documentatie zoals userstories en API ontwerp; Participeren in diverse projecten t.b.v. optimalisatie van diverse applicaties; Het opzetten van API koppelingen met externe applicaties. Hier ga je werken Betreffende organisatie is gevestigd in de regio van Swifterbant en is al ruim 20 jaar lang bedreven in het ontwikkelen en aanbieden van

Bekijk vacature »

Traineeship ICT regio Amsterdam/Utrecht

Wat ga je doen? Het traineeship begint met een fulltime maand cursussen en praktijkdagen, waarin je de basis van het IT-vak leert op de Shared Servicedesk (SSD). Daarnaast ga je meteen aan de slag voor je eerste certificering! (ITILv4). Je start in een groep met 4 tot 10 deelnemers, waarmee jij gedurende die maand optrekt en je kennis kunt delen. Na het voltooien van de eerste maand ga je direct voor een langere periode aan de slag bij één van onze klanten of blijf je intern bij ons op de Shared Servicedesk. Je bent het eerste aanspreekpunt van de eindgebruikers

Bekijk vacature »

Front-end developer

Functie Als front-end developer kom je te werken in een team van 30 gedetacheerde, en het team is momenteel flink aan het groeien. Je hebt ervaring met het bouwen van complexe bedrijfsapplicaties waar je gebruik maakt van de nieuwste technologieën waarmee jij elke klant omver blaast. Het gaat om uitdagende projecten met een gemiddelde doorlooptijd van 2 jaar. Hierdoor heb jij echt de volledige focus op een project en kun je flinke impact maken. Het team zit boordevol met ervaren developers die samen dezelfde ambitie delen. Aan de hand van opleidingen en trainingen kun je certificaten halen in jouw expertise

Bekijk vacature »

Front-end Developer Magento 2/Wordpress

Voor het aantrekkelijk houden en steeds vernieuwen van de huidige websites en webshops en het meedenken in de marketing zijn wij per direct op zoek naar een ervaren Front-end developer met gedegen kennis van Magento 2 (webshops) en Wordpress (websites). Wat bieden wij jou Mooi salaris! Meteen op contract bij de opdrachtgever! Gezellig, Kempisch bedrijf! 35 uur per week! Auto van de zaak! Wie ben jij Van een front-end developer verwachten wij: Een afgeronde Bachelor ICT opleiding met profiel ICT & Media Design. Dat je in het bezit bent van een Magento 2 professional front-end developer certificaat; Je hebt ruime

Bekijk vacature »

C#.NET developer

Functie Het development team bestaat momenteel uit vijf backend C#/.NET ontwikkelaars. Op dit moment zit één ontwikkelaar dedicated op de mobiele applicatie. Als team werk je samen aan het zelf ontwikkelde software platform. Dit bestaat uit zowel apps als websites. Om het systeem door meer dan honderdduizenden gebruikers wordt gebruikt is het bijna vanzelfsprekend dat de kwaliteit van het product hoog moet liggen. Het systeem bestaat uit drie projecten. Je werkt dus aan deze drie projecten waarbij de focus op z’n tijd verschuift. De technieken die worden toegepast zijn o.a. .NET Core, Xamarin, C# en MVC. Je zal dus met

Bekijk vacature »

Front end developer binnen de consultancy

Functie Je komt in een team met ambitieuze developers die de passie voor Front-End met jou delen. Samen ga je aan de slag met leuke en leerzame opdrachten. Het team heeft een eigen budget en financiën en zij bepalen zelf hoe dat besteed en investeert wordt. Je gebruikt tools als JavaScript, Node.js, React, Angular, Typescript en Vue.js wanneer je werkt aan de opdrachten. Daarnaast zul je veel leren van je collega’s en gezamenlijk een leuke tijd doorbrengen tijdens activiteiten zoals wintersport, hackatons en conferentiebezoeken. Je krijgt niet alleen de mogelijkheid Front-End te ontwikkelen, maar ook vooral jezelf. Dit kan behaald

Bekijk vacature »

Fullstack Developer

Functieomschrijving Heb je kort geleden jouw HBO diploma ICT development behaald? Of zit je nog aan het begin van je carrière en heb je affiniteit met C#.NET? Voor een erkende werkgever in de omgeving van Oosterhout zijn wij op zoek naar een fullstack developer. Als C#.NET developer werk je samen met een vooruitstrevend team aan het ontwikkelen van maatwerk software voor klanten. Je hebt affiniteit met SQL, maar nog belangrijker is dat je kennis en ervaring hebt met C#.NET. Jouw werkzaamheden zien er als volgt uit: Het ontwikkelen van onze high-availability en high-performance backend; Je begint de dag rond 8:30

Bekijk vacature »

Ervaren PHP ontwikkelaar

Functie Jij als PHP ontwikkelaar komt te werken in een team van 4 andere PHP ontwikkelaars. Je zult je voornamelijk bezig houden met: – Het ontwikkelen van nieuwe features – Doorontwikkelen van de API – Nadenken over de technische infrastructuur – Datakwaliteit Samen met het team ben jij verantwoordelijk voor de verdere ontwikkeling van de software en om de positie als marktleider in Europa te behouden. Ze werken volgens SCRUM in 2 wekelijkse sprints, werken met Jira voor alle tickets en communiceren veel via Slack. Eisen • Minimaal 3 jaar ervaring als back end developer • Je hebt affiniteit met

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 »

Junior Outsystems developer

Functie Als junior Outsystems developer wordt jij onderdeel van een multidisciplinair team van 23 software engineers. Ons team werkt agile en termen als Continuous Integration en Continuous Delivery zijn bij ons dagelijkse koek. Wij werken aan uitdagende en afwisselende projecten met als doel onze klanten een totaal oplossing aan te bieden. Als junior Outsystems developer krijg jij bij ons de kans om jezelf te ontwikkelen naar een volwaardige ervaren en gecertificeerde Outsystems developer. Jij een team met ervaren mensen (10+ ervaring) om je heen. Zo heb jij niet het gevoel dat jij meteen in het diepe wordt gegooid en uiteraard

Bekijk vacature »

Front-end developer Consultancy in teamverband wer

Functie Het team bestaat uit User Experience designers, Data Scientists en Software Engineers. Momenteel zijn ze op zoek naar een ervaren Front-end of Fullstack developer die samen met de consultants aan de slag gaat om de business requirements te vertalen naar technische oplossingen. Los van het finetunen van extenties, help je bij het configureren van bijvoorbeeld een mobiel bankieren app. Hierin ben je van A tot Z betrokken en zie je bijvoorbeeld ook toe op de uitvoering van testen. Je expertise wordt optimaal benut en je krijgt verschillende kansen om deze uit te breiden door met verschillende innovatieve technologieën aan

Bekijk vacature »

PHP Developer gezocht!

Functie omschrijving Wij zijn op zoek naar een PHP Developer! Ben jij op zoek naar een nieuwe uitdaging? Lees dan snel verder! Voor een organisatie in de regio Utrecht die zich bezighoud met het verbeteren van de medicatieveiligheid zoeken wij een Software Developer. In deze functie zijn wij op zoek naar een slimme en enthousiaste Developer die interesse heeft in farmacie, logistiek en ICT. Daarnaast beschik je over een goed analytisch vermogen en ben je van nature gestructureerd en resultaatgericht. Je moet in deze functie daadkrachtig, flexibel en communicatief goed zijn. Je verantwoordelijkheden bestaan uit: Object georiënteerd programmeren; Werken in

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

28/12/2024 20:53:51
 
- 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.