Rapid Application Development/Iterative Application Development

met behulp van MS Visual Basic 5.0

Lieven Smits

Alle rechten voorbehouden aan de auteur.

Inhoud


Het probleem van de levenscyclus systeemontwikkeling

De traditionele levenscyclus systeemontwikkeling gaat ervan uit dat ieder project voor de opbouw van een automatisch informatiesysteem kan worden opgesplitst in een vaste reeks opeenvolgende fasen. In deze cursus hebben wij een model bestudeerd van zeven fasen ([1], hoofdstukken 12-13).

Deze rigide, gefaseerde structuur biedt vooral grote voordelen qua beheersbaarheid:

Het voornaamste nadeel van de traditionele levenscyclus ligt in zijn onbuigzaamheid. In het bijzonder reageert deze rigide aanpak zeer slecht op wijzigingen in de opdracht tijdens latere fasen van het project.

Voorbeeld. Een grote bank hanteert de levenscyclus systeemontwikkeling voor de automatisering van de backoffice-functionaliteit (boekhoudkundige verwerking van en controle op de transacties van de traders). Nadat het project reeds een jaar gevorderd is - men is ergens halfweg fase vijf - fusioneert de bank met haar grootste binnenlandse concurrent. De backoffices van de twee banken versmelten. Het project moet worden opgegeven of herbegonnen, omdat in de haalbaarheidsstudie (fase 1) en in de functioneel/logische analyse (fasen 2 en 3) geen ruimte is voorzien voor de interactie met het bestaande systeem van de concurrerende bank.

Iterative application development (IAD, iteratieve applicatie-ontwikkeling) steunt op het verscheidene malen doorlopen van dezelfde (meestal korte) levenscyclus. Dus nadat een eerste versie van het systeem alle zeven de fase heeft doorlopen, begint men opnieuw met voorstudie, logische en technische analyse, enz.,... voor een aanpassing van het oorspronkelijke prototype.

We spreken van Rapid Application Development (RAD, snelle applicatie-ontwikkeling) wanneer de traditionele onbuigzaamheid van de levenscyclus systeemontwikkeling omzeild wordt door snel een bruikbaar programma af te leveren. Men wil de wijziging van de externe omstandigheden als het ware vóór zijn: hoe korter de ontwikkelingstijd, hoe kleiner de kans dat de behoeften van de opdrachtgever ondertussen wijzigen.

Omdat het bouwen van een compleet informatiesysteem nu eenmaal wat tijd vergt, gaan IAD en RAD vaak hand in hand: enerzijds laat IAD toe dat iedere individuele levenscyclus verkort wordt; anderzijds noodzaakt RAD meestal dat er achteraf nog bijkomende functionaliteit wordt geïmplementeerd.

Veel teksten gebruiken de twee begrippen zelfs door elkaar, en spreken van RAD als ze IAD bedoelen of andersom. Wij gaan niet zover de twee begrippen te identificeren, maar zullen ze samen als één techniek beschouwen om de ontwikkeling van informatiesystemen te beheersen.

RAD/IAD is dus een alternatieve aanpak, naast het bestaande gefaseerde model van de levenscyclus systeemontwikkeling.

RAD/IAD in de praktijk

De combinatie RAD/IAD biedt twee belangrijke voordelen op de traditionele levenscyclus:

Met RAD/IAD zijn ook een aantal nadelen geassocieerd, die in de vakliteratuur verdacht weinig aandacht krijgen:

  1. de uitvoering moet berusten bij een beperkt team (< 7 mensen) waarvan de samenstelling niet wijzigt tijdens het project
  2. er is weinig ruimte voor on-the-job training: alle deelnemers moeten ruime ervaring hebben met de gebruikte technologie
  3. de opdrachtgever moet sterke garanties kunnen geven wat betreft de acceptatieprocedure, meer bepaald:

Voorwaarden (1.) en (2.), samen met het praktische gegeven dat informatici gemiddeld om de zes jaar van werkgever veranderen, betekent dat RAD/IAD niet geschikt is voor projecten groter dan een zestal man-jaar. Miljardenprojecten worden nog steeds beter op de traditionele manier aangepakt.

