SmallTalk - Eine kurze Einführung

Ähnliche Dokumente
15. Smalltalk 15.1 Allgemeines 15.2 Klassen, Objekte, Programme 15.3 Nachrichten 15.4 Blöcke 15.5 Metaklassen 15.6 Klasse Object

Smalltalk. Gespräche über alltägliche, allgemeine und unwichtige Dinge. Smalltalk ist die Kunst zu reden, ohne zu denken.

Smalltalk (Programmiersprache)

Methoden (fortgeschritten) in C# - 1

Short Introduction to C# C# (C SHARP) Microsofts Antwort auf Java

Smalltalk vs. Java c Chris Burkert Smalltalk versus Java

Einführung in die objektorientierte Programmierung. mit Squeak

TEIL I: OBJEKTORIENTIERUNG UND GRUNDKURS JAVA GRUNDLAGEN DER PROGRAMMIERUNG... 4

Squeak verwenden. Neues Projekt starten. Werkzeuge. Einführung in die objektorientierte Programmierung

Algorithmen und Datenstrukturen

Programmieren mit Java

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Ruby. Programmieren mit Zucker. Thomas Kühn

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

II.1.1. Erste Schritte - 1 -

Einführung in die Programmierung mit Java

2.13 Vererbung. Rainer Feldmann Universität Paderborn Technische Informatik für Ingenieure (TIFI) WS 09/ Article

C++ - Eine Ubersicht fur Java-Programmierer

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Objektorientierte Programmierung

Objektorientiert in C++

Programmieren von Webinformationssystemen

Einführung in die Informatik

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Vererbung. Martin Wirsing. Ziele. Vererbung

Praktikum Compilerbau Sitzung 9 Java Bytecode

Programmieren I. Prinzipieller Ablauf. Eigenschaften von JAVA. Source-Code Javac Bytecode. Java Virtual Machine (Java, Browser, Appletviewer)

Java I Vorlesung Generics und Packages

Crashkurs Python und Sage U23 Krypto-Mission

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

AuD-Tafelübung T-B5b

THE GO PROGRAMMING LANGUAGE. Michael Karnutsch & Marko Sulejic

Klausur Grundlagen der Programmierung

Elementare Konzepte von

Praktische Anwendung von Metaklassen

Programmierkurs Python I

Programmieren im Web 2.0

Werkzeuge zur Programmentwicklung

5. Tutorium zu Programmieren

Seminar Scala SS2010, Einführung. R. Schiedermeier Fakultät 07 für Informatik und Mathematik

Ruby. Erfinder: Yukihiro Matsumoto Japan 1993 Einflüsse: Smalltalk Perl Eigenschaften: Objektorientiert Interpretiert

Programmieren 3 C++ Prof. Peter Sommerlad Fredy Ulmer

Einführung in C ++ und die Objektorientierte Programierung

Probeklausur: Programmierung WS04/05

SQLJ. Standardisierte Java-DB. DB-Schnittstelle. Spezifikationen. Oracle, IBM, Informix, Sybase,, Tandem, Sun, Microsoft stehen dahinter

Java: Der Einstieg. Algorithmen und Datenstrukturen II 1

Smalltalk Eine objektorientierte Programmiersprache

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes

Gebundene Typparameter

Java Einführung Collections

Vorlesung Informatik II

Einführung in Javadoc

Einführung in die Programmierung mit Go

Programmieren I. Kapitel 5. Kontrollfluss

Programmieren von Webinformationssystemen

Python 2. Vorlesung Computerlinguistische Techniken Alexander Koller. 28. Oktober 2014

Unterlagen. CPP-Uebungen-08/

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

11. Funktionale Programmierung Advanced Programming Techniques Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Selda Garip MatrikelNr.: Kennzahl: 533

Java-Schulung Grundlagen

Ruby - Objektorientiertes Scripting, aber richtig!

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete! 4. Ausnahmen (Exceptions) II.4.

