Konstruieren und erzeugen
Das Instanziieren von Klassen und Schreiben von Konstruktoren weicht etwas von dem ab, was Sie vielleicht von anderen Sprachen kennen. Ein Konstruktor in Vala-Schreibweise erfordert etwas Umdenken:
construct {
field1 = "string";
field2 = 1;
}
Natürlich ist es erforderlich, vorher "field1" und "field2" entsprechend mit "private string field1" und "private int field2" zu deklarieren. Die Syntax der Konstruktoren, die Sie zum Beispiel aus Java kennen, entsprecht in Vala den "Creation"-Methoden. Diese sind von der Syntax gleich (Listing 4), bis auf eine kleine Ausnahme.
|
Listing 4: Konstruktor und "Creation"-Methoden
|
using GLib;
class Klasse : Object {
public int prop1 { get; set; }
public string prop2 { get; set; }
private int field;
private Object obj;
public Klasse(construct int prop1) {}
public Klasse.with_string(int prop1, construct string prop2) {}
construct {
field = 42;
obj = new Object();
}
public void println() {
stdout.printf("prop1: %d\tprop2: %s\t", prop1, prop2);
stdout.printf("field: " + field + "\n");
}
public static void main(string[] args) {
Klasse kl1 = new Klasse(1);
kl1.println(); // prop1: 1 prop2:(null) field: 42
Klasse kl2 = new Klasse.with_string(1, "Vala");
kl2.println(); // prop1: 0 prop2: Vala field: 42
}
}
|
Wie weiter oben erwähnt, dient "construct" als der eigentliche Konstruktor. In "Klasse(construct int prop1)" und "Klasse.with_string(construct int prop2, construct string prop2)" initialisiert der Compiler die Properties der Klasse. Es darf auch kein anderer Code als solcher, der sich auf eine Property bezieht dort vorkommen. Wertezuweisungen an Felder sind genauso wenig erlaubt wie "print"-Anweisungen oder der Aufruf von Methoden. Der Compiler quittiert das mit einer sofortigen Fehlermeldung beim Übersetzen. Ein Wort sei noch zu dem Schlüsselwort "construct", das bei den Parametern vorkommt, gesagt: Es bedeutet, dass der Compiler die Property mit dem angegeben Wert bei der Instantiierung setzt. Bei "Klasse.with_string(...)" initialisiert der Compiler den ersten Parameter nicht.
Ein kurzes Wort sei auch noch zur Initialisierungsreihenfolge gesagt:
- Initialisierung der Properties (Aufruf der "Creation"-Methoden)
- Initialisierung der Felder (Aufruf von "construct")
Es gibt noch weitere Typen von Properties, die "GObject" kennt:
- "construct-only": Vala initialisiert die Property einmalig bei der Instantiierung. Eine weitere Zuweisung führt zu einer Fehlermeldung. Derzeit erzeugt der Compiler leider noch fehlerhaften Code, so dass dies noch nicht richtig funktioniert.
- "read-only": Auch hier setzt der Compiler die Property nur einmal. Im Unterschied zur "construct-only"-Property passiert das erst im Konstruktor und nicht in der "Creation"-Methode.

|
Wie bei jedem jungen Projekt ist auch das Vala-Team auf Rückmeldungen über den Bugtracker angewiesen.
|
Da der Initialisierungsprozess selbst laut Vala-Autor recht komplex ist, finden Sie unter http://live.gnome.org/Vala/PropertiesSample einen Quelltext, der die einzelnen Schritte der Initialisierung ausgibt und so mehr Licht ins Dunkel bringt. Experimentieren schadet nichts, und falls Sie Bugs im Compiler finden, freut sich Vala-Autor Billeter über Fehlermeldungen. Lassen Sie sich nicht von den Ausrufezeichen, die sich an die Typen anschließen abschrecken: Noch ist der notwendige Teil im Compiler nicht vorhanden. Später warnt Sie Vala davor, falls ein Rückgabewert oder Parameter "null" ist. Das Stichwort lautet "non-null"-Typen. Momentan forschen viele Entwickler noch daran, im Internet gibt es jedoch Forschungsberichte dazu.
Signale
Bei GUI-Programmen sind Signale und Signal-Handler nicht mehr wegzudenken. Der Grund ist einfach: Anwendungen müssen auf die Benutzereingaben, zum Beispiel Tastatur- oder Mauseingaben reagieren. Bereits "GObject" enthält das Signal "notify". Die Wiki-Seite demonstriert die Methode anhand eines Beispiels: Beim Setzen einer Property erfolgt die Signalisierung. Die dort verwendete Syntax mag etwas eigentümlich erscheinen. Es handelt sich in der "run"-Methode jedoch um einen Lambda-Ausdruck, in welchem das Parameterpaar "(s, p)" auf die Ausgabe abgebildet wird. Die ausführliche Syntax ohne Lambda-Ausdruck sehen Sie im folgenden Listing 5:
|
Listing 5: Signale und Signal-Handler
|
...
public static void notify_handler(Object obj, ParamSpec spec) {
stdout.printf("property %s has changed\n", spec.name);
}
...
construct {
notify += notify_handler;
}
...
|
Manchmal ist es bequemer und oft auch kürzer anonyme (Lambda-) Funktionen zu verwenden. Was sich in beiden Beispielen jedoch nicht geändert hat, ist der aus C# bekannte Operator "+=". Sie binden damit einen Signal-Handler, hier "notify_handler" an das Signal "notify".
| Whitepaper |
|
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele
Über die letzten Jahre hinweg haben sich Open Source Lösungen als fester Bestandteil des gesamten Datenintegrationsmarktes etabliert. Viele Unternehmen haben bereits das Open Source Modell für Ihre Datenintegrationsprojekte aufgegriffen. Das vorliegende White Paper illustriert anhand ausgewählter Fallstudien und Anwendungsbeispiele die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.
Download PDF (Registrierung erforderlich)
|
|
The Role of Open Source in Data Integration
Obwohl in den letzten Jahren viele technische Fortschritte erzielt werden konnten, verfügen die meisten Datenintegrationsprozesse nach wie vor nur über eine sehr begrenzte Automatisierung. Das vorliegende White Paper von dem Industry Analyst Mark Madson wird zunächst ein grundlegendes Verständnis von Daten Integration vermitteln, die Vorzüge von Open Source Lösungen für Daten Integration erläutern und Ihnen professionelle Empfehlungen geben, damit Sie Ihre Integrationsjobs noch einfacher und produktiver gestalten können.
Download PDF (Registrierung erforderlich)
|
Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links"
nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedrucken Fassung entsprechen.
|
Matthias,
03.05.2010 20:08
Ich würde mir weitere Beiträge zu Vala wünschen. Es gibt einfach zu wenige Howtos und Beiträge zu Vala. Vala findet noch nicht die Beachtung die es verdient.
mfg Matthias
carina,
18.02.2010 11:06
In Liebe Grüße Carina