Programma's die je om een boodschap kunt sturen

Object-georiënteerde software maakt het mogelijk computerprogramma's in modules te bouwen. Veranderen of uitbreiden gaat snel en gemakkelijk

Het aanpassen of herschrijven van bestaande software is een tijdrovend karwei. Even een paar instructies wijzigen gaat niet: dat komt doordat vrijwel elk onderdeel van het programma betrokken is bij de bewerking van de gegevens. Men kan aan een tekenprogramma dat alleen rechthoeken tekent een paar extra instructies geven zodat het ook driehoeken kan maken, maar dan zullen de instructies voor het afdrukken (printen) óók moeten worden aangepast. Misschien herkent het printercommando wel helemaal geen driehoeken. "Als je pech hebt, kan zo'n printercommando kan wel op twintig verschillende plaatsen in de codering van het programma voorkomen,' zegt Fred Bushoff van het Utrechtse automatiseringsbedrijf Volmac. "Ik heb het vaak genoeg meegemaakt. Je denkt: och, dat verander ik wel even, en ondertussen schop je het hele programma in de war.'

Het aanpassen van software begint de laatste jaren aardig in de kosten te lopen. Vijftig tot zeventig procent van de automatiseringskosten heeft betrekking op "onderhoud'. De klassieke methoden om software te ontwikkelen lijken niet langer toereikend. Automatiseringsbedrijven als Volmac en BSO gaan er dan ook in toenemende mate toe over om programma's te ontwikkelen met behulp van object georiënteerde software. Meer in het algemeen spreekt men van Object Oriented Technology (OOT). Programmeurs schrijven niet langer codes, maar maken gebruik van "objecten', autonome programma-onderdelen die met elkaar kunnen communiceren en elkaar specifieke opdrachten kunnen geven. In een object georiënteerd loonadministratieprogramma bijvoorbeeld controleert het object "Betaaldag' bij het object "Rooster werknemers' of er nog werknemers met pensioen zijn gegaan voordat het instructies geeft aan het object "Uitbetalen'.

Een object kan op het scherm elke gedaante aannemen, maar belangrijker is zijn interne organisatie. Elk object bestaat naast gegevens (variabelen) uit functies (methoden) waarmee de variabelen worden gemanipuleerd. In feite is het object een soort "zwarte doos'. Anders dan bij conventionele software hebben externe programma's of in dit geval objecten geen toegang tot de variabelen; alleen de bewerkingsfuncties kunnen worden aangesproken. In het object "Persoon' zouden de variabelen naam, de geboortedatum en het adres van de persoon kunnen zijn. Daaromheen zit een schil van functies: Geef leeftijd, geef geboortedatum.

Kop koffie

Een object wordt geactiveerd door het een boodschap te sturen. Bushoff, manager van het nieuwe expertisecentrum Object-Oriented Technology van Volmac: "Dat gaat echt op het niveau van: breng me een kop koffie. Het ene object hoeft niet te weten hoe het andere object dat doet. Het wil maar één ding en dat is koffie.'

Objecten communiceren op basis van eigenschappen die zij met elkaar gemeen hebben. Dergelijke eigenschappen worden ook wel classes (klassen of typen) genoemd. Een klasse bestaat uit de definitie van de interne variabelen en van de methoden die worden gebruikt om de variabelen te manipuleren. Men onderscheidt hoofd- en subclasses: "Geef leeftijd' zou bijvoorbeeld een subklasse van de hoofdklasse "Persoon' kunnen zijn. Boodschapper en ontvanger wisselen alleen gegevens uit wanneer dat nodig is (zie kader).

Polymorfisme

