Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Programmieren<br />
www.linux-magazin.de Vala 09/2013<br />
96<br />
zen alle Klassen aus der GTK-Bibliothek<br />
das Präfix »Gtk«, ein Fenster heißt folglich<br />
»Gtk.Window«. Wer die Schreibarbeit<br />
umgehen möchte, importiert mit »using«<br />
einen Namespace und lässt ihn in den<br />
folgenden Zeilen weg:<br />
using Autos;<br />
BMW meinauto = BMW();<br />
Standardmäßig importiert Vala den<br />
Name space »GLib«. Damit stehen alle<br />
Objekte und Methoden der Glib-Bibliothek<br />
direkt bereit. Dazu gehört übrigens<br />
auch die Methode »print()«, die man eigentlich<br />
korrekt mit »GLib.print();« aufrufen<br />
müsste.<br />
Zeig her!<br />
01 // Virtuelle Methoden:<br />
Wenn der Entwickler ein Objekt anlegt,<br />
liefert Vala nur eine Referenz darauf zurück.<br />
Bei einer Zuweisung »b = a;« liegt<br />
01 public class Auto : GLib.Object {<br />
02 private string farbe;<br />
03 <br />
02 public class Auto : GLib.Object {<br />
03 public virtual void starten()<br />
{print("tucker");}<br />
04 }<br />
05 <br />
06 public class Ferrari : Auto {<br />
07 public override void starten()<br />
{print("brumm");}<br />
08 }<br />
01 public interface Auto : GLib.Object {<br />
02 public abstract void starten();<br />
03 }<br />
04 <br />
Listing 8: Überschreiben<br />
04 public Auto() {farbe = "rot";}<br />
05 public Auto.faerben(string f) {farbe<br />
= f;}<br />
06 <br />
07 public void starten()<br />
{print("tucker");}<br />
08 }<br />
09 <br />
Listing 9: Virtuelle Methoden<br />
Listing 10: Interfaces<br />
05 public class Ferrari : GLib.Object, Auto {<br />
06 public void starten() {<br />
print("brumm\n"); }<br />
Die Referenzimplementierung des Vala-<br />
Compilers steht unter der LGPL 2.1 und<br />
ist in den Repositories der meisten großen<br />
Distributionen enthalten. Bei der<br />
Installation sollten Interessenten darauf<br />
achten, möglichst die neueste Fassung<br />
zu nutzen. Wer bei der Frische auf Numin<br />
»b« eine weitere Referenz auf das gleiche<br />
Objekt. Mit dem Schlüsselwort »owned«<br />
lässt sich der Besitzer wechseln:<br />
Foo foo = (owned) bar;<br />
Nach dieser Anweisung hat »bar« den<br />
Wert »null«, während »foo« auf das Objekt<br />
zeigt, das in »bar« war. Des Weiteren<br />
führt Vala im Hintergrund automatisch<br />
Buch darüber, wie viele Referenzen auf<br />
ein Objekt zeigen. Sobald es keine Referenzen<br />
mehr gibt, fliegt das entsprechende<br />
Objekt aus dem Speicher (Referenzzählung).<br />
Wenn sich allerdings zwei Objekte gegenseitig<br />
nutzen, sonst aber keine weiteren<br />
Referenzen auf die beiden existieren, sind<br />
sie zwar überflüssig, ihre Zähler stehen<br />
aber dennoch nicht auf Null. Folglich<br />
bleiben die beiden Objekte für immer im<br />
Speicher. Sieht ein Programmierer solch<br />
eine Situation kommen, sollte er Vala<br />
10 public class Ferrari : Auto {<br />
11 public void starten() {print("brumm");}<br />
12 }<br />
13 <br />
14 [...]<br />
15 <br />
16 Auto bmw = new Auto.faerben("blau");<br />
17 <br />
18 Ferrari f = new Ferrari();<br />
19 Auto a = f;<br />
20 a.starten();<br />
09 <br />
10 public class BMW : Auto {<br />
11 public new void starten(string ton)<br />
{print(ton);}<br />
12 }<br />
13 <br />
14 [...]<br />
15 <br />
16 BMW b = new BMW();<br />
17 b.starten("brumm");<br />
07 }<br />
08 <br />
09 [...]<br />
10 <br />
11 Ferrari f = new Ferrari();<br />
12 Auto meins = f;<br />
13 meins.starten();<br />
mit dem Schlüsselwort »weak« darauf<br />
hinweisen:<br />
class Seite {<br />
public weak Seite vorherige;<br />
public Seite naechste;<br />
}<br />
Wer das Speichermanagement vollkommen<br />
selbst übernehmen möchte, kann<br />
die aus C bekannten Zeiger mit der Pfeilund<br />
Sternchennotation nutzen:<br />
Auto* bmw = new Auto();<br />
bmw‐>starte();<br />
delete bmw;<br />
Neben den vorgestellten Sprachelementen<br />
kennt Vala zahlreiche weitere. So<br />
gibt es unter anderem Annotationen,<br />
abstrakte Klassen sowie die aus C++<br />
bekannten »struct« und »enum«. Zur<br />
Laufzeit lässt sich der Typ eines Objekts<br />
prüfen, während Assertions die Einhaltung<br />
vorgegebener Bedingungen sicherstellen.<br />
Vala selbst bietet jedoch keine<br />
Unterstützung für nebenläufige Verarbeitung,<br />
Threads lassen sich nur mit Hilfe<br />
der Glib-Bibliothek und deren Klasse<br />
»Thread« erstellen.<br />
Übersetzungsdienst<br />
Infos<br />
[1] Vala: [https:// wiki. gnome. org/ Vala]<br />
[2] Vala Release-Notes:<br />
[https:// wiki. gnome. org/ Vala/ Release]<br />
[3] Shotwell:<br />
[http:// www. yorba. org/ projects/ shotwell/]<br />
[4] Geary:<br />
[http:// www. yorba. org/ projects/ geary/]<br />
[5] Libgee: [https:// wiki. gnome. org/ Libgee]<br />
[6] Vala-Tutorial:<br />
[https:// wiki. gnome. org/ Vala/ Tutorial]<br />
[7] „Vala for C# Programmers“:<br />
[https:// wiki. gnome. org/ Vala/<br />
ValaForCSharpProgrammers]<br />
[8] „Vala for Java Programmers“:<br />
[https:// wiki. gnome. org/ Vala/<br />
ValaForJavaProgrammers]