Interface

Uit Inf20
Naar navigatie springen Naar zoeken springen

Interface

Een interface is een vast omlijnd contactpunt tussen de aanbieder van een dienst of product, en de gebruiker daarvan.

Een interface vormt een dubbelzijdige abstractie:

  • de implementatie hoeft alleen aan het interface te voldoen. Daarmee abstraheer je van de details van het gebruik.
  • voor het gebruik is alleen het interface van belang. Daarmee abstraheer je van de details van de implementatie.

Interfaces komen ook buiten de ICT voor: denk bijvoorbeeld aan het stopcontact, of het gebruikersinterface van een auto.

Binnen de ICT komen interfaces op alle niveaus voor, van hardware-interfaces als USB, via procedures en functies als interface, tot gebruikersinterfaces van operating systems en toepassingen. Als gebruiker heb je met een zeer groot aantal interfaces te maken. Als programmeur moet je vaak zelf interfaces definiëren.

Voorbeelden:

  • hardware-interfaces (USB, Ethernet, WiFi)
  • hardware/software interfaces (x86 instructieset-architectuur; netwerk-interface)
  • software interfaces (OS system calls; programmeertalen, libraries)
  • gebruikersinterfaces (OS, browser, tekstverwerker, game)
  • zelf-gedefinieerde interfaces: interface van een functie in een programma; interface van een class of van een module; gebruikersinterface van een programma.

Basis voor evolutie en variatie

Interfaces in de ICT vormen de basis voor evolutie en variatie. Dankzij het slim gebruiken van interfaces kan de technologie en het gebruik daarvan zich zo snel ontwikkelen.

Voorbeeld: (i) je kunt je bestaande software en gegevens op een nieuwe computer installeren - zonder dat je deze software hoeft aan te passen; (ii) je kunt nieuwe software op je bestaande computer installeren - zonder dat je deze computer hoeft aan te passen.
Voorbeeld: je kunt een nieuwe schijf aan je computer koppelen, of een bedraad netwerk vervangen door een draadloos netwerk - zonder dat je de software (toepassingen) hoeft aan te passen. (hooguit moet je in de systeemsoftware een configuratie aanpassen, of een driver-programma toevoegen).

Evolutie van interface

Een interface hoeft niet permanent te zijn: soms is het nodig dat het interface mee-evolueert met de technologie en met het gebruik. Dit gaat het gemakkelijkst als het om uitbreidingen gaat: deze maken geen inbreuk op bestaand gebruik. Maar in enkele gevallen is het nodig om erfenissen uit het verleden af te stoten; in dat geval moeten gebruikers zich aanpassen. Vaak is er sprake van een overgangssituatie waarin het gebruik nog getolereerd wordt, zo mogelijk met de waar

Voorbeeld: de HTML5-standaard is een voorbeeld van een "levende standaard": deze wordt regelmatig uitgebreid.
Voorbeeld: in HTML5 zijn bepaalde constructies die in eerdere versies van HTML toegestaan waren, tot "verouderd" bestempeld. Programma's die HTML-code controleren kunnen voor het gebruik daarvan waarschuwen. Soms krijg je dergelijke waarschuwingen in de browser (via het console).

Zie ook: 3-lagen model

Basis voor correctheid

  • Bij het gebruik van een component kunnen we ervan uitgaan dat deze correct is. We moeten aantonen dat de component correct gebruikt wordt, als onderdeel van de correctheid van het gebruikende onderdeel.
  • Bij de implementatie van een component hoeven we alleen te voldoen aan de eisen van het interface. We mogen
  • Op deze manier is de correctheid aan te tonen van alle samenstellingen van componenten.


Standaardisatie

Interfaces zijn vaak gestandaardiseerd. Dit is van belang als er meerdere aanbieders zijn van hetzelfde interface.

  • voorkom lock-in

Voorbeelden van standaarden:

  • Ethernet
  • WiFi
  • USB
  • TCP/IP (internet-protocol)
  • HTML en HTTP (web-documenten, web-protocol)
  • ECMAScript (standaard voor JavaScript)

Wat moet je weten over interfaces?

Definitie van het interface

Definieer een interface zo dat

  • het een goede scheiding vormt tussen gebruik en implementatie (separation of concerns). Het interface moet geen implementatie-details later doorschemeren (implementation bias).
  • het gebruik gemakkelijk is, met zo min mogelijk aanleiding tot foutief gebruik.
  • dit stabiel kan blijven, bij veranderingen in de implementatie die te voorzien zijn.

Voorkom implementatie-bias

Je wilt een grote vrijheid in de oplossingen die voor de implementatie gekozen kunnen worden. Dit betekent dat je de keuze voor een bepaalde oplossing niet in het interface te zien moet zijn - ook als dat de meest voor de hand liggende oplossing is.

Evolutie

Evolutie van een interface kan soms nodig zijn, omdat de technologische mogelijkheden en het gebruik veranderen.

Voorbeeld: HTML5 als levende standaard

Hoe ga je om met fouten?

Een interface kan niet in alle mogelijke situaties voorzien. Niet alle vormen van gebruik zijn mogelijk; sommige zijn zelfs gevaarlijk voor de implementatie. Hoe ga je met dergelijke gevallen om?

  • stopcontact: als je kortsluiting maakt, of een apparaat aansluit dat teveel stroom verbruikt, slaat de zekering door.
  • deling door 0: in sommige programmeertalen resulteert dit in een speciale waarde, "not an number" (NaN). In andere talen kan dit tot het afbreken van het programma leiden.

Een beschrijving van de beperkingen van het interface, en van de manier waarop implementaties daarmee om moeten gaan, hoort bij het interface.

Gebruik

Houd je aan de regels van het gedocumenteerde interface. Soms is het mogelijk om ongedocumenteerde eigenschappen te gebruiken; dit kan een werkende oplossing opleveren. Maar er is geen enkele garantie dat dit in de toekomst ook het geval zal zijn.

Voorkom lock-in

Als er meerdere aanbieders zijn van een bepaald interface, biedt een aanbieder soms "extra's", boven op het standaard-interface. Het gebruik van deze extra's, hoe aanlokkelijk ook, maakt het lastiger om over te stappen naar een andere aanbieder: er is dan sprake van vendor lock-in.

Wat gebeurt er in het geval van fouten?

Je moet weten wat de beperkingen zijn van een interface, en je moet je daaraan houden. Maar soms gaat het mis. Wat gebeurt er als je een fout maakt in het gebruik van een interface? Vaak moet je (als gebruiker van een interface!) speciale voorzieningen treffen om een dergelijke fout te detecteren, en om de gevolgen op te vangen.

Implementatie

De implementatie is de manier waarop het product of de dienst gemaakt is.

  • Voor het gebruik is alleen het interface van belang, niet de implementatie.
  • Implementaties kunnen verschillen met betrekking tot hun kwaliteit en efficiëntie.
    • In het geval van een gestandaardiseerd interface kun je eenvoudig overstappen op een implementatie die beter past wat kwaliteit en efficiëntie betreft.