Open Source im professionellen Einsatz

Newsletter abonnieren
Seite durchsuchen

HEFTARCHIV | NEWS | E-BIBLIOTHEK | VIDEO | BLOGS | WHITEPAPER | EVENTS | ACADEMY | ABO | SHOP

user friendly

  Home  »  Heft & Abo  »  Heftarchiv  »  2006  »  09  »  Ingenieurskunst  

RSS-Feed der aktuellen News von Linux-Magazin Online Folgen Sie Linux-Magazin Online auf Twitter
Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark

Ein- und Ausgabe

Wie beschrieben erbt jede Klasse in Eiffel von »ANY« (Abbildung 3). »ANY« besitzt eine Funktion »io«, die eine Referenz auf ein Objekt der Klasse »STD_FILES« zurückgibt, die wiederum Features für Ein- und Ausgabe definiert. Zeile 18 (Listing 2) gibt mit dem Feature »put_string« eine Zeichenkette aus. In Zeile 19 liest »io.read_line« eine Zeile und speichert sie in »io.last_string«.

Das Feature »set_name« von »HELLO« bekommt in Zeile 20 die zuletzt gelesene Zeichenkette »io.last_string« als Argument übergeben. Zeile 21 benutzt »put_string«, um den Rückgabewert der Funktion »greeting« der Klasse »HELLO« auszugeben. »%N« ist das Spezialzeichen für einen Zeilenumbruch. Weitere Spezialzeichen sind zum Beispiel »%B« (Backspace), »%T« (Tabulator), »%%« (Prozentzeichen), »%\'« (Single Quote) und »%"« (Double Quote).

»STD_FILES« definiert neben »put_string«, »read_line« und »last_string« weitere Features zur Ein- und Ausgabe. Welche das sind, finden Sie am einfachsten mit der in Eiffelstudio verfügbaren Codekomplettierung heraus. Dazu öffnen Sie »ROOT_CLASS« im Editor und fügen am Ende von »make« eine neue, zunächst leere Zeile ein. Dort geben Sie anschließend »io.« ein und drücken [Strg]+[Leertaste]. Dann klappt ein Menü mit allen von »STD_FILES« exportierten Features auf.

Eine andere Möglichkeit ist Pick&Drop. Dazu klicken Sie mit der rechten Maustaste auf »io« (Pick), ziehen den Cursor etwas zur Seite und drücken ein weiteres Mal die rechte Maustaste, während sie sich im Editorfenster befindet (Drop). Dann zeigt Eiffelstudio den Klassentext von »ANY« an der Stelle der Definition des Features »io«. Dort können Sie mit dem Rückgabetyp von »io« genau gleich verfahren und landen schließlich beim Klassentext von »STD_FILE«.

Gustave Eiffel



Der Name der Programmiersprache ist eine Reverenz an Gustave Eiffel, der unter anderem das Metallgerüst der Freiheitsstatue in New York und den Eiffelturm in Paris gebaut hat. Das Pariser Wahrzeichen wurde zur Weltausstellung 1889 fertig gestellt. Es besteht aus über 18000 Einzelmodulen, die Gustave Eiffel in seiner Fabrik vorbereiten ließ. Arbeiter setzten aus diesen Elementen den Turm vor Ort zusammen. Der Eiffelturm ist laut Bertrand Meyer das beste Symbol für das, was man mit Eiffel in der Softwarewelt erreichen kann.

Verletzter Vertrag

Mit [F7] oder einem Klick auf das in Abbildung 4 grün umrandete Icon kompilieren Sie das System. Wenn Sie es mit [Strg]+[F5] oder einem Klick auf das in der Abbildung rot umrandete Icon ausf&;uuml;hren, erzeugt es nach der Eingabe von »Zaphod Beeblebrox« folgende Ausgabe auf der Konsole:

Please enter your name: Zaphod Beeblebrox
Hello, Zaphod Beeblebrox!

Drücken Sie auf die Frage nach Ihrem Namen nur die Eingabetaste, wird das Feature »set_name« mit einer leeren Zeichenkette als Argument aufgerufen. Die Vorbedingung des Features »set_name« der Klasse »HELLO« ist also verletzt. Klienten einer Klasse müssen Benutzereingaben prüfen, bevor sie sie verwenden. In diesem Fall soll das eine bedingte Anweisung übernehmen.