Een belangrijke eigenschap van OOT is polymorfisme: dit houdt in dat objecten die tot verschillende klassen behoren verschillend reageren op dezelfde boodschap. Bushoff (Volmac): "Stel je voor: een orkest met strijkers en blazers. Tussen dirigent en het orkest worden afspraken gemaakt: bijvoorbeeld als de dirigent zijn linkerhand omhoog steekt, gaat men harder spelen. De muzikanten weten precies wat ze moeten doen: de violist zal de strijkstok sneller bewegen en een trompetspeler zal krachtiger blazen. Ze doen precies hetzelfde, maar op hun eigen manier.' Wanneer het orkest nu wordt uitgebreid met slagwerkers, hoeft alleen nog maar afgesproken te worden wat "linkerhand omhoog' voor de slagwerker betekent. Voor de dirigent, de strijker en de blazers verandert er echter niets. Bushoff: "Bij uitbreidingen van de software hoeven bestaande objecten niet aangepast te worden.'

En wat gebeurt er als men een van de violisten iets nieuws wil leren, bijvoorbeeld opstaan na applaus? Bushoff: "De oude manier zou zijn om de violist helemaal opnieuw te instrueren. Dat doen we met OOT juist niet. We creëren een tweede violist, eigenlijk een soort zombie, die alleen maar opstaat na applaus. De oorspronkelijke strijker en zijn kopie werken echter nauw samen. In OOT-termen hebben we nu een strijker gecreëerd die viool kan spelen én kan opstaan.'

Men noemt deze eigenschap ook wel inheritance of overerving. Hieronder wordt verstaan de mogelijkheid om een nieuwe klasse te definiëren als een uitbreiding van een bestaande klasse, zodat deze niet n=g eens gedefinieerd hoeft te worden. Bushoff: "Je hoeft de software niet te herschrijven, je voegt gewoon iets toe.' De voordelen van deze methode zijn evident: bij het schrijven van een nieuw programma kan men van reeds bestaande objecten gebruik maken. Zo kan hergebruik van software worden gestimuleerd. Een nadeel van OOT is dat de programma's trager worden naarmate er meer objecten gebruikt worden.

Bergen

De oorsprong van object georiënteerde software ligt in Bergen, Noorwegen, waar het programmapakket Simula-67 werd ontwikkeld, voor simulatie-toepassingen. Het was het eerste programma dat begrippen als "object', "klasse' en "overerving' introduceerde. Ook PARC Xerox, het onderzoekslaboratorium van het fotokopieerbedrijf Rank Xerox, verrichtte pionierswerk.

Inmiddels zijn er al meer dan zeventig object georiënteerde programmeertalen, waarvan Objective C van Brad Cox, Smalltalk V, CLOS (Common Lisp Object System) en de grote favoriet C++ het meest gebruikt worden. Naast programmeertalen zijn er in de loop der jaren ook erg veel object georiënteerde databases en spreadsheets ontwikkeld. Al deze programma's draaien nu nog op een conventioneel besturingssysteem (programma dat de interne werking van de computer en de randapparaten regelt) in een niet object georiënteerde omgeving. Dergelijke programma's kunnen geen gegevens uitwisselen met de systeemsoftware, waardoor het aantal mogelijkheden wordt beperkt.

Iemand die dat al heel vroeg in de gaten had, was Steve Jobs, ooit de drijvende kracht de Macintosh-computer van Apple. Na zijn gedwongen ontslag bij het concern ontwikkelde Jobs in 1988 een "vierdegolfcomputer' voor de wetenschappelijke wereld. Het meest bijzondere aan deze machine is het object georiënteerde besturingssysteem NeXTStep, waarmee men het gebruikersinterface (het geheel aan bedieningspanelen) zelf kan inrichten.

Hoewel er aanvankelijk niets dan lof was voor de machine, valt de belangstelling tot nu toe fors tegen. In januari maakte NeXT dan ook bekend dat het zijn systeemsoftware heeft aangepast aan de microprocessoren van Intel, zodat de programma's ook kunnen draaien op IBM-computers en IBM-compatibles. Met behulp van dit "Trojaanse Paard' hoopt Jobs zijn omzet te verhogen, anders draait de voorgenomen beursintroduktie van zijn bedrijf in 1993 op een grote mislukking uit. Maar is er nóg een reden waarom Jobs haast heeft. NeXT dreigt het monopolie op object georiënteerde besturingssoftware te verliezen.