Ook de beschikbaarheid van de opdrachtgever is een teer punt. Vaak worden de tussentijdse produkten opgevolgd door een ondergeschikte, terwijl de grote baas pas na de laatste cyclus zijn zegje komt doen - met nefaste gevolgen.

Visual Basic

In mei 1991 [2] introduceerde Microsoft de programmeeromgeving Visual Basic (VB). Het aanvankelijke doelpubliek was "de kleine amateur": mensen die het eigenlijke programmeerwerk te ingewikkeld of te technisch vonden, en die met beperkte kennis en ervaring toch een redelijk bruikbare applicatie wilden bouwen.

Het succes was onverhoopt groot, en VB werd algauw ook in professionele middens een gegeerd instrument om kost-effectief eenvoudige Windows-applicaties te bouwen. Tevoren was het ontwikkelen van MS Windows-programma's een zeer lastig karwei, dat aan een handjevol (dure) technische specialisten voorbehouden bleef. Visual Basic kon iedereen die een beetje met een computer overweg raakte, op twee à drie weken leren.

Op het moment dat we dit schrijven, beschikken de studenten op de EHSAL over de Enterprise Edition van Microsoft Visual Basic, versie 5.0. De enterprise-editie onderscheidt zich van de goedkopere "professionele" editie door de extra hulpmiddelen voor client/server- en world wide web-ontwikkeling.

De onderdelen van een Visual Basic-applicatie

Een Visual Basic-applicatie bestaat uit grafische elementen en tekstelementen. Uitgangspunt zijn de schermen, de zogenaamde forms. Op een scherm zijn interface-elementen (controls) aanwezig. Ieder interface-element heeft een aantal eigenschappen (properties) zoals lettertype, layout, grootte, kleur, positie,.. en een aantal reacties (methods) op externe gebeurtenissen: een muisklik, een toetsaanslag, ... De methods zijn kleine stukjes code in een taal die doet denken aan de oude programmeertaal Basic. Daarnaast kunnen optioneel grotere stukken programma-code worden toegevoegd in modules.

Visual Basic gebruikt de volgende bestands-types:

Omdat Visual Basic gebruik maakt van diverse bestanden, is het aan te raden de verschillende bestanden die een applicatie uitmaken, in een afzonderlijke map te groeperen.

Een voorbeeld-applicatie

Onderstaand voorbeeld is gebaseerd op een cursus van Prof. Hoorelbeke in het tweede ingenieursjaar Handelsingenieur, specialisatie beleidsinformatica [3]. Het beschrijft een automatisch bestelformulier van een bedrijf dat websites ontwikkelt.

Algemene terminologie van object-based programming

Visual Basic is gebaseerd op object-based programming. De programmeur maakt gebruik van een aantal voorgedefinieerde standaardcomponenten, die ze integreert in het maatwerk van haar toepassingsprogramma.

Het uitgangspunt van een Visual Basic-project zijn één of meer schermen, forms genaamd. Iedere form bevat verscheidene controls, d.w.z. elementen van een grafische gebruikers-interface: labels, tekstvakken, roosters, drukknoppen, afbeeldingen, keuzerondjes, aanvink-vakjes,...

Iedere control beschikt over een goed gedefinieerd stel eigenschappen: de properties. De properties van een actieve control kan men zichtbaar maken met de F4-toets.

Daarnaast is ieder type control gevoeling voor een aantal events: externe gebeurtenissen vanuit de windows-omgeving zoals bewegingen en kliks van de muis, toetsaanslagen, netwerkberichten,...

Events kunnen worden afgehandeld is korte stukjes programmacode, methods, die bij de control worden opgeslagen.

Uitzicht van de ontwikkelingsomgeving

