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

Seiteneffekte vermeiden

Obwohl der Compiler es nicht eigens erzwingt, gilt beim Programmieren mit Eiffel das Command-Query-Separationsprinzip: Ein Feature sollte nicht den Status des Objekts ändern und gleichzeitig einen Wert zurückgeben. Mit anderen Worten: Eine Funktion sollte keine Nebeneffekte haben.

Klassen sind in Cluster gruppiert, die meist eine Verzeichnishierarchie widerspiegeln. Dies ist jedoch nicht zwingend erforderlich, denn Cluster sind nur eine logische Aufteilung. Sie können auch Subcluster enthalten, so wie ein Verzeichnis Unterverzeichnisse enthält. Ein System ist eine Menge von Klassen, die sich zu einer ausführbaren Datei assemblieren lässt. Typischerweise ist es eine Menge von Clustern, die Klassen enthalten. Ein System entspricht in etwa einem Programm.

In Eiffel besitzt jedes System eine Root-Klasse. Sie wird bei der Ausführung des Systems mit ihrem Konstruktor (Creation-Prozedur) - der so genannten Root-Creation-Prozedur - instanziiert. Ein System entspricht den Klassen, die die Root-Klasse direkt oder indirekt benutzt. Jedes Objekt ist eine Instanz einer Klasse. Selbst bei elementaren Typen wie »INTEGER« oder »DOUBLE« handelt es sich um Objekte.

Außerdem ist Eiffel stark typisiert. Bei der Mehrheit der Typen handelt es sich um Referenztypen (Reference Types), die nicht selbst Objekte enthalten, sondern nur Referenzen auf sie. Neben Referenztypen gibt es auch erweiterte Typen (Expanded Types), die direkt Objekte aufnehmen. Das ist bei den elementaren Typen »INTEGER«, »REAL«, »DOUBLE«, »BOOLEAN« und »CHARACTER« der Fall. Zum Beispiel ist der Wert 42 des Typs »INTEGER« ein Objekt und nicht etwa eine Referenz auf ein Objekt.

Hello, Eiffelstudio!

Sie starten Eiffelstudio mit dem Befehl »estudio«. Dann wählen Sie im ersten Dialog einfach »Next«, um ein neues Projekt zu erstellen und geben im folgenden Dialog den Projektnamen und das Verzeichnis an. Nach einem Klick auf »OK« legt Eiffelstudio das Projekt an und kompiliert das System.

Die Benutzeroberfläche ist in vier Bereiche unterteilt (siehe Abbildung 2). Der linke untere Fensterbereich (1) zeigt die Cluster eines Projekts, in dem Sie wie in Verzeichnissen navigieren. In den Clustern befinden sich die Klassen, aus denen das Projekt besteht.


Abbildung 2: Die vier Hauptbereiche der Benutzeroberfläche von Eiffelstudio.

Wenn Sie eine Klasse anklicken, zeigt der Editor (2) sie an. Links vom Editor befindet sich die Auflistung aller Features der aktuellen Klasse (3). Falls Eiffelstudio nicht alle Features einer Klasse auflistet, müssen Sie das System noch einmal kompilieren.

Durch Anklicken eines Features springt der Editor automatisch an jene Stelle, an der das Feature definiert ist. Unten rechts befindet sich das Context-Fenster (4). Es bietet durch die unteren Karteireiter einige interessante Ansichten des Projekts, etwa Diagramme oder eine Übersicht über die Klassen.

Mit dem Assistenten »Tools | New Class...« erstellen Sie die Klasse »HELLO« (Listing 1). Obwohl die Groß- und Kleinschreibung beim Eiffel-Code keine Rolle spielt, gibt es einige Konventionen, an die Sie sich halten sollten (siehe Kasten "Groß- und Kleinschreibung").

Listing 1: Hello World,
»HELLO«

01 indexing
02   description: "Simple 'Hello, World!' class"
03 
04 class
05   HELLO
06 
07 create
08   make
09 
10 feature {NONE} -- Initialization
11 
12   make is
13       -- Creation procedure.
14     do
15       set_name ("anonymous Eiffel Programmer")
16     end
17 
18 feature -- Access
19 
20   name: STRING
21       -- Name used for greeting.
22 
23   greeting: STRING is
24       -- Printable representation of `HELLO' objects.
25     do
26       Result := "Hello, " + name + "!"
27     end
28 
29 feature -- Element change
30 
31   set_name (a_name: STRING) is
32       -- Set `name' with `a_name'.
33     require
34       name_exists: a_name /= Void
35       name_valid: not a_name.is_empty
36     do
37       name := a_name
38     ensure
39       name_set: name = a_name
40     end
41 
42 invariant
43   name_exists: name /= Void
44   name_valid: not name.is_empty
45 
46 end -- class HELLO

