26.02.2014 Aufrufe

Linux-Magazin Clean Linux (Vorschau)

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]

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!