De programmeeromgeving kan worden opgestart vanaf het startmenu van Windows NT: Start/Programs/Microsoft Visual Basic 5.0/Visual Basic 5.0. Als je later je project hebt bewaard in een .VBP-bestand (Project file), kan je VB ook meteen activeren door dat bestand te dubbelklikken in Windows NT Explorer of in My Computer.

De eerste keer vraagt VB je te specifiëren wat voor project je wil opstarten: kies "Standard EXE" uit het tabblad "New".

New / Standard EXE

Er zijn nu drie afzonderlijke elementen zichtbaar waarmee je de grafische interface van je applicatie kunt opbouwen. Het belangrijkste is het form design window. Het bevat een (aanvankelijk lege) voorstelling van het voorlopig enige scherm van je applicatie.

Project1 - Form1 (design window)

Links daarvan bevindt zich een floating toolbar met de beschikbare soorten controls:

Aanwijzer (is geen control) PictureBox Label
TextBox Frame CommandButton
CheckBox OptionButton ComboBox
ListBox HScrollBar VScrollBar
Timer DriveListBox DirListBox
FileListBox Shape Line
Image Data OLE
1 pijltje en 20 soorten controls

Je kan een control toevoegen aan de form door de overeenkomstige knop in de werkbalk in te drukken, en vervolgens een rechthoekig gebied af te bakenen op de form. We illustreren dit aan de hand van een titeltekst voor het formulier.

Om ons werk te bewaren gaan we in drie stappen te werk:

  1. Klik op het diskette-icoon ("Save project") op de bovenste werkbalk en maak met behulp van de knop "Create New Folder" een map met de naam VB op je persoonlijke I-schijf
    create new folder (I:\VB)
  2. Bewaar de huidige form onder de naam Prijsofferte[.frm] in de zojuist gemaakte map
  3. Bewaar het huidige project onder de naam Prijsofferte[.vbp] in de zojuist gemaakte map

Grafische constructie van een invulformulier

We bouwen een formulier om automatisch prijsoffertes te maken voor de aanmaak van websites. De regels waarmee we de prijs van een website berekenen, zijn de volgende:

Al deze prijzen zijn exclusief 21 procent BTW.

We vergroten eerst de form. Sleep de rechterbenedenhoek van het ontwerpvenster 'Project1 - Form1 (Form)' een paar centimeter naar onderen en naar rechts. Klik dan op het eigenlijke formulier (niet op de label) en sleep ook zijn rechterbenedenhoek naar onderen en naar rechts.

Teken een frame-control voor de logische groepering van de basisgegevens. Construeer bovenop de frame vijf tekstvakken voor de prijs van de webpagina, het uurtarief, het aantal werkuren, de prijs voor het JavaScript (die het product van de twee vorige zal zijn) en het hosting-tarief. Onder de frame komen tekstvakken voor respectievelijk de totale prijs exclusief BTW, de BTW, en de totale prijs inclusief BTW.

Construeer ook labels om duidelijk te maken wat de verschillende velden betekenen. Als je een label tekent, verschijnt hij met de tekst "LabelX" waar X een getal is. Klik, terwijl de label geselecteerd is, in het venster Properties op de eigenschap Caption om de tekst te wijzigen in iets zinvols. Rond het geheel af met een drukknop voor de berekening van de offerte. De Caption van de drukknop is aanvankelijk "Command1", en moet "Bereken" worden. De inhoud van de tekstvelden moet met een zinvolle waarde worden geïnitialiseerd. We typen deze waarden in de "Text" property. De Caption "Frame1" van de frame-control moet worden gewist: het kadertje behoeft geen tekst.

Het resultaat ziet er ongeveer als volgt uit.

een frame, tekstvakken, een button en labels

Methoden: kleine stukjes programma-code

We hebben nu de gebruikers-interface van de applicatie gespecifieerd, maar de applicatie "doet" nog niets. Start de applicatie met de knop "Run" in de werkbalk bovenaan (een driehoekige blauwe pijl).

De run-knop is een blauwe driehoekige pijl

Je ziet nu het applicatievenster. Probeer een paar getallen in te voeren, en druk eens op de knop "Bereken". Sluit de applicatie terug af met de X-knop rechts bovenaan.