IBM en Apple

In oktober 1991 kwamen IBM en Apple overeen dat zij gezamenlijk een object georiënteerd besturingssysteem voor de toekomstige generatie PC's zouden ontwikkelen. Het project heeft voorlopig als code-naam Pink gekregen, maar omdat de nieuwe software op zijn vroegst over drie jaar gereed zal zijn, wil men er nog niets over kwijt. Niet zo verwonderlijk, want IBM/Apple worden op hun beurt weer bedreigd door Microsoft van miljardair Bill Gates, die ook al naar dit soort software lonkt.

Het besturingssysteem van IBM/Apple belooft het eerste echte object georiënteerde besturingsprogramma te worden. NextStep is net als Microsofts Windows meer een "schilprogramma', dat bovenop een ander besturingssysteem is geplaatst.

In het hoofdkwartier van NeXT in het Californische Redwood City maakt men zich vooralsnog weinig zorgen over de concurrentie. "Wij hebben een voorsprong van drie jaar op Apple en IBM,' lacht Paul Hegarty, directeur van NeXTStep Software. Het zijn met name financiële instellingen als First National Bank of Chicago, Shearson Lehman Brothers Inc. en de Union Bank of Switzerland die volgens hem dankbaar gebruik maken van NeXT. Het schrijven en herschrijven van bestaande software gaat met NeXTStep vijf maal sneller dan met conventionele programma's.

Bij wijze van demonstratie sleutelt Hegarty in nauwelijks vijf minuten een programma in elkaar dat de waarden van Fahrenheit in Celsius omzet. Zoiets lukt ook wel zonder OOT, maar het verschil is dat Hegarty het programma heeft uitgebreid met vensters, titelbalken, knoppen en andere bedieningsfuncties. "Een Macintosh-programmeur zou hier al gauw een dag zoet mee zijn geweest, omdat hij eerst allerlei codes voor vensters en balken moet schrijven,' zegt Hegarty.

Hij verwacht dat door de gebruikersvriendelijkheid van OOTmeer mensen toepassingen zullen gaan ontwikkelen. "Het programmeren zal niet langer alleen maar zijn voorbehouden aan wat Steve Jobs "propellorhoofden' noemt', zegt Hegarty. "Code-idioten die de hele dag achter hun computerscherm hangen. Bij de computerzaak koop je straks geen programma's meer, maar losse objecten of nieuwe versies daarvan. Ik verwacht dat er een grote ruilhandel zal ontstaan.'

Fred Bushoff van Volmac tempert het enthousiasme van zijn Amerikaanse collega: "OOT is meer dan een nieuwe manier van programmeren, het is een manier van denken. Het lijkt allemaal heel erg eenvoudig, totdat je er mee aan het werk moet. Ervaren programmeurs zullen helemaal moeten omschakelen en dat valt soms erg tegen. Je zult je rugzak met parate kennis eerst helemaal moeten leegmaken.'

Object A behoort tot een klasse die opdrachten voor een gebruiker uitvoert. X en Y zijn objecten van de klasse "getal' met als vaste waarden 3 en 4. De gebruiker wil de waarde van Y bij de waarde van X optellen en vervolgens de nieuwe waarde van X laten afdrukken (in conventionele computerterminologie: X = X + Y. Print X). A stuurt de boodschap: "OPTELLEN: Y' naar X (tel de waarde van Y bij jezelf op). Maar omdat X de waarde van Y niet kent, stuurt hij eerst de boodschap "OPVRAGEN' naar Y. Y antwoordt met de gevraagde waarde "4'. X telt dit getal bij zijn eigen waarde 3 op. Wordt 7. Zodra de boodschap "OPTELLEN: Y' is afgehandeld, stuurt A de boodschap "PRINT' naar X. X heeft voor deze boodschap een methode "afdrukken'.

Foto: Het scherm van de NeXT computer. Deze computer heeft als eerste een object-georiënteerd besturingssysteem, NeXT-Step geheten