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«.
|
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.
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.
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.
| 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.
|