We zouden natuurlijk graag hebben, dat bij het indrukken van de knop "Bereken" automatisch de totaalprijzen uitgerekend worden. Daarvoor zullen we een klein stukje programma schrijven in Visual Basic. Maar eerst moeten we nog passende namen kiezen voor de verschillende controls.

De naam van een control kan je wijzigen door de control te selecteren, en vervolgens in het Properties-venster op de (name)-eigenschap te klikken. Voorlopige hebben onze controls nog betekenisloze namen zoals Text1, Text2, Command1, Label1, enzovoort. Let op: de Caption van een label of een drukknop is niet hetzelfde als de naam van een dergelijke control. Verander de namen van de tekstvelden in:

Verander de naam van de drukknop in cmdBereken.

Om een stuk programma te schrijven dat wordt uitgevoerd wanneer de gebruiker op een knop drukt, moet je de overeenkomstige control dubbelklikken. Dubbelklik in je schermontwerp op de knop "Bereken". Je krijgt nu een nieuw venster ("Frm1 - Code") dat er als volgt uitziet.

Code-venster: Private Sub cmdBereken_Click()

Tussen de regels Private Sub cmdBereken_Click() en End Sub typ je vier programma-opdrachten om tussenresultaten te berekenen:

Private Sub cmdBereken_Click()
txtJavaScript = Val(txtUren) * Val(txtTarief)
txtExclusief = Val(txtWebpagina) + Val(txtJavaScript) + Val(txtHosting)
txtBTW = Val(txtExclusief) * 0.21
txtInclusief = Val(txtExclusief) + Val(txtBTW)
End Sub

De functie Val() berekent de getalwaarde van een tekstveld, op voorwaarde dat het tekstveld uitsluitend cijfers (en een eventuele decimale punt) bevat. Als we die functie niet zouden gebruiken, maar daarentegen zouden schrijven

txtExclusief = txtWebpagina + txtJavaScript + txtHosting

dan zou txtExclusief naderhand de concatenatie van de drie andere tekstvelden bevatten, dat wil zeggen de verschillende cijfertekens achter elkaar geschreven. Dat is niet de bedoeling: de som van 10000, 3000 en 15000 is niet 10000300015000, maar 28000.

De volgorde van de vier berekeningen heeft wel degelijk belang. Zo moet de prijs voor het JavaScript in de eerste lijn reeds berekend zijn, voordat we hem kunnen gebruiken in het rechterlid van de tweede lijn.

Aanvullende berekeningen

Het is natuurlijk niet ideaal dat de gebruiker zelf de prijs van webhosting moet invoeren. Hij kan zich vergissen, met allerlei nare misverstanden tot gevolg. In plaats daarvan zullen we hem de kans geven, webhosting "aan" of "uit" te zetten door middel van een stel keuzerondjes (Engels: radio buttons).

Teken twee radio buttons onder elkaar, op het frame in de buurt van de label "Web hosting", en breng de volgende properties aan:

(name) radNeen radJa
Caption Neen Ja
Value True False

Dubbelklik op het formulier de zojuist getekende "Neen"-knop. Er verschijnt een code-venster met de tekst

Private Sub radNeen_Click()

End Sub

en de cursor knipperend op de blanco lijn. Vul op die lijn de volgende programmatekst in, om de prijs van de hosting op 0 te zetten:

txtHosting = 0

Op gelijkaardige wijze moet de "Ja"-optie de prijs op 15000 brengen. Het eindresultaat van beide acties ziet er dus als volgt uit:


Private Sub radJa_Click()
txtHosting = 15000
End Sub

Private Sub radNeen_Click()
txtHosting = 0
End Sub

Start nu nogmaals de applicatie om te verifiëren dat deze nieuwe functionaliteit werkt.

werkende applicatie

Visual Basic als front end bij een relationele gegevensbank

Situatie

