Open Source im professionellen Einsatz
Linux-Magazin 11/2015
© Kai Chiang, 123RF

© Kai Chiang, 123RF

Pharo 4.0

Gut in Smalltalk

Das Open-Source-Projekt Pharo modernisiert den Programmierklassiker Smalltalk. Die aktuelle Version 4.0 der Programmierumgebung, die in einer Smalltalk-VM haust, überzeugt durch eine minimalistische Syntax und die ausgereifte IDE mit sinnvoller Benutzerführung.

832

Wie Entwickler mit Pharo 4.0 [1] im Handumdrehen komplexe und wartbare Anwendungen programmieren, zeigt gleich das folgende Beispiel. Der Shape-Akkumulator addiert die über ein Webformular spezifizierten Eigenschaften dreidimensionaler Körper (Abbildung 1) Server-seitig auf. Er liefert das Ergebnis an den Browser des Clients zurück.

Abbildung 1: Über ein Webinterface gibt der Nutzer Abmessungen ein.

Die aktuelle Version 4.0 steht unter der MIT-Lizenz, Pharo läuft in einer in Smalltalk [2] geschriebenen virtuellen Maschine. Unter Debian 7.8 startet der Benutzer das Derivat für ältere Versionen der Glibc mit dem Befehl:

wget http://files.pharo.org/platform/ Pharo4.0-linux-oldLibC.zip && unzip Pharo4.0-linux-oldLibC.zip

Der holt das Zip-Archiv und entpackt es auf der Kommandozeile.

Pharo läuft nur auf 32-Bit-Systemen, weshalb Anwender von 64-Bit-Distributionen Kompatibilitätspakete brauchen. Weitere Hinweise zur Installation gibt die Website [3]. Abbildung 2 zeigt die IDE nach dem Aufruf von »./pharo4.0/pharo« .

Abbildung 2: Die IDE von Pharo 4.0 gleicht einem Desktop. Die Werkzeuge tauchen in eigenen Fenstern auf.

Die Abbildung präsentiert die wichtigsten Werkzeuge der IDE. Links zeigt der Systembrowser Klassen und Methoden nicht nur an, sie lassen sich hier auch bearbeiten. In der Mitte sitzt das Kontext- oder auch World-Menü. Rechts oben stößt der Entwickler auf den Finder, mit dem er die Pharo-Umgebung durchsucht. Unten rechts wartet noch eine Smalltalk-Shell, Playground genannt, um Code einzugeben und auszuführen.

Obsessiv

Smalltalk kennt nur Objekte. Zahlen, Zeichenketten und Klassen sind genauso Objekte wie die Fenster unter der IDE in Abbildung 2. Neue Objekte entstehen wie unter C++ oder Java, indem der Entwickler sie instanziert. Da die Basisklasse der Beispielanwendung (Listing 1) in der gestarteten Pharo-Umgebung noch nicht existiert, erzeugt er sie mit Hilfe des Systembrowsers (Abbildung 3). Den startet er, indem er im World-Menü auf die IDE klickt.

Listing 1

Definition der abstrakten Basisklasse Shapes

01 Object subclass: #Shapes
02   instanceVariableNames: ''
03   classVariableNames: ''
04   category: 'Shapes'
Abbildung 3: Der Systembrowser listet Packages, Klassen, Protokolle und Methoden systematisch von links nach rechts auf. Der Editor unten bearbeitet die aktuelle Auswahl.

Da Pharo Klassen intern thematisch sortiert nach Packages speichert, legt der Entwickler für die zu programmierenden Klassen erst das Package »Shapes« an. Dazu wählt er ein bestehendes Package aus der linken Spalte von Abbildung 3 und öffnet einen Dialog, indem er aus dem Kontextmenü den Punkt »Add package« auswählt. Das Textfeld nimmt den Namen des neuen Package entgegen, ein Klick auf »OK« erzeugt es.

Im nächsten Schritt kopiert er den Code aus Listing 1 in den Editor (Abbildung 3, unten) und übernimmt ihn über das Kontextmenü. Die Klassendefinition beginnt mit der Klasse »Object« , die als Vorlage nahezu aller Basisklassen unter Pharo dient. Der eigentliche Klassenname steht hinter dem Schlüsselwort »subclass« und dem Hashtag. Zeile 4 ordnet »Shapes« dem gleichnamigen Package zu.

Empfangsbereit

