Parrot

Eine VM für mehrere Skriptsprachen

Objektorientierung

Einführung

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

Methoden

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

Klassen benutzen

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