De data control slaat de brug tussen een Visual Basic form en een relationele gegevensbank. De stukken programmacode die met andere controls op het formulier geassocieerd zijn, kunnen de gegevens uit de diverse tabellen oproepen en/of wijzigen via de properties van de data control.

In het voorbeeld hierna bouwen we een data processing-formulier gebaseerd op twee entiteiten:

klant - (1:plaatst:n) - bestelling

We implementeren het logische gegevensmodel hierboven door middel van twee tabellen:

KLANT (klantnr, bedrijf, contactpersoon, adres, postcode,
       gemeente, land, telefoon, fax, email)
BESTELLING (klantnr, datum, product, prijs, korting)
1:n relatie KLANT-BESTELLING via sleutelveld klantnr

De één-op-veel-relatie "plaatst" vindt haar implementatie in de kolom klantnr, die in de tabel KLANT als primaire sleutel optreedt, en in de tabel BESTELLING als vreemde sleutel.

Een dergelijke koppeling geeft vaak aanleiding tot een soort schermen dat in het jargon master/detail heet. Op één scherm verschijnen bovenaan de algemene gegevens van een klant, daaronder een lijst van zijn bestellingen.

De primaire sleutel van BESTELLING is {klantnr, datum}. Klaarblijkelijk zijn de ontwerpers ervan uitgegaan dat het systeem nooit meer dan één bestelling per klant per dag hoeft te verwerken. Een gevaarlijke keuze, die we hier echter node aanvaarden.

Je kan de gegevensbank zelf construeren met behulp van MS Access 97, maar je kan ook een volledig ingevuld exemplaar downloaden.

De Data Form Wizard

Kies uit het menu Project het item Add Form en dubbelklik het tweede icoon "VB Data Form Wizard". Dat is een proces van een tiental opeenvolgende dialogen waarmee een database-gekoppeld scherm wordt opgebouwd.

De eerste dialoog is zuiver informatief bedoeld en kan met een aanvinkvakje definitief worden uitgeschakeld. De tweede dialoog vraagt om het soort database waarop het formulier zal gebaseerd zijn.

Access dbaseIII dbaseIV dbase5.0 FoxPro2.0 FoxPro2.5
FoxPro2.6 FoxPro3.0 Paradox3.x Paradox4.x Paradox5.x
Remote(ODBC)

We kiezen de eerste optie, Access, omdat we met een dergelijke gegevensbank werken. De laatste optie, Remote(ODBC) is interessant omdat ze toelaat, een Visual Basic-gezicht te geven aan een professionele database van één van de grote merken zoals Oracle, Sybase, Informix, Ingres, enz. In principe kunnen we ook een ODBC-verbinding definiëren naar een gewone Access-database.

De derde dialoog vraagt ons om welke (Access-)database het gaat, en waar we die kunnen vinden. Gebruik de "Browse"-knop om aan te geven waar zich jouw kopie van de gegevensbank bevindt.

Kies database I:\Vb\Webdesign.mdb

In het vierde dialoogscherm hebben we de keuze tussen drie verschillende uitzichten voor ons formulier:

Kies het type Master/Detail, zodat we met beide vormen kunnen experimenteren.

Kies schermlayout 'Master/Detail'

De vijfde dialoog specifieert op welke database-kolommen de gegevens in het "Master"-gedeelte (de individuele velden bovenaan op het formulier) gebaseerd zijn. Kies eerst in het valmenu "Record Source" de tabel KLANT, en klik dan op de dubbele pijl naar rechts (>>) om alle kolommen van deze tabel in het scherm op te nemen.

Record Source KLANT; move all fields to the right

In de zesde dialoog doen we hetzelfde voor het "Detail"-gedeelte (het rooster onderaan op het formulier).

De zevende dialoog vraagt via welke velden het Master- en het Detail-gedeelte gekoppeld zijn. Normaal specifiëren we hier een primaire respectievelijk vreemde sleutel; maar vermits we hier twee keer dezelfde tabel hebben (oneigenlijk gebruik van Master/Detail !), specifiëren we tweemaal het primaire sleutelveld klantnr.