Objektorientiertes Programmieren in C++

Die freie Programmiersprache Python mit Beispielen für ihren praktischen Einsatz. Python User Group Köln

Primitive Datentypen

To know recursion, you must first know recursion. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel 17 1

System.out.println("TEXT");

Spec# Einführung. Formale Software-Entwicklung Seminar SS 07 Universität Karlsruhe Hilal Akbaba

Java I Vorlesung Vererbung und Sichtbarkeit

Programmieren in C++ Überladen von Methoden und Operatoren

Repetitorium Informatik (Java)

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Die Klasse Collection (gb) implementiert eine Hash-Tabelle, deren Elemente aus einem Wert-Schlüssel-Paar

Programmierkurs Java. Vererbung. Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck

Programmentwicklung ohne BlueJ

Tag 4 Repetitorium Informatik (Java)

Datenaustausch mit JSON

Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe

Klassendefinitionen verstehen

Objektorientierte Programmierung mit Java

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Programmieren I. Martin Schultheiß. Hochschule Darmstadt Wintersemester 2010/2011

Hello world. Sebastian Dyroff. 21. September 2009

Grundkurs Software- Entwicklung mit C++

Einführung und Vorstellung: Grundlagen der Java- Programmierung. paluno

Java I Vorlesung 6 Referenz-Datentypen

Stack stack = new Stack(); stack.push ("Würstchen"); string s = (string) stack.pop(); Console.WriteLine (s);

Einführung in die Programmierung mit Java

Transkript:

SmallTalk - Eine kurze Einführung Andreas Lochbihler Lehrstuhl Programmierparadigmen Universität Karlsruhe 15. Juni 2009

SmallTalk Entwickelt seit Anfang der 70er bei XEROX PARC Alan Kay, Dan Ingalls, Adele Goldberg,... Beeinflußt von SIMULA Smalltalk-80 (1980) Programmiersprache und Entwicklungsumgebung Zahlreiche kommerzielle Varianten Standardisiert als ANSI Smalltalk 1998 Im Folgenden: VisualWorks 7.5 von Cincom

Eigenschaften Alles ist ein Objekt : Strings, Integers,... sind vollwertige Objekte Objekte und Botschaften Klassen und Vererbung Garbage Collection dynamisch typisiert

Das Hello World Programm Hello, World! printon: Transcript. Hello, World! Erzeugt ein Objekt der Klasse String mit dem entsprechenden Text printon sendet die Botschaft printon an das vorangestellte Objekt mit Parameter Transcript.. Ende des Ausdrucks

Methodenaufrufe anobject message. Dem Object anobject wird die Botschaft message geschickt. anobject selector. Unäre Botschaft. 3 negated. anobject selector: aparameter. Binäre Botschaft. 3 raisedto: 5. anobject operator aparameter. 3 + 6. anobject select1: param2 select2: param2. Schlüsselwort-Botschaft. 3 between: 5 and: 10. anobject message1; message2; message3. Aufruf mehrerer Methoden desselben Objekts. 3 negated; + 10; between: 5 and: 20. liefert false 3 negated + 10 between: 5 and: 20. ergibt true

Arithmetik > 42 printon: Transcript. 42 > 6 * 8 printon: Transcript. 48 > 2 + 6 * 8 printon: Transcript. 64 > 6 + 8 negated printon: Transcript. -2 Arithmetische Operatoren sind normale Messages Unär vor Binär vor Schlüsselwort-Message

Variablen > Smalltalk at: #x put: 0. > x := 5. > Smalltalk at: #y put: 0. > y := 7. > x * y printon: Transcript. 35 Smalltalk ist das System Dictionary, eine Art Verzeichnis aller Variablen.

Datenstrukturen: Arrays > x := Array new: 20. > (x at: 1) printon: Transcript. nil > x at: 1 put: 5; at: 2 put: 7. > (x at: 1) printon: Transcript. 5 Keine eigene Syntax