Groß- und
Kleinschreibung

Von Eiffel-Programmierern verwendete Konventionen zur Groß- und Kleinschreibung:

  • Klassennamen stehen in Großbuchstaben:
    »HELLO«, »LINKED_LIST« ...
  • Namen von Attributen, Routinen und so weiter in
    Kleinbuchstaben: »greeting«, »set_name«,
    »i« ...
  • Konstante Attribute beginnen mit einem Großbuchstaben,
    danach folgen Kleinbuchstaben: »Welcome_message: STRING is
    "Hello, World!"«
  • Einige Schlüsselwörter haben ebenfalls einen
    Großbuchstaben am Anfang, da sie ähnlich wie Konstanten
    sind: »Current«, »Result«,
    »Precursor«, »True«,
    »False«

Der Eintrag »indexing« in Zeile 1 startet den fakultativen Indexierungs-Abschnitt, der der Dokumentation dient. Jeder Eintrag im »indexing«-Abschnitt besteht aus zwei durch Doppelpunkte getrennten Teilen: Kennzeichnung und Text. Weitere gebräuchliche Kennzeichnungen neben »description« sind »author«, »date«, »note« und »revision«.

Die eigentliche Klasse beginnt in Zeile 4 mit dem Schlüsselwort »class« gefolgt von ihrem Namen. Mit »feature« führen Sie eine Menge von Features ein. Die mit »--« gekennzeichneten Kommentare sind optional, Eiffelstudio verwendet sie aber zur Gruppierung. Das »end« in Zeile 46 beendet die Klassendefinition.

Mit »create« (Zeile 7) definieren Sie die Namen der Creation-Prozeduren (Konstruktoren) der Klasse. Im Gegensatz zu Java oder C++ besitzen Konstruktoren in Eiffel keine vordefinierten Namen. Verfügt eine Klasse über mehrere Creation-Prozeduren, werden die Namen mit Kommas voneinander getrennt.

Es ist auch möglich, dass die Klasse keine »create«-Anweisung hat. In diesem Fall erbt sie den Standardkonstruktor »default_create« von der Klasse »ANY«, von der alle Eiffel-Klassen implizit erben (Abbildung 3). In der Klasse »HELLO« gibt es nur eine Creation-Prozedur, die den Namen »make« trägt (Zeile 8).


Abbildung 3: An der Spitze der Vererbungshierarchie von Eiffel steht die Klasse »ANY«.

Eiffel erlaubt es, jeden Aspekt der Datenkapselung zu kontrollieren. So folgt dem Schlüsselwort »feature« in Zeile 10 der Klassename »NONE« in geschweiften Klammern. Das bedeutet, dass Eiffel Features nach dieser Anweisung und bis zum nächsten »feature«-Schlüsselwort nur für die Klasse »NONE« exportiert. »NONE« ist eine virtuelle Klasse, die von allen Klassen erbt, sie steht am Ende der Vererbungshierarchie (Abbildung 3).

Ein Feature, das nach »NONE« exportiert wird, kann von keinem Verwender (Client) der Klasse aufgerufen werden. Nur die Klasse selbst und ihre Erben dürfen es benutzen. »feature {NONE}« ist äquivalent zu »feature {}«. Dieses Konzept entspricht in etwa dem Protected in Java oder C++.

Zwischen den geschweiften Klammern darf jede Klasse stehen. Kommas trennen mehrere voneinander. Damit können Sie das Exportieren von Features sehr fein steuern. Standardmäßig exportiert Eiffel alle Features nach »ANY«, »feature« ist also äquivalent zu »feature {ANY}«. Das bedeutet, dass jeder Client die Features aufrufen darf.

Obwohl der Konstruktor nach »NONE« exportiert wurde, können Sie »HELLO« instanziieren. Das Exportieren einer Creation-Prozedur nach »NONE« bedeutet, dass die Prozedur sich auf das Erstellen eines Objekts beschränkt. Der Client darf sie nicht als normale Prozedur aufrufen.

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
Tcl-Fledermaus Corba-Clients und -Server mit Combat in Tcl programmieren
Whitepaper
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)
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele (Folge 2)

Der zweite Teil des Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele White Papers beleuchtet anhand weiterer ausgewählter Case Studies die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.

Download PDF (Registrierung erforderlich)
Kommentare (0)