Master: klantnr; Detail: klantnr

De VB Data Form Wizard zal automatisch een reeks drukknoppen op het formulier aanbrengen voor het normale onderhoud van de gegevensbank. In dialoog 8 kunnen we kiezen voor vijf verschillende knoppen:

De knop "Refresh" is slechts nuttig bij gegevensbanken die door verscheidene gebruikers tegelijkertijd kunnen worden aangesproken; je mag deze optie blanco maken.

Add, Delete, Update, Close (geen Refresh)

De negende en laatste stap vraagt om de naam die de form zal hebben binnen het VB-project. Dit is niet noodzakelijk de naam van het .FRM-bestand waarin je het scherm zult bewaren, al lijkt het wel een goed idee om die twee altijd te doen overeenstemmen.

Aanvaard de suggestie frmKLANT en klik op de knop "Finish". Het resultaat zou er ongeveer als volgt kunnen uitzien.

tien tekstvelden, een rooster, twee data controls en vier drukknoppen

Om het formulier "actief" te maken moet je via het menu Project/Project1 Properties... de default form op frmDATA zetten. De default form is het eerste formulier dat wordt opgeroepen bij de start van het programma.

Het formulier aanpassen

Aan het formulier zoals de Data Form Wizard het genereert, moeten we nog een aantal handmatige wijzigingen aanbrengen. We beginnen met het toevoegen van een aantal drukknoppen om de navigatie te vergemakkelijken:

functionaliteit (name) Caption
rangschik klanten op nummer btnOrdenklantnr #klantnr
rangschik klanten alfabetisch op bedrijfsnaam btnOrdenbedrijf #bedrijf
rangschik klanten per land btnOrdenland #land
ga naar eerste klant btnEerste << eerste
ga naar vorige klant btnVorige < vorige
ga naar volgende klant btnVolgende volgende >
ga naar laatste klant btnLaatste laatste >>

Achter elk van deze knoppen komt een klein stukje programma. De eerste drie knoppen lanceren elk een SQL-opdracht in de gegevensbank, de volgende vier maken elk gebruik van één standaard-method van de Recordset property van een data control.

Private Sub btnOrdenklantnr_Click()
SQL = "select * from KLANT order by klantnr"
datPrimaryRS.RecordSource = SQL
datPrimaryRS.Refresh
End Sub

Private Sub btnOrdenbedrijf_Click()
SQL = "select * from KLANT order by bedrijf"
datPrimaryRS.RecordSource = SQL
datPrimaryRS.Refresh
End Sub

Private Sub btnOrdenland_Click()
SQL = "select * from KLANT order by land"
datPrimaryRS.RecordSource = SQL
datPrimaryRS.Refresh
End Sub

Private Sub btnEerste_Click()
datPrimaryRS.Recordset.MoveFirst
End Sub

Private Sub btnVorige_Click()
datPrimaryRS.Recordset.MovePrevious
End Sub

Private Sub btnVolgende_Click()
datPrimaryRS.Recordset.MoveNext
End Sub

Private Sub btnLaatste_Click()
datPrimaryRS.Recordset.MoveLast
End Sub

Plaats de property "Align" van de DB Grid en van de Data Control op "0 - vbAlignNone" (misschien stond hij reeds zo), zodat je ze onderaan het formulier kan plaatsen. Breng de data control naar de achtergrond met het commando Format/Order/Send to Back. Vervang de vier Engelse captions door hun Nederlands equivalent. Het eindresultaat zou er ongeveer als volgt kunnen uitzien.

Compleet beheersscherm klantenbestand

Mogelijke uitbreidingen

We verwijzen naar [3] voor de volgende nuttige uitbreidingen:

Distributed computing en client/server

Definities

Een gedistribueerd informatiesysteem is een informatiesysteem waarvan de gegevens en/of de bewerkingen op die gegevens verdeeld zijn over strikt gescheiden subsystemen.

