een objectgeoriënteerde taal is een programmeertaal die draait om het concept van een object. Objectgeoriënteerde talen werden ontwikkeld om het gemakkelijker te maken om software te ontwikkelen, te debuggen, te hergebruiken en te onderhouden dan mogelijk is met eerdere talen. Het begrijpen van objecten en objectgeoriënteerde talen vereist kennis van de evolutie van computerprogrammeertalen en datastructuren.
- evolutie van Computerprogrammeertalen
- Assembly Language.
- talen met Hoge Orde.
- gestructureerde talen.
- objectgeoriënteerde talen.
- Kenmerken van objectgeoriënteerd programmeren
- inkapseling en gegevens verbergen.
- overerving.
- polymorfisme.
- gemeenschappelijke objectgeoriënteerde talen
- Smalltalk.
- C+ +.
- Java.
- andere talen.
- Bibliography
evolutie van Computerprogrammeertalen
Computerprogrammeertalen zijn in de loop der jaren voortdurend geëvolueerd. Deze evolutie wordt in de volgende voorbeelden beschreven.
Assembly Language.
de eerste computerprogramma ‘ s werden geschreven in assembler. Dit is een primitief type taal waarin elk statement overeenkomt met een enkele machine instructie; het is de meest elementaire computerbediening mogelijk. Het bereiken van iets nuttigs vergt veel machine-instructies. Assembler taal is specifiek voor een bepaald type computer; het verplaatsen van het programma naar een ander type computer vereist het schrijven van een geheel nieuw programma. Assembly taal programma ‘ s zijn moeilijk te schrijven, debuggen, en onderhouden. Hoewel andere talen nu worden gebruikt voor de meeste computertoepassingen, wordt assembler nog steeds gebruikt als de eerste taal wanneer een nieuwe chip wordt ontwikkeld.
talen met Hoge Orde.
na assembleertaal werden hogere ordetalen ontwikkeld; onder de eerste waren FORTRAN en BASIC. Een uitspraak in een hogere orde taal komt overeen met een zin in het Engels. Een programma genaamd een compiler leest de verklaringen van een bronbestand en genereert een bestand met machine-instructies, die een objectbestand wordt genoemd. Het objectbestand kan dan worden geladen en uitgevoerd door de computer. Een hoge orde taal is draagbaarder dan een assembly taal programma; hetzelfde bronbestand kan worden gecompileerd voor elke computer, zolang een geschikte compiler bestaat.
vroege hoge-orde talen zijn alleen toegestaan voor eenvoudige gegevenstypen zoals integer, floating point number of string (een reeks letters). De enige beschikbare datastructuur was de array. Een array is een lijst van elementen die allemaal hetzelfde gegevenstype zijn; bijvoorbeeld een lijst met getallen of een lijst met tekenreeksen. Een database werd gemaakt met behulp van een groep van arrays. Een productdatabase kan bijvoorbeeld drie arrays bevatten, genaamd productnummer, productbeschrijving en productprijs. Het was aan de programmeur om de arrays uitgelijnd te houden, bijvoorbeeld om ervoor te zorgen dat het derde element van elke array overeenkwam met hetzelfde product.
gestructureerde talen.
de volgende stap in de evolutie van computerprogrammeertalen was de ontwikkeling van gestructureerde talen, zoals C en PASCAL, en de invoering van datastructuren. Een datastructuur is een verzameling van eenvoudigere datatypes in een enkel record. Een productdatabase kan bijvoorbeeld worden geconstrueerd als een reeks productrecords, waarbij elk record productnummer, productbeschrijving en Productprijsvelden bevat. Nu kan één record alle benodigde informatie over een enkel item bevatten. Structuren werden ook meer gedefinieerd in het procedurele deel van de taal. Een functie of procedure is een klein deel van een groter programma dat zou kunnen worden geschreven om een aantal fundamentele werking op een gegevensstructuur, zoals een record te bieden.
objectgeoriënteerde talen.
de volgende stap in de evolutie van computerprogrammeertalen, objectoriëntatie, werd geïntroduceerd in de Smalltalk taal. Objectoriëntatie brengt de concepten van gestructureerd programmeren een stap verder. Nu, in plaats van datastructuren en afzonderlijke programmastructuren, worden zowel gegevens als programma-elementen gecombineerd in één structuur die een object wordt genoemd. De objectgegevens-elementen worden attributen genoemd, terwijl de objectprogramma-elementen methoden worden genoemd. Gezamenlijk worden attributen en methoden de leden van het object genoemd. Meestal zijn de methoden van een object de enige programma ‘ s die kunnen werken op de attributen van het object.
met objectoriëntatie kwam er een fundamentele verandering in de manier waarop programma ‘ s worden bekeken. De eerdere opvatting was dat gegevens op een of andere manier moeten worden gemanipuleerd om een eindresultaat te bereiken, en een programma werd gezien als een sequentieel middel om de manipulaties uit te voeren. Vanuit een objectoriëntatieperspectief wordt een programma gezien als een groep objecten die reageren op berichten van de gebruiker, andere programma ‘ s of andere objecten. Deze visie leidde tot het idee van event-driven programming; d.w.z. wanneer event A gebeurt, voert dit object actie B uit. een bericht wordt naar een object verzonden door een van zijn methoden aan te roepen.
Kenmerken van objectgeoriënteerd programmeren
De belangrijkste kenmerken van objectgeoriënteerd programmeren zijn inkapseling en het verbergen van gegevens, overerving en polymorfisme.
inkapseling en gegevens verbergen.
het centrale idee in object-oriented programming (OOP) is dat de object attributen en de methoden die werken op de attributen aan elkaar zijn gebonden of ingekapseld in het object. De methoden van het object bieden de enige interfaces tussen het object en andere delen van het programma. Dit is anders dan eerdere talen, waar elk deel van een programma op elk stuk gegevens op elk moment kan werken. Hoewel dit beperkend lijkt, resulteren de beperkingen in een meer modulair programma dat gemakkelijker te ontwikkelen is en minder waarschijnlijk fouten bevat. Het betekent ook dat het gemakkelijker is om een object naar een andere omgeving te verplaatsen en het nog steeds correct te laten functioneren.
een software-object lijkt enigszins op een fysiek object. Een motor kan bijvoorbeeld worden gebruikt om een auto aan te drijven. Het heeft interne componenten, die overeenkomen met attributen, maar men hoeft zich geen zorgen te maken over wat ze zijn of hoe ze werken. De motor moet een interface hebben met het gaspedaal, het brandstofsysteem, de transmissie, de inlaat-en de uitlaatspruitstukken, die allemaal overeenkomen met de methoden. Het is ondenkbaar dat brandstof in de motor zou komen op een andere manier dan door middel van het brandstofsysteem. Zolang de juiste interfaces worden onderhouden, zal de motor werken. Zo is het met objecten. De object attributen zijn van buitenaf verborgen. Het object interageert met zijn omgeving door middel van zijn methoden.
overerving.
een ander belangrijk concept voor objectgeoriënteerd programmeren is overerving. Een objectklasse wordt gedefinieerd in een hiërarchie, en erft het gedrag van zijn voorouders (die objecten erboven in de hiërarchie). Een tekenprogramma kan bijvoorbeeld drie objectklassen bevatten: Vorm, Rechthoek en cirkel. Ze kunnen zo worden gedefinieerd dat rechthoek en cirkel beide afstammelingen van vorm zijn.
vorm bevat attributen die gemeenschappelijk zijn voor elke vorm, zoals de locatie van de vorm op een tekenoppervlak. Shape biedt ook methoden voor het manipuleren van die attributen. Een verplaatsingsmethode zou bijvoorbeeld de locatie van de vorm veranderen. Daarnaast zou het een definitie bieden voor methoden waarop alle vormen moeten kunnen reageren, bijvoorbeeld een tekenmethode om de vorm op een tekenoppervlak weer te geven. De draw methode in dit geval wordt gezegd dat abstract; het doet niets anders dan het creëren van een vereiste dat afstammende klassen moeten implementeren.
omdat rechthoek een afstammeling is van vorm, erft het attributen (locatie) en methoden (verplaatsen) van vorm. Het biedt de extra attributen die het nodig heeft (breedte en hoogte) en nieuwe methoden die deze attributen manipuleren (setWidth, setHeight). Rechthoek moet ook een tekenmethode bieden die een rechthoek op het tekenoppervlak schildert, omdat elke afstammeling van vorm een tekenmethode moet toepassen. Ook Circle biedt een nieuw attribuut (radius), methoden voor het manipuleren ervan (setRadius), en een eigen draw-methode.
met dit soort opstelling zou het drawing manager programma een lijst van vormen op het tekenoppervlak hebben. Om een object te verplaatsen, zou het de verplaatsingsmethode van het object noemen. Om een object te tekenen, roept de manager de tekenmethode van het object aan. De manager Weet noch geeft om hoe het object beweegt of zichzelf tekent, zolang de klus geklaard wordt. Het kan zelfs niet eens weten wat voor vorm een bepaald object echt is. Het kan een rechthoek, een cirkel, of een ander object afstammend van vorm. Het hoeft alleen maar te weten dat het afstamt van vorm, zodat het elke boodschap kan sturen die een vorm kan ontvangen.
de mogelijkheid van overerving van een objectgeoriënteerde taal voegde een geheel nieuwe dimensie toe aan programmeren. Het leren van een oudere Hoge Orde taal was vooral betrokken bij het leren van de taalsyntaxis (hoe de taalstatements worden geconstrueerd), wat niet zo moeilijk is. In een objectgeoriënteerde taal is het leren van de syntaxis nog steeds noodzakelijk, maar vertrouwd raken met de standaard klassenhiërarchieën-die duizenden klassen kunnen omvatten, elke klasse met zijn eigen methoden—is een veel grotere taak. Het is echter de moeite waard omdat een object de attributen en het gedrag van zijn ouder erft. Een programmeur kan onnodig werk vermijden door een bestaand object te vinden dat al het meeste doet wat nodig is. Dan kan nieuwe mogelijkheid stapsgewijs worden toegevoegd. Het resultaat is lagere kosten, hogere kwaliteit software.
Dit kenmerk leidde ook tot het opnemen van automatische documentatiefuncties in verschillende objectgeoriënteerde talen. In eerdere talen werd de documentatie—als ze al was gegenereerd—afzonderlijk gedaan, bijna als een bijzaak. Nu documentatie informatie kan worden opgenomen in de object broncode en gebruikt om een Hypertext Markup Language (HTML) document automatisch te genereren, compleet met hyperlinks omhoog en omlaag de klasse hiërarchieën, die kunnen worden bekeken met een Internet browser. Dit maakt het veel gemakkelijker om nauwkeurige, up-to-date documentatie te onderhouden.
polymorfisme.
het volgende belangrijke kenmerk van objectgeoriënteerde taal is polymorfisme, wat betekent dat een afstammend object niet precies zoals zijn voorouder op een bericht hoeft te reageren. Een nieuw object kan de methoden van zijn ouder overschrijven, waardoor het nieuwe object anders reageert op een bericht. Bijvoorbeeld, een gemeenschappelijke klasse in een window systeem is een Component, die een zichtbaar object vertegenwoordigt. Een Component is een voorouderklasse voor elk zichtbaar object op het scherm: pictogrammen, knoppen, menu ‘ s, schuifbalken, selectievakjes, keuzerondjes, zelfs vensters. Al deze afstammende klassen overschrijven een aantal van Component ‘ s methoden om gedrag te veranderen. Bijvoorbeeld, een icoon object moet zichzelf weer te geven als een kleine afbeelding. Pictogram overschrijft tekenmethode Component om de afbeelding te tonen.
gemeenschappelijke objectgeoriënteerde talen
gemeenschappelijke objectgeoriënteerde talen zijn Smalltalk, C, Java en andere talen zoals BASIC en PASCAL.
Smalltalk.
Smalltalk was de oorspronkelijke objectgeoriënteerde taal, ontwikkeld in de vroege jaren 1970 door Xerox. Sindsdien zijn verschillende variaties ingevoerd. Het wordt nog steeds gebruikt, maar de brede acceptatie is gehinderd door het ontbreken van een universele norm.
C+ +.
C + + is een uitbreiding van de C-taal die OOP-mogelijkheden biedt. Het is waarschijnlijk de meest verspreide objectgeoriënteerde taal die momenteel wordt gebruikt. C is een hybride taal omdat het standaard C programma ‘ s compileert; het vereist niet het gebruik van objecten. Dit stelt het in staat om te profiteren van bestaande C-software, terwijl het gebruik van objectoriëntatie voor nieuwe software. C wordt gecontroleerd door ANSI-normen.
Java.
Java is de meest algemeen aanvaarde pure objectgeoriënteerde taal. Het werd oorspronkelijk ontwikkeld door Sun Microsystems als besturingstaal voor kleine apparaten. Het bleek echter ideaal voor gebruik met het Internet. Een Java-applet kan worden ingebed in een webpagina. Wanneer een browser laadt de webpagina, het laadt ook en toont de applet. Sun handhaaft nog steeds strikte controle van de taalstandaard.
om platformonafhankelijke werking te vergemakkelijken (werken op volledig verschillende computertypen zonder opnieuw te compileren), wordt Java in twee delen geà mplementeerd. De compiler produceert een object bestand dat alleen kan worden uitgevoerd door een Java Virtual Machine (JVM). Een aparte JVM is beschikbaar voor elk ondersteund besturingssysteem (Windows, Unix/Linux, of Solaris). Dit maakt Java programma ‘ s in staat om te draaien op een van deze systemen zonder opnieuw te compileren.
andere talen.
De meeste talen die tegenwoordig vaak worden gebruikt, staan een bepaalde vorm van objectoriëntatie toe. BASIC is geëvolueerd naar objectgeoriënteerde Visual BASIC; PASCAL naar objectgeoriënteerde DELPHI. Over het algemeen zijn dit hybride talen, zoals C, die objectoriëntatie ondersteunen zonder dat dit nodig is.
zie ook Compilers; Mouse; procedurele talen.
Donald M. McIver
Bibliography
Deitel, Harvey M., and Paul J. Deitel. Java: hoe te programmeren, 2nd ed. Upper Saddle River, NJ: Prentice Hall, 1998.
Voss, Greg. Objectgeoriënteerd Programmeren, Een Introductie. New York: Osborne McGraw-Hill, 1991.