Zeile 9 von Listing 3 prüft, ob der Benutzer eine leere Zeile eingegeben hat. Falls ja, macht das Programm mit einer Fehlermeldung darauf aufmerksam (Zeile 10). Sonst setzt es die Ausführung in Zeile 11 wie in der ursprünglichen Version (also wie in Listing 2) fort. Um jedoch auf der Eingabe einer gültigen Zeichenkette zu bestehen, könnten Sie die Abfrage in eine Schleife verpacken. Eleganter ist es jedoch, die Tatsache auszunutzen, dass eine Vertragsverletzung eine Ausnahme auslöst.

Listing 3:
»ROOT_CLASS« mit bedingter Anweisung

01 make is
02     -- Creation procedure.
03   local
04     hello: HELLO
05   do
06     create hello.make
07     io.put_string ("Please enter your name: ")
08     io.read_line
09     if io.last_string.is_empty then
10       io.put_string ("Error: You entered an empty name! %N")
11     else
12       hello.set_name (io.last_string)
13       io.put_string (hello.greeting + "%N")
14     end
15   end

Wenn eine Routine Ausnahmen nicht abfängt, bricht sie die Ausführung ab. Behandeln kann sie eine Ausnahme in einem fakultativen »rescue«-Abschnitt, der das aktuelle Objekte in einen Zustand überführt, der die Klasseninvariante erfüllt. Der »rescue«-Abschnitt kann die »retry«-Instruktion aufrufen, die die Routine noch einmal neu startet und versucht den Vertrag zu erfüllen.

Wenn der »rescue«-Abschnitt nicht mit »retry« endet, scheitert die Ausführung der Routine und im Aufrufer tritt eine Exception auf. Danach wird der »rescue«-Abschnitt des Aufrufers genau nach den gleichen Regeln ausgeführt. Normalerweise definieren nur wenige Routinen einen »rescue«-Abschnitt. Wenn eine Routine über keinen eigenen verfügt, greift sie auf den impliziten zurück, der die Routine »default_rescue« der Klasse »ANY« aufruft.

Nun können Sie die Ausnahmebehandlung in der Routine »make« verwenden (Listing 4). Sie ist beinahe identisch zur ursprünglichen Version (Listing 2), nur der »rescue«-Abschnitt kommt hinzu (Zeile 11). Falls eine Ausnahme auftritt, gibt das Programm eine Fehlermeldung aus (Zeile 12) und führt dann mit »retry« die Routine weiter aus (Zeile 13), bis der Benutzer des Programms einen gültigen Namen eingibt.

Listing 4:
»ROOT_CLASS« mit Ausnahmebehandlung

01 make is
02     -- Creation procedure.
03   local
04     hello: HELLO
05   do
06     create hello.make
07     io.put_string ("Please enter your name: ")
08     io.read_line
09     hello.set_name (io.last_string)
10     io.put_string (hello.greeting + "%N")
11   rescue
12     io.put_string ("An error occured. Please try again. %N")
13     retry
14   end

Wenn Sie das Programm erneut in Eiffelstudio starten und dann, statt einen Namen einzugeben, direkt [Enter] drücken, verletzt das immer noch die Vorbedingung »name_valid« der Prozedur »set_name« der Klasse »HELLO«. Das geschieht, weil Sie das Programm im Debug-Modus ausführen. Starten Sie von der Kommandozeile die ausführbare Datei »hello« (im Unterordner »EIFGEN/W_code« des Projektordners) funktioniert die Ausnahmebehandlung problemlos.

Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark
Ähnliche Artikel
Verwandlungskünstler C- und C++-Entwicklung mit Eclipse
Here comes the sun Suns Java-Entwicklungsumgebung Netbeans
Babylon zu fünft Populäre Programmiersprachen treten gegeneinander an
Junge Pinguinbande Linux Tools für Eclipse
Babylon zu fünft Populäre Programmiersprachen treten gegeneinander an
Konservierungsmittel Objektdatenbank Db4o für Java und Mono
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)
Kommentare (0)