Listing 2 zeigt die Methoden der Klasse »Shapes« . Der Pharo-Anwender kopiert sie ebenfalls in den Editor und übernimmt sie übers Kontextmenü. Ihre Namen erscheinen dann in der Spalte ganz rechts (Abbildung 3). Wer eine Methode im Editor bearbeiten möchte, wählt einfach ihren Namen aus. Außerdem kann er sie über die dritte Spalte von rechts funktional einordnen, indem er sie einem Protokoll zuweist.

Listing 2

Methoden der Basisklasse Shapes

01 set: dim
02   ^ self subclassResponsibility.
03
04 surface
05   ^ self subclassResponsibility.
06
07 volume
08   ^ self subclassResponsibility.
09
10 printAsText
11   ^ '{1} has the volume: {2} and a surface of {3}' format: {(self name) asString. self volume asString . self surface asString}.

Ihre Definition beginnt mit dem Methodennamen, der in Zeile 1 »set:« lautet. Übernimmt die Methode »set« einen Parameter, schließt ihr Name stets mit einem Doppelpunkt. Ihm folgt der Name des Aufrufparameters, hier »dim« . Smalltalker nennen Methoden Nachrichten, da sie Objekte als Empfänger von Nachrichten verstehen.

Besonderes Augenmerk verlangt dabei die Präzedenz [4] von Nachrichtentypen. Dank des »^« -Operators gibt Zeile 2 den Wert des Ausdrucks »self subclassResponsibility« zurück. Der Ausdruck sendet die Nachricht »subclassResponsibility« über die Sondervariable »self« quasi an sich selbst. Die Nachricht erzwingt einen Fehler, der die Methode sowie ihre Artgenossen »surface« und »volume« als abstrakt ausweist. Der Punkt am Ende von Zeile 2 trennt dabei Ausdrücke – wie das Semikolon in C-artigen Sprachen.

Anders als »set:« bringen »surface« , »volume« und »printAsText« keinen Aufrufparameter mit. In Zeile 11 gibt »printAsText« eine formatierte Zeichenkette zurück. Die Methode »format:« ersetzt dabei die Platzhalter »{1}« , »{2}« und »{3}« in der Zeichenkette. Der Methodenaufruf übernimmt ein Feld mit den drei Ausdrücken »(self name) asString« , »self volume asString« und »self surface asString« als Aufrufparameter. Letztere ersetzen die Platzhalter positionsgetreu.

Der erste Ausdruck ermittelt den Namen der Klasse, der zweite ruft die Methode »volume« , der dritte »surface« auf. Um die drei Ausdrücke in der Zeichenkette zu verwenden, verwandelt die Methode »asString« ihre Werte jeweils in eine Zeichenkette. Dank »self« startet Smalltalk die Suche nach einer Methode stets in der abgeleiteten Klasse.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Nachrichten-Zustellung

    Smalltalk ist rein objektorientiert und Vorbild für neuere Entwicklungen wie Objective-C oder Ruby. Als Grundelemente dienen Objekte und Nachrichten, mitgelieferte Klassen bestimmen den Funktionsumfang. Der Artikel stellt zwei Implementierungen vor, die Einsteigern und Profis gerecht werden.

  • Einführung

    DELUG-Käufer bekommen die doppelte Datenmenge zum einfachen Preis: Seite A der DVD enthält viel Material zur Entwicklungsumgebung Pharo sowie eine VM mit LXC-Containern. Die Rückseite bietet Videos von der Akademy 2015, ein E-Book über Debians Paketverwaltung und vieles mehr.

  • Schicke Klassiker

    Die Programmiersprachen Lisp und Smalltalk haben schon einige Jahrzehnte auf dem Buckel. Doch dank engagierter Communitys glänzen sie mit modernen Bibliotheken. Beim Umsortieren von Fußnoten und vor allem bei der Webprogrammierung zeigen sie, was in ihnen steckt.

  • ABC-Schütze

    C zählt trotz bekannter Probleme zu den populärsten Programmiersprachen. Eine der jüngeren Bewerberinnen um die Nachfolge ist D: Objektorientiert, inklusive Garbage Collection und Unit-Test-Funktionalität schleppt diese Sprache weit weniger Ballast mit sich herum als etwa C++.

  • Runter kommen sie alle

    Spiele-Programmierer rechnen mit physikalischen Formeln und setzen spezielle Tricks ein, um Grafiken realitätsnah zu animieren. Der als Perl-Wrapper verfügbare Simple Direct Media Layer (SDL) bietet ein leistungsfähiges Framework, um einfache 2D-Welten zu schaffen, hier eine Fallschirmsprung-Simulation.

comments powered by Disqus

Ausgabe 09/2017

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.