Datenstrukturen: Mengen > x := Set new. > x add: 5. > x add: 7. > x printon: Transcript. Set (7 5) > x add: foo. > x printon: Transcript. Set (7 foo 5) > x add: 3; add: 9; add: bar. > x printon: Transcript. Set (3 5 bar 7 9 foo )

Überladene Methoden Bei Überladung in Java/C++: gleicher Methodenname, verschiedene Parametertypen In Smalltalk ohne statische Typen nicht möglich Alternative: Schlüsselwortbotschaft als mehrteiliger Methodenname Identifikation über Namen der Parameter > x set: 1 at: 5. > x set: 1 from: 5 to: 7. Java-Äquivalent: x.set(1,5); x.set(1,5,7); Deutlich erhöhter Dokumentationswert!

Eigene Klassen Smalltalk.Examples defineclass: #Account superclass: #(Core.Object) indexedtype: #none private: false instancevariablenames: balance classinstancevariablenames: imports: category: (none) initialize balance := 0. ^self > x := Account new. > x printon: Transcript. an Examples.Account

Schönere Ausgabe Methoden werden in Protokollen gruppiert: printing printon: stream super printon: stream. stream nextputall: with balance:. balance printon: stream > x printon: Transcript. an Examples.Account with balance: 0

Methoden-Definition withdraw: amount balance := balance - amount. > x withdraw: 10. > x printon: Transcript. an Examples.Account with balance: -10

Kontrollstrukturen: IF withdraw: amount (amount < 0) iftrue: [ ^self error: no no no ]. balance := balance - amount > x withdraw: -100. Unhandled exception: no no no Examples.Account(Object)>>error: Examples.Account>>withdraw: UndefinedObject>>unboundMethod UndefinedObject(Object)>>performMethod:arguments: UndefinedObject(Object)>>performMethod:

Kontrollstrukturen: WHILE withdraw2: amount a a := amount. [ a > 0 ] whiletrue: [ balance := balance - 1. a := a - 1 ].

Code-Blöcke als Objekte callback: handler handler value: balance. > x callback: [ :b balance is printon: Transcript. b printon: Transcript ] balance is 5

Interaktive Erweiterung bestehender Klassen > y := Account new. > y greet. Unhandled Exception: Message not understood: #greet... greet Hello, World! printon: Transcript. > y greet. Hello, World!

Erweiterung bestehender Klassen > x isinteger printon: Transcript. false > 3 isinteger printon: Transcript. true > x isaccount printon: Transcript. Unhandled Exception: Message not understood: #isaccount...

Reflektion > x class printon: Transcript. Account > x class superclass printon: Transcript. Object > 3 class printon: Transcript. SmallInteger > x class class printon: Transcript. Examples.Account class > x class class class printon: Transcript. Metaclass > x class class class class printon: Transcript. Metaclass class > x class class class class class printon: Transcript. Metaclass

Entwicklungsumgebung üblich: Quelltexte werden im Klassenbrowser eingegeben Bytecode und virtuelle Maschine Interaktiver Interpreter Quelltexte sind offen und können live geändert werden Gesamter Systemzustand kann als Image gespeichert werden

Zusammenfassung Alles ist ein Objekt Objekte und Botschaften Einfach strukturiert, wenig Syntax Einheitlichkeit Arbeit am Live-System Relevant in der Industrie

Weiterführendes VisualWorks von Cincom http://www.cincomsmalltalk.com/userblogs/cincom/ blogview?content=vwfactsheet GNU Smalltalk http://www.gnu.org/software/smalltalk/smalltalk.html Dan Ingalls Design Principles Behind Smalltalk (1981) http://users.ipa.net/~dwighth/smalltalk/ byte_aug81/design_principles_behind_smalltalk.html Wilf LaLonde I can Read C++ and Java But I can t Read Smalltalk (2001) http://www.eli.sdsu.edu/courses/spring01/ cs635/readingsmalltalk.pdf