Die Verwaltung von Klassen erfolgt ausschließlich über Operationscodes. Diese Methodik erscheint anfangs unhandlich, jedoch erspart sich Parrot so einen ClassLoader und extra Formate um Klassen zu speichern.
.sub main
getclass $P0, 'Exception'
subclass $P1, $P0, 'MyException'
newclass $P2, 'Animal'
newclass $P3, 'Eatable'
newclass $P4, 'Cow'
# Mehrfachererbung ist möglich
addparent $P4, $P2
addparent $P4, $P3
.end
Um einer Klasse Methoden hinzuzufügen, müssen sie im Namespace der Klasse liegen und das Methoden-Flag haben. Folgender Code fügt der Klasse "Animal" eine Methode "run" hinzu.
.namespace [ 'Animal' ]
.sub run :method
print "dinner"
.end
Es ist natürlich auch möglich Methoden zu überschreiben. Dafür muss die Methode legendlich mit dem vtable-Flag defeniert werden.
.namespace [ 'Dog' ]
.sub run :vtable
print "no dinner"
.end
Um Klassen benutzen zu können, müssen sie instanziiert werden. Dies ist mit dem Befehl "new" möglich. Methoden können dann mit dem Operationscode "callmethod" aufgerufen werden. PIR bietet hier jedoch wieder syntaktische Vereinfachungen.
.sub main
.local pmc obj
.local int r1
.local int r2
.local string args
(r1, r2) = obj."methodenName"(args)
.end
Erstellt von Johannes Barop