Taal - overzicht

Objecten vormen de kern en fundamentele bouwstenen van de ActionScript 3.0-taal. Elke variabele die u declareert, elke functie die u schrijft en elke instantie van een klasse die u maakt, is een object. U kunt een ActionScript 3.0-programma zien als een groep objecten voor het uitvoeren van taken, reageren op gebeurtenissen en communiceren met anderen.

Programmeurs die bekend zijn met objectgeoriënteerd programmeren (OOP) in Java of C++, kunnen objecten beschouwen als modules met twee soorten leden: gegevens opgeslagen in lidvariabelen of eigenschappen, en gedrag dat via methoden toegankelijk is. ActionScript 3.0 definieert objecten op soortgelijke, maar enigszins verschillende manier. In ActionScript 3.0 zijn objecten niets anders dan verzamelingen van eigenschappen. Deze eigenschappen zijn containers die niet alleen gegevens, maar ook functies of andere objecten kunnen bevatten. Als een functie op deze wijze aan een object is gekoppeld, is er sprake van een methode.

Hoewel de definitie in ActionScript 3.0 voor programmeurs met ervaring in Java of C++ wat vreemd kan overkomen, lijkt het definiëren van objecttypen met ActionScript 3.0-klassen heel sterk op het definiëren van klassen in Java of C++. Het onderscheid tussen de twee definities van object is van belang bij de bespreking van het ActionScript-objectmodel en andere geavanceerde onderwerpen, maar in de meeste andere situaties betekent de term eigenschappen klassenlidvariabelen in tegenstelling tot methoden. In de Naslaggids voor Adobe ActionScript 3.0 voor het Adobe Flash-platform wordt bijvoorbeeld de term eigenschappen gebruikt voor variabelen of voor de eigenschappen getter/setter. De term methoden betekent in dit geval functies die onderdeel zijn van een klasse.

Een subtiel verschil tussen klassen in ActionScript en klassen in Java of C++ is dat in ActionScript klassen niet alleen maar abstracte entiteiten zijn. ActionScript-klassen worden vertegenwoordigd door klassenobjecten die de eigenschappen en methoden van de klasse opslaan. Dit maakt technieken mogelijk die vreemd lijken voor programmeurs in Java en C++, zoals het opnemen van instructies of uitvoerbare code op het hoofdniveau van een klasse of pakket.

Nog een verschil tussen klassen in ActionScript en Java of C++ is dat elke ActionScript-klasse een zogeheten prototypeobject heeft. In eerdere versies van ActionScript vormden prototypeobjecten (aan elkaar gekoppeld in prototypeketens) samen de basis van de gehele klassenoverervingshiërarchie. In ActionScript 3.0 spelen prototypeobjecten echter maar een kleine rol in het systeem van overerving. Het prototypeobject kan nog wel steeds nuttig zijn als alternatief voor statische eigenschappen en methoden als u een eigenschap en de waarde ervan wilt delen voor alle instanties van een klasse.

Voorheen konden gevorderde ActionScript-programmeurs de prototypeketen rechtstreeks manipuleren met speciale ingebouwde taalelementen. Nu de taal een krachtigere, op klassen gebaseerde programmeerinterface biedt, maken vele van deze speciale taalelementen, zoals __proto__ en __resolve, geen deel meer uit van de taal. Bovendien zijn de optimalisaties van het interne overervingsmechanisme aanzienlijk verbeterd en is directe toegang tot het overervingsmechanisme daardoor uitgesloten.