We spreken meestal niet van distributed systems als er slechts een logische opdeling van het systeem bestaat, zoals bijvoorbeeld weergegeven in een Data Flow Diagram. Bij distributed systems denken we eerder aan een fysische of geografische scheiding van de deelsystemen: de deelsystemen bevinden zich op verschillende computers, die misschien zelfs in verschillende lokalen, gebouwen of werelddelen staan opgesteld.

Men spreekt van peer-to-peer en client/server-systemen naargelang de verschillende subsystemen respectievelijk een gelijk(w)aardige rol spelen in het geheel, dan wel zich tot elkaar verhouden als aanbieders en gebruikers van diensten. In het tweede geval noemt men het subsysteem dat een dienst aanbiedt, een server, en het subsysteem dat van die dienst gebruikmaakt, een client.

Hoofdstuk 10 van [1] belicht de zakelijke aspecten van een gedistribueerde informatie-architectuur.

Voorbeelden

  1. Om een bepaald geheimschrift te ontcijferen, zijn duizend miljard rekenkundige bewerkingen nodig. Men slaagt erin de bewerkingen te verdelen over honderd machines, die elk tien miljard bewerkingen voor hun rekening nemen. Dit is een voorbeeld van peer-to-peer-samenwerking, aangezien de verschillende subsystemen op gelijk niveau met elkaar overleggen.
  2. Het world wide web is een typische client/server-toepassing. De webserver bewaakt een paar honderd teksten (webpaginas) en wacht op verzoeken via een Internet-verbinding. De client is een browserprogramma zoals Netscape Navigator of Microsoft Internet Explorer. De client bezit zelf geen webpaginas, maar is wel in staat een webpagina netjes op het scherm te tonen. Het is de client die het initiatief neemt (op vraag van de menselijke gebruiker, maar dat is hier niet relevant) een pagina te bestellen bij de server. De server reageert met het opsturen van de webpagina, een HTML-bestand, en wacht dan gewoon op verdere instructies.
Browser (client) en webserver
communiceren via HTTP

Typologie

The Gartner Group onderscheidt vijf soorten client/server-systemen naargelang van de verschillende taken die de client en de server vervullen. Hun uitgangspunt is dat traditionele gegevensverwerkende toepassingen meestal een gelaagde structuur vertonen, waarbij drie lagen instaan voor respectievelijk de volgende functies:

  1. Presentatie (constructie beheer van de gebruikersinterface)
  2. Business logic (bewerkingen en controles op gegevens)
  3. Data (opslag en beheer van persistente gegevens)

De eenvoudigste client/server-systemen bestaan uit één client en één server: in het Engels spreekt men van een two-tier architecture. Gartner stelt dat de scheidingslijn tussen client en server meestal parallel loopt met de hierboven beschreven drie-lagige architectuur.

presentatie/logica/data

Het Gartner-model onderscheidt vijf verschillende vormen van client/server-architecturen, naargelang van de plaats waar de scheidingslijn tussen de twee computers loopt:

  1. gedistribueerde presentatie (distributed presentation)
  2. presentatie op afstand (remote presentation)
  3. gedistribueerde logica (distributed processing)
  4. data op afstand (remote data)
  5. gedistribueerde data (distributed data)
vijf scheidingslijnen tussen client en server

De eerste twee types worden ook wel met de verzamelnaam "thin client" aangeduid, de laatste twee met "fat client".

Thans zien we hier en daar ook de term three-tier architecture opduiken. Het betreft hier een systeem dat in 3 subsystemen uiteenvalt, waarbij één van de drie tegelijkertijd als server voor het tweede systeem en als client van het derde systeem optreedt. Het kan daarbij gaan om een opsplitsing presentatie/logica/data.

