Smalltalk für Quereinsteiger Clemens Hoffmann IT-Berater Wen spricht der Vortrag an? • Entwickler mit Programmiererfahrung in C++ oder Java auf dem Weg zu neuen Ufern • Projektleiter, die Alternativen zu bestehenden Entwicklungssystemen kennenlernen möchten • Neugierige Menschen, die wissen wollen, was Smalltalk eigentlich ist Was spricht der Vortrag an • Was ist Smalltalk VisualWorks 5i, Philosophie, Architektur • Wie arbeite ich mit Smalltalk Werkzeuge, Design, Teams • Was habe ich für ein Umfeld Schnittstellen, Web, Verteilte Systeme Wie startet man eine Revolution VisualWorks - Historie 1972 Entstanden im XEROX PARC 1981 Going Public 1987 Gründung Firma Georg Heeg 1988 Gründung ParcPlace Systems 1990 ObjectWorks 1992 VisualWorks 1999 Cincom übernimmt VisualWorks VisualWorks - Definition VisualWorks ist wie eine Skriptsprache • • • • mächtig hoch skalierbar extrem stabil objektorientiert ohne die gängigen Einschränkungen • • • • Performanz Komplexität Unübersichtlichkeit Wartbarkeit VisualWorks - Philosophie Keine Typen Das Verhalten (die Menge der verfügbaren Methoden) definiert ein Objekt. Automatische Speicherverwaltung Nicht mehr referenzierte Objekte werden automatisch abgeräumt Reflexivität Smalltalk ist in Smalltalk geschrieben Klasse, Methode, Werkzeuge, Compiler, ... VisualWorks - Philosophie Alles ist ein Objekt Jede Komponente im einem VisualWorks System ist ein Objekt, das mit anderen Objekten interagiert. “Lebende“ Objekte Alle Objekte im System “leben“ in einem gemeinsamen Objektraum. Dieser Raum wird als Image gespeichert und existiert nach einem Neustart des Images exakt so weiter, wie er gespeichert wurde VisualWorks - Philosophie Uniformität Uniformer Zugriff auf alle Konstrukte im Image. Erweiterbarkeit Alle Klassen können in sich erweitert werden Wissensbasis Der gesamte Sourcecode des Systems kann direkt eingesehen werden. Java - Architektur Bibliothek in Verzeichnisstruktur und jar-Dateien Werkzeuge Laufzeitumgebung und Anwendung VM VM VM VM VM VM Windows Linux Macintosh Sun IBM HP VisualWorks - Architektur Image Werkzeuge Anwendung(en) Bibliothek VM Windows Linux Macintosh Sun IBM HP Werkzeuge - PackageBrowser Kategorien Klassenliste Klassendefinition Protokolliste Methodenliste Programmierzyklus - Java Source *.java kompilieren Kompilierfehler Laufzeit- oder Logikfehler Laufzeitumgebung Binärcode Binärcode Binärcode *.class Binärcode *.class Binärcode *.class *.class *.class Laden und testen Programmierzyklus - VW Klassendefinition Methodendefinition Syntaxfehler Syntaxfehler Class Erstellen CompiledMethod Image Speichern Instant kompiliert und verfügbar Design Anforderungsanalyse Systemanalyse Use-Cases Use-Case-Diagramm Klassendiagramme Aktivitätsdiagramme Klassendiagramme Design Sequenzdiagramme Implementierung Test Quellcode Anwendung(en) Testprotokolle Design Smalltalk (VisualWorks) und UML Anforderungsanalyse Systemanalyse Design Implementierung Test Roundtrip Design Keine explizite Trennung zwischen Design und Implementierung Iterative (experimentelle) Implementierung • Verfeinerung von Design nach Realisierung • einfache Refaktorisierung (automatisiert mit RefactoringBrowser) • direkt testbar (SUnit-Test) Teams - Java Entwickler Werkzeuge VM Laufzeitumgebung Entwickler Werkzeuge VM Laufzeitumgebung Bibliothek in Verzeichnisstruktur und jar-Dateien Versionsverwaltung (SourceSave, PVCS, CVS, RCS, ...) Teams - VisualWorks Entwickler ChangeSet VM Image Entwickler VM Image Parcels Teams - VisualWorks Entwickler VM Image Oracle DB2 MS-SQL PostgreSQL Access Entwickler VM StORE-Repository Image Betriebssystemschnittstelle *.h *.h *.h Datenbankenschnittstellen Java VisualWorks SUN JDO Toplink OR-Mapping ObjectLens GLORP JDBC Datenbankschnittstelle EXDI Database Database Web - Basisdienste • HTTP Client • FTP Client • IMAP Client • IMAP Mailbox • POP3 Client • POP3 Mailbox • SMTP Client • URI / URL Support • XML Support Web - Smalltalk ServerPages <?xml version="1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <% values := OrderedCollection new. count := (request anyParameterValueAt: 'count') asNumber. 1 to: count do: [:i | values add: i factorial]. %> <html> <head> <title>Computed factorials</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> List of all factorials up to <%=count%> <p> <% values do: [:item | response write: item key printString. response write: '! = '. response write: item value printString. response write: '<br>‘. Response cr]. %> </body> </html> Web - Smalltalk ServerPages Web - Smalltalk ServerPages Web - Smalltalk ServerPages <?xml version="1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <%@ taglib uri="file:formel.tld" prefix="formel" %> <html> <head> <title>Computed factorials</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> List of all factorials up to <formel:getParameterValue parameter="count" /> <p> <formel:factorial parameter="count" /> <p> </body> </html> Web - Smalltalk ServerPages Web - Smalltalk ServerPages Web - Smalltalk Servlets doPost: aServletRequest response: aServletResponse HTTPServlet HTTP Request (POST) Web Server service: aServletRequest response: aServletResponse VisualWave ApplicationServer Marty Hall: Core Servlets and JavaServer Pages ToyzInput Web - Application Server Web Server (Apache, IIS, ...) HTTP Request CGI Fast CGI ISAPI HTTP Request TinyHTTP Server VisualWave ApplicationServer Web-Services VisualWorks als Web-Services Client UDDI Request WSDL Response UDDI Server SOAP Request SOAP Response SOAP Server Distribution - CORBA - RMI Java CORBA IBM Component Broker Borland VisiBroker IONA OrbixWeb ORBacus ... Portable Object Adaptor RMI Java to Java Kommunikation VisualWorks CORBA Distributed Smalltalk (DST) Basic Object Adaptor OpenTalk Smalltalk to Smalltalk Kommunikation CORBA Remote Browsing Remote Debugging Remote Development