Programma Structuur Diagrammen (PSDs) Er zijn verschillende schematechnieken waarmee je bruikbare schemas kunt opstellen. Een daarvan is het Programma Structuur Diagram, afgekort tot PSD.
Een Programma Structuur Diagram staat ook bekend onder de naam Nassi-Shneiderman Diagram.
Een PSD is een schema dat de samenhang de structuur van instructies binnen een programma weergeeft. PSDs bestaan uit:
rechthoeken driehoeken tekst Je moet ze beschouwen als voorbereiding op het coderen in een programmeertaal. Ze zijn programmeertaalonafhankelijk. Bovendien gelden er geen strenge taalregels; de probleemoplossing staat centraal.
Algoritme We spreken in dit verband wel van eenalgoritme. De algoritme om van een probleem tot een programma te komen, ziet er als volgt uit:
probleemstelling analyse schematische oplossing het maken van de sourcecode compileren Voor alle duidelijkheid: het schrijven van opdrachten in een programmeertaal is zo ongeveer de laatste stap in het systeemontwikkelingsproces. Eerst moet de programmeur op een gestructureerde wijze de oplossing van een probleem bedenken. PSDs vormen hierbij een hulpmiddel.
Het programma Struktograaf is een hulpmiddel voor het tekenen van PSD's: www.sichemsoft.nl
Hier vind je een freeware-programma met dezelfde functionaliteit als Struktograaf: eii.ucv.cl
Programma Structuur Diagrammen (PSDs) met Struktograaf Basisstructuren Bij PSDs zijn er slechts drie basisstructuren. Als deze op de juiste manier worden gecombineerd, kun je hiermee elk willekeurig computerprogramma schrijven. De basisstructuren zijn:
sequentie iteratie selectie Deze structuren worden ook wel aangeduid met de termen opeenvolging, herhaling en keuze. Bij de behandeling van deze structuren, gaan we uit van een eenvoudig probleem: het bakken van een ei. Niet voor niets wordt het ontwikkelen van een computerprogramma wel eens vergeleken met een recept uit een kookboek!
Sequentiële opdrachten worden van boven naar beneden één voor één uitgevoerd:
Het bakken van een ei kan in een PSD als volgt worden weergegeven:
Hoe gedetailleerd een schema is, hangt af van de gebruiker. Iemand die al vaker iets gekookt of gebakken heeft, zal voldoende hebben aan de handeling vuur aansteken. Voor iemand die dit voor het eerst doet, zouden we het schema zo kunnen uitbreiden:
Voorbeeld: ei bakken Vaak moeten in programmas bepaalde onderdelen herhaald worden. Iets dergelijks geldt bij het bakken van een ei. Stel dat er in de pan maar één gebakken ei past. Als je meer eieren wilt bakken, hoef je de eerste en de laatste stap uit het schema niet bij elk nieuw ei opnieuw te doen, maar de tussenliggende stappen moeten wel voor elk ei uitgevoerd worden. In het schema geef je dit aan door middel van een iteratie.
Er zijn twee soorten iteraties:
iteratie met controle achteraf iteratie met controle vooraf We geven beide vormen als volgt weer.
Controle vooraf
Controle achteraf
Controle vooraf In het voorbeeld van het gebakken ei kun je vooraf en achteraf controleren of je het gewenste aantal eieren gebakken hebt; we gaan even uit van drie stuks. Bij controle vooraf ontstaat het volgende PSD:
Controle achteraf Bij controle achteraf krijg je het volgende PSD:
Bij controle achteraf wordt de herhaling minstens één keer uitgevoerd. Dit is een verschil ten opzichte van de controle vooraf.
Een derde programmastructuur is de selectie. Dit houdt in dat het programmaverloop zich splitst op grond van de vraag of wel of niet aan een bepaalde voorwaarde is voldaan. Afhankelijk van het antwoord wordt gestuurd naar de ene serie opdrachten of naar de andere serie.
In een PSD geef je dit weer door middel van een driehoek. Deze wordt gevolgd door twee kolommen. In de ene kolom staat wat het programma moet doen als de voorwaarde wel geldt, in de andere wanneer deze niet geldt.
Voorbeeld: ei bakken Als je een ei gaat bakken kan het zijn dat het vuur niet meer aangestoken hoeft te worden. Je geeft dat als volgt weer:
Nu is dit natuurlijk een heel eenvoudig keuzevoorbeeld. Het is ook denkbaar dat er zich, nadat een keuze gemaakt is, weer een nieuw keuzeprobleem voordoet. Kijk eens naar het volgende voorbeeld.
Voorbeeld: toegangsprijs Het gaat om het bepalen van de toegangsprijs voor een pretpark. De normale prijs bedraagt tien euro. Kinderen tot twaalf jaar en ouderen vanaf zestig jaar betalen de helft. Er zijn dus twee keuzes te maken, zoals het volgende schema laat zien.
Ten slotte Je hebt nu voorbeelden gezien van de drie basisstructuren van PSDs. Het lijkt misschien onwaarschijnlijk, maar met deze structuren kun je in principe de werking van elk programma beschrijven, hoe ingewikkeld dat ook is. Dat komt doordat elke rechthoek van een structuur zelf weer uit andere structuren mag bestaan:
in het gedeelte dat herhaald wordt, mag een keuzediagram voorkomen; de vakken van een keuzediagram mogen nieuwe keuzen bevatten; enzovoort.
Om inzicht te krijgen in de werking van een PSD en om te controleren of het schema juist is, is het noodzakelijk om de opdrachten na te lopen. Daarbij worden de opdrachten stuk voor stuk uitgevoerd. Dit heeft uiteraard alleen zin als je dat nauwkeurig doet. Je moet daarbij alle opdrachten in de juiste volgorde uitvoeren en elke verandering in waarden op papier bijhouden. (Denk bijvoorbeeld aan het aantal te bakken eieren.)
Ooggetuigenverslag Zon controle wordt wel een ooggetuigenverslag genoemd. Het doel is tweeledig:
Als de werking van het PSD bekend is: controleren of het PSD juist is. Als de werking van het PSD onbekend is: onderzoeken wat het PSD doet. Om de controle uit te voeren is het niet nodig dat je de werking van het PSD al van tevoren doorgrondt. Als voorbeeld nemen we het volgende PSD, waarvan nog niet bekend is wat het doel ervan is.
Dit is een vrij eenvoudig PSD, maar het gaat om het principe. Je ziet eerst twee sequentie-opdrachten. Het blijkt dat het hierbij gaat om iets wat op het scherm afgedrukt moet worden:
een waarschuwing dat een bestand al onder een bepaalde naam op schijf aanwezig is de vraag of deze naam desondanks gehandhaafd moet blijven Daaronder staat een iteratie met een controle achteraf. Het programma moet als het ware herhaaldelijk wachten totdat de gebruiker een J of een N indrukt.
Het PSD eindigt met een selectie: drukt de gebruiker op de J-toets, dan kan worden overgegaan tot opslaan. In alle andere gevallen gebeurt er niets. Dit betekent dat de gebruiker uitsluitend op de J kan drukken om het bestand onder dezelfde naam op te slaan. Dit is de beste methode om te voorkomen dat het bestand ongewild overschreven wordt.
Artikel van Automatisering Gids: "Vrouwen programmeren beter"
Programmeertalen worden wel ingedeeld in vijf hoofdcategorieën. Deze indeling geeft niet alleen de chronologische volgorde weer, maar ook een toenemende gebruikersvriendelijkheid. We onderscheiden:
Machinecode Assembleertalen Hogere programmeertalen Vierde-generatietalen Objectgeoriënteerde talen Hoewel de eerste twee categorieën vandaag de dag voor de gemiddelde gebruiker geen grote rol spelen omdat ze voor hem verborgen blijven, gaan we hier toch even op in.
De kleinste geheugeneenheid is de bit. Een bit is een binair getal (binary digit), dat twee waarden kan hebben: 0 of 1. Alles in het interne geheugen, maar ook op externe geheugenmedia, wordt binair vastgelegd. Dit betekent dus dat ook een programma in binaire vorm wordt opgeslagen. Dit noemen we de machinecode. Elk type processor heeft een eigen manier, de instructieset, om de machinecode te lezen.
De allereerste computers werden in machinecode geprogrammeerd. Het bedieningspaneel van de computer bevatte een lange reeks schakelaars. De programmeur voerde de opdracht in door de juiste schakelaars omhoog of omlaag (dat is een 1 of een 0) te zetten, waarna de opdracht in het geheugen werd opgeslagen. Dat was eentonig werk, waarbij bovendien gemakkelijk fouten werden gemaakt.
De bedieningspanelen van de ENIAC.
In die begintijd stelde een programma weinig voor, de programmas waren nog niet zo omvangrijk. Bovendien waren ze sterk gekoppeld aan de computer waarvoor ze waren geschreven. Een programmeur was al apetrots als hij de computer zo in kon stellen dat die de vierkantswortel van een getal van vijf cijfers ging berekenen
Machinetalen zijn programmeertalen van de eerste generatie. Ze worden tot de lagere programmeertalen gerekend. Lager wil in dit geval zeggen: dicht bij de processor.
Een opdracht in machinetaal om twee getallen op te tellen, kan als volgt luiden:
Veel informatie over assembler: webster.cs.ucr.edu
Ook assembleertaal is een lagere programmeertaal. Het verschil met machinecode is dat er gebruik wordt gemaakt van gemakkelijker te onthouden lettercodes in plaats van nullen en enen. Een speciaal vertaalprogramma, assembleerprogramma genaamd, dient dan om de lettercodes om te zetten in machine-instructies. Dat blijft onder alle omstandigheden nodig, want uiteindelijk is dat voor een computer de enige verstaanbare taal.
Overigens is gemakkelijker te onthouden maar betrekkelijk. Je moet denken aan combinaties die uit enkele letters bestaan, bijvoorbeeld:
LIR zou kunnen staan voor load into register (haal waarde vanuit het geheugen in het rekenregister), AC voor add constant (tel constante op) PIM voor put into memory (zet inhoud van rekenregister op een geheugenplaats) Een voorbeeld van programmacode in assembler.
Een opdracht in assembleertaal om twee getallen op te tellen, kan als volgt luiden:
LOD Y ADD Z STR X
Geheugenplaatsen Een bijkomend voordeel voor de programmeur is dat hij niet langer geheugenplaatsen hoeft bij te houden. Het vertaalprogramma regelt de plaatsing van de variabele in het geheugen. De programmeur hoeft alleen maar de naam te noemen en niet het nummer van de geheugenplaats.
Assembleertaal is een taal van de tweede generatie. Ondanks het feit dat assembleertaal verder van de processor af staat dan machinetaal, spreken we nog wel van een machinegeoriënteerde taal.
Het schrijven van programmas in assembleertaal is een zeer tijdrovende aangelegenheid, die meestal lange, onoverzichtelijke programmas oplevert. Er wordt daarom alleen gebruik gemaakt van een assembleertaal als het programma afgestemd moet worden op de specifieke kenmerken van een processor, bijvoorbeeld in embedded systems. Je moet dan denken aan de processors (microcontrollers) in apparaten als koffieautomaten en thermostaten. Dit is een veelvoorkomende toepassing van een assembleertaal.
De volgende grote stap in de ontwikkeling van programmeertalen werd gezet toen het mogelijk werd om verschillende machinetaalopdrachten te combineren in één programmaopdracht. Deze programmaopdracht benadert al veel meer de menselijke taal dan assembleertaal.
Bij hogere programmeertalen programmeertalen van de derde generatie hoeft de programmeur geen kennis te hebben van de eigenschappen van de processor. De programmeur schrijft stapsgewijs de procedure (regels) voor die de computer moet volgen om het programma uit te voeren. We spreken daarom ook wel van procedurele talen.
Ook bij deze hogere programmeertalen worden de instructies uiteindelijk weer vertaald naar machinecode. Hiervoor dient een speciaal vertaalprogramma, compiler geheten.
Compiler Een compiler is kort gezegd een vertaalprogramma dat de programmaregels (de zogeheten sourcecode of broncode) omzet in machine-instructies (de objectcode of doelcode).
De programmaopdrachten in een programmeertaal van de derde generatie zijn machine-onafhankelijk. In het ideale geval kan dezelfde broncode zonder aanpassingen worden gebruikt op een computer met een andere processor. De compilers voor de desbetreffende taal zijn wél machine-afhankelijk. Ze zetten de broncode om in opdrachten voor een bepaalde processor of een bepaald besturingssysteem.
Voorbeelden Er zijn tientallen derde-generatietalen. Ze werden vaak ontwikkeld voor een bepaald toepassingsgebied. De bekendste zijn:
Artikel van Computable: "Cobol is nog lang niet afgeschreven"
FORTRAN, ontwikkeld voor technische en wetenschappelijke publicaties.
COBOL, vroeger een populaire programmeertaal voor administratieve toepassingen. In de bank- en verzekeringswereld zijn overigens nog steeds veel COBOL-programmas in gebruik.
C, een nog altijd veelgebruikte taal voor het ontwikkelen van systeem- en applicatiesoftware; het besturingssysteem UNIX is ontwikkeld in C.
Pascal, een taal die helpt bij het ontwikkelen van goed gestructureerde programmas. Een voorbeeld van een statement in Pascal.
De opdracht in COBOL om twee getallen op te tellen, luidt:
In talen van de vierde generatie (4GL) worden de programmaopdrachten steeds krachtiger. De meeste talen van deze generatie zijn niet-procedureel; ze zijn eerder probleemgericht. Dit wil zeggen dat de programmeur moet aangeven welk doel hij voor ogen heeft en dat de computer daarbij bepaalt welke reeks instructies daarvoor nodig zijn. Deze talen zijn weer een stap verder verwijderd van de computer.
De hoge verwachtingen die men had van vierde-generatietalen zijn niet uitgekomen. Een algemeen toepasbare vierde-generatietaal levert onhandelbaar grote programmas op, omdat de software veel ballast bevat. De vierde-generatiesoftware die het programma maakt, begrijpt natuurlijk niet echt wat er moet gebeuren en neemt voor de zekerheid allerlei opdrachten en voorzieningen op. Een menselijke programmeur zou een meer afgewogen keuze maken.
Hulpmiddelen Om deze reden beperkt men zich liever tot vierde-generatiehulpmiddelen. Met deze hulpmiddelen (Engels: tools) kan men snel een toepassing of een bepaald gedeelte van een toepassing genereren. Een voorbeeld van zon hulpmiddel is een schermgenerator, waarmee op eenvoudige wijze de layout van invulschermen kan worden bepaald. Verder zijn er rapportgeneratoren, waarmee men aan de hand van gegevens uit een database snel een overzicht kan produceren.
Ook macros die in applicaties als Microsoft Word en Excel gemaakt kunnen worden en vraagtalen alsSQL worden tot de vierde-generatiehulpmiddelen gerekend.
Met SQL kun je onder meer gericht selecties maken in een database.
Artikel van Infoworld: "25 fatale programmeerfouten"
Procedurele talen Programmas die geschreven worden in procedurele talen (van de derde generatie), zoals Pascal, voeren bewerkingen uit op afzonderlijke gegevens. Het komt regelmatig voor dat in programmas bepaalde handelingen op meerdere plaatsen uitgevoerd moeten worden, bijvoorbeeld het sorteren van getallen. Voor die handelingen kunnen aparte programmaatjes worden gemaakt: procedures.
Doordat in een programma naar een procedure kan worden verwezen, is het niet nodig om de afzonderlijke opdrachten telkens opnieuw uit te schrijven. Omvangrijke programmas blijven door het gebruik van procedures dus veel overzichtelijker.
OO-talen Objectoriëntatie, vaak afgekort tot OO, is een techniek die voortbouwt op de techniek van het werken met procedures. Bij OO wordt uitgegaan van de gegevens als kern. De verschillende verschijningsvormen van het gegeven worden eraan gekoppeld; deze zijn afhankelijk van het gebruik (het proces). De processen worden in gang gezet naar aanleiding van boodschappen van andere objecten. Zo ontstaat een object, waarin gegevens en bijbehorende instructies zijn samengevoegd.
Voor het gebruik van een object in een programma hoeft een programmeur niet te weten hoe het object werkt. Bij gebruik van het object hoeft hij alleen de rol te kennen die het object binnen het programma kan spelen. Binnen het programma functioneert het object als een soort black box. Veel meer dan bij de procedurele software-ontwikkeling wordt een programma dus beschouwd als samenhangende zelfstandige eenheden.
Een voorbeeld van het object leerling met een aantal methoden.
Een beschrijving van de OO-techniek wordt algauw tamelijk abstract. We zullen proberen de theorie met een voorbeeld te verduidelijken.
Voorbeeld:leerlingenadministratie Neem de leerlingenadministratie van een school eens in gedachten. Daar werkt men met zaken als vak, docent, leerling, les en toets. De administratie beschikt per leerling over een aantal gegevens:
naam adres geboortedatum rapportcijfers, enzovoort Bovendien voert de administratie regelmatig bewerkingen op de leerlinggegevens uit: de namen moeten afgedrukt worden, de adresgegevens moeten gewijzigd kunnen worden, enzovoort. Objecten bestaan uit een set gegevens (naam, adres, geboortedatum) en een serie handelingen die op de gegevens uitgevoerd kunnen worden. Dit is dus de hiervoor besproken combinatie van data en bijbehorende instructies.
In de terminologie van OO spreken we over methoden (methods) in plaats van over handelingen.
Voordelen
Als voordelen van objectoriëntatie kunnen we noemen:
snellere ontwikkelingstijd door hergebruik van programmamodules; minder fouten in programmacode; betere onderhoudbaarheid van programmas doordat duidelijker is wat elk deel van de software doet; betere uitwisselingsmogelijkheden als gevolg van vastgestelde standaards.
Problemen
Helaas verloopt de ontwikkeling van objectgeoriënteerde programmas in de praktijk niet zonder problemen. Een paar belangrijke hindernissen bij de ontwikkeling van dit soort programmas zijn:
Omzetten is moeilijk De praktische onmogelijkheid om procedurele programmas om te zetten naar OO-programmas. Dit betekent dat veel programmas opnieuw geschreven zouden moeten worden in een objectgeoriënteerde versie. Omdat er nog zeer veel programmas in omloop zijn die zijn geschreven in procedurele talen, zou het verwijderen van deze programmas een enorme kapitaalvernietiging betekenen.
Tekort aan programmeurs De geringe beschikbaarheid van programmeurs met voldoende OO-kennis.
Sun Developer Network: java.sun.com Tekort aan hulpmiddelen Het ontbreken van voldoende hulpmiddelen die programmeurs kunnen ondersteunen bij hun werk. Bovendien is er lange tijd geen geschikte systeemontwikkelingsmethodiek voorhanden geweest. Zonder deze methodiek is het heel lastig om complexe programmas te maken. Met de komst van Java zijn enkele van deze knelpunten opgelost. Sinds de introductie van Java (in 1995) heeft de ontwikkeling van objectgeoriënteerde programmas dan ook een duidelijke impuls gekregen. Bij grote softwarehuizen zien we de laatste tijd een toename in de ontwikkeling van OO-softwareprojecten voor commerciële doeleinden.
Tot op heden is de klassieke programmatuur (geschreven in COBOL, Pascal, en dergelijke) in omvang nog steeds in de meerderheid. Dit heeft mede te maken met de verrassende vitaliteit van sommige oude talen als COBOL. Van COBOL is overigens ook een OO-versie verschenen.
In het dagelijks leven komen we objecten in allerlei vormen tegen. Een huis, een stofzuiger, een school en een auto zijn voorbeelden van objecten. Ook meer abstracte zaken zoals verslagen, rekeningen, onderdelen van een gebruikersinterface (bijvoorbeeld vensters, knoppen, pictogrammen en menus bij Windows) zijn objecten. Hierbij vormen samenhangende gegevens én de opdrachten die erop uitgevoerd worden, een onlosmakelijk geheel.
Het gebruik van objecten in een programma heeft als voordeel dat het niet nodig is om te weten hoe het object technisch in elkaar zit. Het is alleen van belang om te weten hoe het object gebruikt moet worden. Objecten zijn te onderscheiden op basis van eigenschappen, bij OO noemt men die eigenschappen attributen.
Voorbeeld: auto attributen van het object Auto kunnen zijn:
het hebben van wielen bestuurbaar zijn merk type kleur bouwjaar cataloguswaarde
Klassen
Een object is altijd een vertegenwoordiger van een klasse; klassen zijn rechtstreeks verbonden aan objecten. Men zegt wel dat een object een instantie van een klasse is. In de klasse wordt een lijst beschreven van alle attributen en methoden van het object.
Voorbeeld: auto We hebben daarnet een auto een object genoemd. Er zijn diverse typen autos:
stationwagens cabrios SUVs bestelwagens, enzovoort Alle bestelwagens behoren tot de klasse van autos. Een klasse bestaat dus uit objecten met een aantal gemeenschappelijke attributen. Elke individuele bestelwagen die uit de fabriek komt, is een object van de klasse Auto.
Het is niet altijd gemakkelijk om onderscheid aan te brengen tussen een klasse en een object. Men gebruikt deze begrippen soms door elkaar.
Methoden
Methoden worden gebruikt om te communiceren met andere objecten en met de buitenwereld. De methoden verzorgen het gedrag van het object. Elke methode heeft een unieke naam waarmee deze aangeroepen wordt.
Voorbeeld: auto Methoden bij het object auto kunnen zijn:
verkopen repareren overspuiten
Inkapseling
Onder inkapseling wordt verstaan: het in een object insluiten van alle zaken die het object nodig heeft om te functioneren, in het bijzonder de methoden en de data. Door inkapseling zijn de methoden en de data voor de gebruiker onzichtbaar.
Overerving
Objecten kunnen attributen en/of methoden van andere, vergelijkbare, objecten overnemen; we spreken dan van overerving. Dankzij deze mogelijkheid hoeven niet van alle objecten alle eigenschappen steeds opnieuw beschreven te worden. We zeggen dan wel dat de klasse de attributen van de erboven gelegen klasse erft. Ook methoden kunnen geërfd worden.
Voorbeeld: auto Een klasse Bestelwagen kent grotendeels dezelfde attributen als de klasse Auto. Immers, ook bij elke bestelwagen is er sprake van Merk, Type, Kleur, Bouwjaar, Cataloguswaarde.
C C is zoals gezegd een derde-generatietaal, een gestructureerde procedurele taal die veel wordt toegepast voor het ontwikkelen van besturingssystemen en applicatiesoftware. C wordt beschouwd als een erg compacte en efficiënte taal die dicht bij machinecode staat. Dit maakt dat C snel is, maar het is ook foutgevoelig en niet echt gebruikersvriendelijk.
C++ De objectgeoriënteerde opvolger van C is C++. Het draait in C++ om het OO-begrip klasse en om data-hiding. Dit laatste wil zeggen dat een object niets weet van afzonderlijke gegevens, maar uitsluitend uitgaat van klassen. Als deze techniek goed toegepast wordt, levert dit kortere programmas op, die eenvoudiger te doorgronden en te onderhouden zijn.
C++ is in 1980 ontworpen door Bjarne Stroustrup, een medewerker van AT&T. De naam C++ is als een woordspeling bedoeld. In C betekent C++ namelijk dat C vervangen wordt door zijn opvolger, dus C++ wil zeggen dat het om een volgende versie van C gaat.
Artikel van Computerworld: "Java, een blik in de toekomst"
Java is een objectgeoriënteerde programmeertaal, die wel wat overeenkomsten heeft met C++. Het bijzondere van Java is dat het platformonafhankelijk is.
Java is ontwikkeld door de firma Sun en bestaat uit drie onderdelen:
De programmeertaal Java Deze wordt beschouwd als een veelzijdige, overzichtelijke, betrouwbare en zuiver objectgeoriënteerde taal. De taal is gemaakt om op kleine computers te kunnen draaien en wordt dan ook gebruikt in bijvoorbeeld PDAs en mobiele telefoons.
De JDK DeJDK is een uitgebreide bibliotheek van programmacomponenten. Deze maakt Java tot een soort kist vol handige onderdelen waarmee het leuk programmas bouwen is.
De Java Virtual Machine (JVM) Dit is een vertaler die zogeheten bytecode omzet naar een machinetaal die geschikt is voor het platform waarop het Java-programma wordt uitgevoerd. De bytecode draait op alle platforms waarvoor een JVM bestaat. Het laatstgenoemde punt maakt Java wezenlijk anders dan zijn voorgangers. Bij de programmeertalen die voor de komst van Java gebruikt werden, wordt het geschreven programma vertaald naar de machinecode die de computer begrijpt. Daarvoor wordt een vertaalprogramma gebruikt, de al eerder genoemde compiler. Om het programma voor een ander besturingssysteem (een ander platform) geschikt te maken moet het aangepast worden, waarna het opnieuw gecompileerd moet worden.
Sun Developer Network: java.sun.com Bytecode Bij Java vertaalt de compiler naar een vorm die geen machinecode is van een bestaand besturingssysteem, maar naar een tussenliggende vorm, de zogenoemde bytecode. Voor de uitvoering van die bytecode is het vervolgens noodzakelijk die bytecode om te zetten naar de machinetaal van die machine. Dit gebeurt door de Java Virtual Machine (JVM). Deze virtuele machine moet wel speciaal geschreven zijn voor het betreffende besturingssysteem. Dus is er voor elk besturingssysteem een eigen JVM nodig.
Overigens draait Java onder alle populaire 32-bits besturingssystemen en een aantal 64-bits systemen.
De compiler zet een Java-programma om in platformonafhankelijke bytecode.
Hoewel wij de naam Java vooral associëren met een Indonesisch eiland, is de taal genoemd naar de koffie die de ontwikkelaars dronken (en die hen wakker moest houden). Vandaar dat in het logo van Java ook een kopje koffie te zien is
De Delphi-pagina van Codegear (voorheen Borland): www.codegear.com
Delphi is een visuele, objectgeoriënteerde programmeeromgeving van Borland, die gebaseerd is op de taal Pascal. In Delphi vind je alle bijzonderheden van OO programmeren terug.
Je werkt in Delphi in deIDE. De IDE biedt de mogelijkheid om
tekst op te maken; een programma te compileren (omzetten naar machinetaal); een programma te laten uitvoeren; de fouten uit een programma te halen (te debuggen).
Als een programma een fout bevat, spreken we van een bug. Het zoeken naar fouten wordtdebuggen genoemd. Volgens de overlevering werd een van de eerste gemelde fouten in een computerprogramma ook daadwerkelijk veroorzaakt door een insect: tussen de mechanische onderdelen van de computer was een mot terechtgekomen. Daardoor werkte het apparaat niet naar behoren.
Een van de sterke punten van Delphi is deVCL, een bibliotheek met objecten die klaar zijn voor gebruik.
Delphi leent zich goed voor programmeren voor de Windows-omgeving.
Een programmeertaal van Microsoft isVisual Basic.NET. Voorheen heette deze taal Visual Basic, maar vanaf versie 7 van Visual Basic heeft Microsoft gekozen voor een nieuwe naam (2002). VB.NET maakt deel uit van een groter geheel, dat Microsoft het .NET-platform heeft genoemd.
Met VB.NET kun je onder meer applicaties voor de Windows-omgeving schrijven. De gebruikersinterface staat daarbij centraal. Deze wordt ontworpen met alle voorzieningen die kenmerkend zijn voor Windows-applicaties, zoals:
knoppen dialoogvensters keuzemenus selectievakjes Daarna wordt de bijbehorende programmacode eraan verbonden. Ook het schrijven van webapplicaties behoort tot de mogelijkheden.
Platformonafhankelijk VB.NET heeft meer kenmerken van objectoriëntatie dan zijn voorganger: in Visual Basic was bijvoorbeeld de mogelijkheid van overerving nog niet ingebouwd, in VB.NET wel. Het maakt bij het compileren van de programmacode gebruik van een tussentaal, vergelijkbaar met de bytecode van Java. Dit maakt dat .NET evenals Java platformonafhankelijk is.
VBA De populaire Office-pakketten bevatten een vereenvoudigde versie van VB.NET, dieVBA wordt genoemd. Hiermee kun je niet alleen macros voor de betreffende programmas ontwikkelen, maar ook volwaardige programmas.
Een macro is een programmaatje waarmee bepaalde handelingen in een toepassingspakket geautomatiseerd kunnen worden. Een macro bestaat net als elk programma uit een reeks instructies.
De klassieke programmeertalen schieten over het algemeen tekort op het gebied van webapplicaties. De opkomst van het web heeft dan ook een aantal nieuwe en vernieuwde talen opgeleverd, die in deze paragraaf ter sprake komen. Bij de indeling van deze talen speelt het client/server-model een rol.
Toegepast op het internet bestaat het client/server-model uit verschillende componenten:
De client is de computer van de surfer, waarop een browser draait. Via dit programma bezoekt de surfer websites, bijvoorbeeld door de URL in de adresbalk te typen of op hyperlinks te klikken. De aanvraag voor een webpagina wordt verzonden naar een server waarop de website opgeslagen is. De server stuurt de gevraagde pagina naar de client. Populaire sites zoals Google en MSN kunnen duizenden clients per seconde bedienen. Een schematisch voorstel van het client/server-model: de clients doen een aanvraag voor een webpagina bij een server; de server verzendt de gevraagde pagina via internet.
Zowel voor de server als voor de client zijn programmeertalen ontwikkeld.
De client-sided programmeertalen worden uitgevoerd op de computer van de gebruiker. De server-sided talen worden uitgevoerd op de server die de websites bevat.
HTML dient voor het beschrijven van de structuur van webpaginas. Als je HTML gebruikt, plaats je besturingscodes in teksten en daarmee geef je aan hoe die tekst door een browser afgebeeld moet worden op het beeldscherm. Deze codes zelf, tags genaamd, beeldt de browser natuurlijk niet af.
Er zijn talloze verschillende codes, bijvoorbeeld voor het vet, cursief en onderstreept maken van tekst, voor het maken van grote en minder grote koppen, voor het opnemen van afbeeldingen, voor het kiezen van kleuren, noem maar op. De codes staan tussen punthaken: < en >. Over het algemeen bestaan ze uit een begin- en een eindcode, bijvoorbeeld:
<h1> om een hoofdkop aan te geven </h1> om het einde van deze kop aan te geven De browser geeft koppen van niveau 1 in grote en vette letters weer.
De opmaak van de webpagina wordt verzorgd door zogeheten stylesheets; HTML brengt structuur aan in het document.
Een van de belangrijkste kenmerken van HTML is de mogelijkheid om documenten aan elkaar te koppelen via hyperlinks. Met behulp van HTML geef je hyperlinks de juiste code, zodat ze ook daadwerkelijk fungeren zoals ze bedoeld zijn.
Het is niet zo heel moeilijk om HTML te leren (zeker niet als je het vergelijkt met het leren van een echte programmeertaal), maar het wordt steeds minder noodzakelijk om deze taal te beheersen. Er verschijnen namelijk steeds meer programmas waarmee je op een eenvoudige wijze webpaginas ontwerpt.
HTML-code:
Webpagina:
Voorbeeld van een stukje HTML-code met de resulterende webpagina.
In HTML kun je kleine Java-programmas opnemen, die applets worden genoemd. Applets draaien op de client.
XHTML XHTML is een nieuwere variant van HTML, die striktere eisen aan de codering stelt dan HTML. Zo is het bij voorbeeld verplicht dat alle tags worden afgesloten. Hierdoor kan er bij het afbeelden van webpaginas minder fout gaan.
(X)HTML werkt samen met een techniek dieCSS wordt genoemd. Via CSS is de opmaak van webpaginas zeer nauwkeurig in te stellen.
JavaScript is ontwikkeld door onder meer Netscape Communications Corporation. Het is een opdrachttaal die fungeert als uitbreiding op HTML: er kunnen opdrachtregels aan een webpagina mee worden toegevoegd. De browser interpreteert de JavaScript-opdrachten als de pagina op het scherm geplaatst wordt.
Java en JavaScript worden nogal eens door elkaar gehaald. Het grootste verschil tussen beide talen is dat Java een volwaardige programmeertaal is, terwijl JavaScript is bedoeld als uitbreiding op HTML. JavaScript is eenvoudiger, maar daardoor ook beperkter: het wordt uitsluitend toegepast voor webapplicaties. De toepassingsmogelijkheden van Java zijn veel breder. Je kunt er bijvoorbeeld complete tekstverwerkers in programmeren.
In tegenstelling tot Java is JavaScript geen volledige programmeertaal. De opdrachten zijn beperkt tot de objecten van de webbrowser. Met JavaScript kan een ontwerper webpaginas meer interactiviteit geven. Via het script kan hij reageren op eigenschappen van de browser en de computeromgeving.
Event De gebruiker voert een bepaalde handeling uit: hij tikt gegevens in, kiest een mogelijkheid uit een menu, klikt op een knop of vult een veld in, waarna JavaScript-opdrachten voor een passende reactie zorgen. We zeggen dan dat JavaScript reageert op een event; de handeling van de gebruiker heet in programmeertaaljargon een event of gebeurtenis. Een reactie zou kunnen zijn dat er een aangepaste tekst wordt getoond, die betrekking heeft op de gemaakte keuze.
mouseOver en mouseOut Een voorbeeld van een toepassing is het laten oplichten van een plaatje of tekst als de gebruiker er met de muisaanwijzer overheen gaat. Dat is een visueel signaal dat er op die plaats geklikt kan worden. Er worden in dat geval twee plaatjes gemaakt, een donkere en een lichte versie. De pagina bevat JavaScript-opdrachten die reageren op de event mouseOver en ervoor zorgen dat de lichte versie van het plaatje verschijnt. Bij de event mouseOut (de muisaanwijzer verlaat het gebied) wordt de donkere versie weer teruggezet.
Niet alle browsers begrijpen JavaScript. Ontwikkelaars van een website moeten rekening houden met zulke browsers. Gelukkig komt er geen foutmelding of iets dergelijks. Een browser die geen JavaScript kent, slaat de opdrachten over.
Andere scriptingtalen zijn VBScript en Flash ActionScript.
Moderne websites zijn vaak dynamisch. Ze bevatten allerlei functies die met HTML niet aangebracht kunnen worden. Denk aan een gastenboek, een mogelijkheid om elektronisch te betalen, een discussieforum, een fotoalbum of een gepersonaliseerde website. Om deze functies mogelijk te maken zijn er aanvullingen op HTML ontwikkeld, waarvan PHP de bekendste is.
Andere technieken zijn:
ASP JSP Coldfusion
De syntaxis van PHP vertoont overeenkomsten met die van C, Java en Perl. De betekenis van de afkorting PHP heeft in de loop der tijd een verandering ondergaan. In eerste instantie betekende het Personal Home Page Tools, maar tegenwoordig wordt meestal de aanduiding PHP: HyperText Preprocessor gebruikt. PHP-documenten hebben meestal de extensie .php.
Een preprocessor voert eerst een bewerking uit op een webpagina voordat hij naar de browser wordt gestuurd.
HTML-bestand Overigens merkt de bezoeker van een website niet of er naast HTML ook PHP in de website is verwerkt. Het resultaat dat naar de browser op de client wordt gestuurd, is namelijk een HTML-bestand. Vaak zijn de gegevens afkomstig uit een database. PHP is goed in staat gegevens uit een database te halen en deze op te nemen tussen de HTML-code die naar de client wordt gestuurd. Dit is ook het dynamische aspect van PHP: afhankelijk van wat de internetgebruiker wil, worden verschillende gegevens uit de database geselecteerd.
Zoekmachine Denk bijvoorbeeld aan het gebruik van een zoekmachine: zonder PHP zou dit niet mogelijk zijn. Op basis van de ingevoerde zoekterm wordt het overzicht van websites samengesteld, afkomstig uit een immense database.
Omdat PHP een aanvulling op HTML is, is kennis van HTML voor de PHP-programmeur een vereiste.
PHP is ontwikkeld als open source product. Dit betekent dat de broncode vrij is verspreid en aangepast mag worden (net als bijvoorbeeld Linux).
Hieronder staat een voorbeeld van PHP-code, waarbij duidelijk te zien is dat er tussen de HTML-code een PHP-blok is opgenomen. De resulterende webpagina is in de figuur eronder zichtbaar.
Het resultaat van het PHP-blok is de datum van vandaag.