Open Source im professionellen Einsatz
Linux-Magazin 11/2015
702

Netztauglich

Die Beispielanwendung braucht im Folgenden die Klassen aus dem Package »Shapes« , um die Oberfläche und das Volumen von geometrischen Objekten zu berechnen. Die Spezifikation der Objekte erfolgt in diesem Fall über ein Formular, das der Pharo-Server unter einer URL ausliefert. Die Smalltalk-Bibliothek Seaside [5] erstellt das Formular und wertet es aus. Listing 7 installiert über eine Pharo-Shell die neueste Version in der laufenden Pharo-IDE. Damit Pharo den Code aus dem Listing nach dem Kopieren auch ausführt, muss der User ihn zunächst markieren und anschließend mittels [ALT]+[D] aktivieren.

Listing 7

Installation von Seaside unter Pharo

01 Gofer new url:'http://www.smalltalkhub.com/mc/Seaside/MetacelloConfigurations/main';
02     package: 'ConfigurationOfSeaside3';
03     load.
04 ((Smalltalk at: #ConfigurationOfSeaside3) project version: #stable) load.

Listing 8 zeigt die Klassendefinition der Beispielanwendung »WWWShapes« . Sie leitet sich von der Seaside-Klasse »WAComponent« ab. Zeile 2 definiert die drei Instanzvariablen »shapes« , »shape« sowie »dim« .

Listing 8

Definition der Klasse WWWShapes

01 WAComponent subclass: #WWWShapes
02   instanceVariableNames: 'shapes shape dim'
03   classVariableNames: ''
04   category: 'Shapes'

»WAComponent« stellt einen kompletten HTTP-Handler bereit. Trifft eine HTTP-Anfrage eines beliebigen Clients ein, ruft die Klasse die Methode »renderContentOn:« aus Zeile 9 von Listing 9 auf. Die Methode übernimmt das Objekt »html« , um das Webformular zu erzeugen. Zuvor definiert Zeile 10 noch die lokale Variable »group« . Dann generiert »html« in Zeile 11 eine »h1« -Überschrift mit dem Text »Calculate Shape properties« und in Zeile 12 ein klassisches HTML-»form« -Tag.

Listing 9

Methoden der Klasse WWWShapes

01 initialize
02   super initialize.
03   shapes := Accumulator new.
04
05 save
06   shapes set: (shape set: dim).
07   self inform: shapes printAsText.
08
09 renderContentOn: html
10   |group|
11   html heading level: 1; with: 'Calculate Shape properties'.
12   html form: [
13     group := html radioGroup.
14     group radioButton
15       callback: [ shape := Sphere new];
16       selected: true.
17     html text: 'Sphere'.
18     group radioButton
19       callback: [ shape := Cube new ].
20     html text: 'Cube'.
21     html textInput
22       callback: [ :value | dim := value];
23        value: 0.
24      html submitButton on: #save of: self.
25 ]

Die eingebetteten Elemente landen in einem anonymen Funktionsblock, der sich von Zeile 12 bis Zeile 25 erstreckt. In Zeile 13 erzeugt »html« mit der Methode »radioGroup« ein weiteres Objekt, mit dem die Zeilen 14 bis 16 und 18 bis 19 die beiden Radio-Buttons in Abbildung 1 konstruieren.

Im Aufrufparameter der Methode »callback« stecken anonyme Funktionsblöcke. Die Methode führt sie im Stile von Rückruffunktionen aus, wenn ein Nutzer das Formular absendet. Beim Aufruf erzeugen sie wahlweise ein Objekt vom Typ »Sphere« oder »Cube« und speichern es in der Instanzvariablen »shape« . Analog arbeitet Zeile 22 und speichert dabei den Wert des Eingabefelds (Abbildung 1) in der Instanzvariablen »dim« .

Am Ende verknüpft die Methode »on:of:« in Zeile 24 den Klick auf den Senden-Knopf mit der Methode »save« aus Zeile 5, die damit als letzte Rückruffunktion zum Zuge kommt. Beim ersten Aufruf von »set:« in Zeile 6 setzt die Methode wahlweise den Radius oder die Kantenlänge des zuvor erzeugten Objekts und fügt es dem Akkumulator-Objekt aus Zeile 3 beziehungsweise den »shapes« -Variablen hinzu. Zeile 7 erzeugt aus dem Rückgabewert der Methode »printAsText« eine Antwortseite.

Um die Beispiel-App in Betrieb zu nehmen, starten die folgenden Kommandos eine Instanz des HTTP-Servers Zinc [6], die auf Port 8080 lauscht:

$ ZnZincServerAdaptor startOn: 8080.$ WAAdmin register: WWWShapes asApplication At: 'shapes'.

Zeile 2 registriert in diesem Szenario die Klasse »WWWShapes« über einen Adapter als HTTP-Handler für die URL »http://localhost:8080/shapes« . Ruft er sie auf, gelangt der User zu der eben entwickelten Anwendung.

Fazit

Trotz der ungewohnten Syntax ermöglicht das Smalltalk-Derivat Pharo einen effizienten Entwicklungsprozess, der Entwickler dabei unterstützt, die notwendigen Strukturen mit Code zu füllen. Werkzeuge wie die Paketverwaltung, der Finder oder der Testrunner erleichtern ihm das Leben noch ein wenig mehr. Doch lässt sich der Programmierer voll auf die Benutzerführung von Pharo ein, kann er aus der IDE noch deutlich mehr herausholen [7].

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 08/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

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