Scala

Scala für OO-Programmierer

Die Programmiersprache Scala (scalable language) etabliert sich immer mehr bei Projekten, in denen tratitionell Java ( oder auch .Net ) eingesetzt wurde. Scala läuft auf der Java VM, und ist zu Java bytecode-kompatibel. Im Ergebnis kommt Scala dabei oft mit der Hälfte odar gar einem Drittel des Codes aus, und erhöht die Produktivität der Entwickler spürbar.

Scala erreicht das, in dem es viele moderne Programmierkonzepte integriert. Es erlaubt funktionale und objektorientierte Programmierung. Der Sprachumfang kann mit selbstdefinierten Sprachelementen erweitert werden --> Domain Specific Language (DSL). Und sogar der Compiler kann (relativ einfach) um neue Funktionalitäten erweitert werden.

Weitere Features:

  • Nebenläufigkeit sowohl durch Threads der Java-Klassenbibliothek als auch über eine Scala-eigene Aktoren-Implementierung,
  • generische Klassen mit Unterstützung von Kovarianz und Kontravarianz,
  • statisch typisiert mit Typinferenz (der Typ eines Ausdrucks wird automatisch aus seinem Kontext bestimmt),
  • Pattern Matching,
  • strikte und lazy Auswertung funktionaler Ausdrücke,
  • Currying (ein Funktionsaufruf mit zu wenig Parametern, ist eine unbenannte Funktion, der man später die fehlenden Parameter übergeben kann),
  • Closures (eine Funktion kann auf den Kontext ihres Aufrufs zugreifen),
  • XML-Unterstützung im Sprachumfang,
  • Implicits (automatische Umwandlung oder Ergänzung unpassender oder fehlender Ausdrücke).

Scala unterstützt eleganten und kompakten Source-Code und eignet sich sowohl für den Bau großer, erweiterungsfähiger Systeme, als auch auch für einfache Skripte (Scala besitzt eine interaktive REPL-Konsole, Read-Evaluate-Print Loop).

Der Scala-Compiler kann Code für die Java Virtual Machine (JVM) und für die .NET VM erzeugen. Ein Scala-Programm kann belibige Java-Klassen, z.B. die Klassen der Java-Standardbibliothek oder eigener Bibliotheken nutzen. Umgekehrt kann Java-Code auf Scala-Code zugreifen, wenn man sich in Scala auf bestimmte Java-Sprachmittel beschränkt. In Scala entwickelte Anwendungen laufen problemlos in der Java-Virtual-Machine (JVM) und lassen sich so in bestehende Java-Projekte integrieren. Ähnliches gilt für .NET.

Scala ist freie und offene Software unter einer eigenen, BSD ähnlichen Lizenz (weniger restriktiv als GPL). Die Sprache wurde ab 2001 im Labor für Programmiermethoden an der École polytechnique fédérale de Lausanne (EPFL) unter Leitung von Martin Odersky (Java Generics) als "Nachfolger" von Java erschaffen und wird aktiv weiterentwickelt. Aktuell (ab 2011) wird intensiv an der Unterstützung von Multicore- und Multiprozessor-Systemen gearbeitet.

Trainer und Dozenten

Michael Kerkhoff hat in Münster Dipl. Mathematik mit Nebenfach Informatik studiert. Seit 1998 gibt er OO Kurse bei verschiedenen Firmen. Er arbeitet freiberuflich seit 1992.

Voraussetzungen

Der Sprachkern ist zwar einigermaßen kompakt gehalten, aber trotzdem ist die Sprache wesentlich komplexer und nicht so leicht zu erlernen wie z.B. Java.

Daher setzt der Kurs solide Kenntnisse der Objektorientierung und mindestens einer objektorientierten Sprache voraus, am besten solide Grundkenntnisse in Java. Einige der "höheren" Scala-Features werden nämlich mit den entsprechenden Java-Konstrukten verglichen. (Die class-Dateien, die vom Scala-Compiler erzeugt werden, können mittels eines Decompilers nach Java "zurückübersetzt" werden).

Kenntnisse funktionaler Sprachen werden dagegen nicht vorausgesetzt. (Kenntnisse in Scala sind ebenfalls nicht erforderlich).

Inhalt

Scala besitzt eine umfangreiche Standardbibliothek. Der Kurs beschäftigt sich aber mit den Sprach-Grundlagen und gibt keinen Überblick der Scala-Standardbibliothek, sondern behandelt nur einige ihrer zentralen Elemente!

Grundlagen

  • main-Funktion
  • vals & vars
  • In- & Output
  • Kontrollstrukturen
  • elementares Exception-Handling mit try-catch-finally
  • elementare Einführung in Arrays und ArrayBuffers
  • elementare Einführung in Lists und ListBuffers

Objekte

  • Attribute
  • Methoden
  • Überladen von Methoden
  • Default-Werte für Parameter
  • Namens-Parameter
  • Varargs
  • Lazy Parameter Evaluation
  • lazy vals versus defs
  • Geschachtelte Methoden
  • Closures

Klassen

  • Attribute
  • Getter und Setter
  • Konstruktoren
  • Konstruktoren mit vars
  • Konstruktoren mit vals
  • Hilfskonstruktoren
  • Methoden
  • Assoziationen
  • Geschachtelte Klassen

Vererbung

  • Konstruktoren
  • Hilfskonstruktoren
  • Polymorphie
  • Dynamisches Binden
  • Abstrakte Methoden
  • Template-Methoden
  • Die toString-Methode
  • Die Basisklassen von Scala

Traits

  • Ad-hoc Traits
  • Observer
  • technische Details
  • Linearisierung

Objektorientierung - Erweiterungen

  • Dynamische Typabfrage und Downcast
  • equals, ==, eq und ne
  • Etwas und Nichts
  • Ableitung von Objekten
  • Companion Objects
  • Objects als Factories
  • Implizite Typ-Umwandlungen
  • Case Klassen
  • Case Klassen und Pattern matching
  • Tuples
  • Enums

Parametrisierte Typen

  • Bounds
  • Geschachtelte Typparameter
  • Kovarianz und Kontravarianz
  • Typparametrisierte Methoden

Operatoren

  • Binäre Operatoren
  • Unäre Operatoren
  • Präzedenz
  • Assoziativität

Funktions-Objekte

  • Funktionsobjekte in Java
  • Funktionsobjekte für class-Methoden
  • Funktionsobjekte für object-Methoden
  • Ko- und Kontravarianz
  • Einige Beispiele
  • Anonyme Funktionen
  • Abgeleitete Funktionsobjekte
  • Partielle Funktionen
  • Curry

Rekursion

Beispiel-Anwendungen

  • Array
  • verkettete Liste
  • einfacher Parser

External DSL

  • Beispiel einfaches SQL-Select