Voorbeelden

  1. Het world wide web is traditioneel van het type "remote presentation": de browser heeft de verantwoordelijkheid voor de visuele opmaak van het document, de server levert de inhoud en de structuur.
  2. Recente ontwikkelingen doen het web meer en meer in de richting van "distributed presentation" opschuiven. De auteurs van webpaginas proberen namelijk zo veel mogelijk zelf te bepalen in welk lettertype, met welke achtergrondkleur, enz.,... hun document verschijnt.
  3. De reservatie van vliegtuigbiljetten kan het best worden geïmplementeerd als "remote data": prijsberekening en afdrukken van een offerte in het reisbureau; de eigenlijke reservatiegegevens op een centrale server bij de luchtvaartmaatschappij. Indien sommige gegevens van de reiziger bij het reisbureau worden opgeslagen, hebben we te maken met "distributed data".
  4. Een drielagenarchitectuur doet zich ondermeer voor wanneer een webserver nog eens een externe database gaat raadplegen om dynamische webpaginas op te bouwen, dat wil zeggen webpaginas waarvan de inhoud afhankelijk is van wat er in de database zit.

Middleware

Het eerste technische probleem bij de bouw van een client/server-systeem is de connectiviteit. Hoe laat je namelijk twee computers informatie uitwisselen ? Niet alleen is er een fysische verbindingslijn en een communicatieprotocol nodig, ook moeten de verschillen tussen types, merken en versies worden overbrugd.

Onder middleware verstaan we: een stuk systeemsoftware dat de connectiviteit verzorgt tussen verschillende componenten van een gedistribueerd informatiesysteem.

Naargelang de technische aanpak en het toepassingsgebied onderscheiden we vijf types middleware:

Bij remote procedure call (RPC) kan een programma op één computer een subprogramma op een andere computer oproepen, en het resultaat afwachten. Meestal verloopt de communicatie synchroon, dat wil zeggen dat het hoofdprogramma niet verdergaat voor het resultaat van het subprogramma bekend is. RPC is vooral nuttig bij de verschijningsvorm "distributed processing" van client/server. Een voorbeeld is Remote Method Invocation (Java RMI) van de firma Sun Microsystems Inc.

Door middel van message-oriented middleware (MOM) kunnen programma's op verschillende systemen boodschappen met elkaar uitwisselen. Daarbij kunnen ze wachten op antwoord (synchrone communicatie), of gewoon verderdoen in afwachting van eventuele andere boodschappen (asynchrone communicatie). De boodschappen die bij een bepaald subsysteem aankomen, blijven staan in een wachtlijn (queue) alvorens te worden verwerkt. MOM is een geschikte oplossing voor peer-to-peer-communicatie, maar ook voor client/server-systemen die gebruik maken van distributed processing. Een belangrijke vertegenwoordiger van deze klasse is het produkt DECMessageQ op de systemen van de vroegere firma Digital.

Transaction Processing (TP) Monitors zijn traditionele database-systemen die ontworpen zijn om vele gebruikers tegelijkertijd tewoord te staan, zonder belangrijke wachttijden. TP Monitors draaien op grote computers zoals IBM-mainframes. Ze worden bijvoorbeeld in bancaire toepassingen gebruikt voor het "heavy duty" werk. Thans zijn er van deze TP Monitors ook gedistribueerde varianten te koop. Het gaat hier om de "remote data" variant van client/server.

Object Request Brokers (ORBs) zijn een categorie apart: ze ondersteunen niet één bepaald type client/server-systeem, maar gaan uit van het object-georiënteerde paradigma. Bij object-georiënteerde systemen wordt de scheidingslijn tussen data en programma's gesloopt: een object bevat zowel informatie als bewerkingen (insiders spreken van state en behaviour). Een ORB regelt de wijze waarop verschillende computersystemen objecten kunnen uitwisselen.

Momenteel zijn er twee (onderling helaas incompatibele) ORB-standaarden op de markt: OLE/COM/DCOM van Microsoft, en CORBA van de rest van de wereld.

Tenslotte zijn er nog enkele eenvoudige hulpmiddelen om een computerprogramma in staat te stellen, een database op een andere computer te raadplegen. Men spreekt van database middleware en een bekend voorbeeld is ODBC (Open Database Connectivity) van Microsoft.

TODO: toets deze tekst aan [4].

Referenties


Geschiedenis van deze pagina

Valid HTML 4.0!