Die Programmiersprache Scala

Ähnliche Dokumente
Scala & Lift. Ferenc Lajko

1 Polymorphie (Vielgestaltigkeit)

Distributed Computing Group

Kapitel 6. Vererbung

Vererbung & Schnittstellen in C#

Kapitel 6. Vererbung

Kapitel 6. Vererbung

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

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

Vererbung. Vererbung von Methoden und Instanzvariablen. Vererbung als Realisierung einer is-a Beziehung.

3 Objektorientierte Konzepte in Java

VIII: Vererbung. Unterklassen einer Klasse. Vererbung von Methoden und Instanzvariablen. Überschreiben von Methoden

3 Objektorientierte Konzepte in Java

Objektorientierte Programmierung. Kapitel 12: Interfaces

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Java Schulung (Java 2 Java Development Kit 5 / 6)

Codegeneratoren mit Xtend , A. Arnold

5.4 Klassen und Objekte

Varietékünstler Die Programmiersprache Scala. Jan Hermanns.

Java: Eine Übersicht. Dennis Giffhorn. Lehrstuhl für Programmierparadigmen Universität Karlsruhe

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Einführung in ActionScript

Funktionale Programmierung

Java Einführung Programmcode

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Java Kurs für Anfänger Einheit 5 Methoden

Repetitorium Informatik (Java)

Objektorientierung: Klassen und Objekte

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2007/2008

Datenbankanwendungsprogrammierung Crashkurs Java

Java für Computerlinguisten

5.6 Vererbung. Vererbung

Probeklausur: Programmierung WS04/05

Software Engineering Klassendiagramme Einführung

Software-Architektur Design Patterns

Android will doch nur spielen. Java Eine kurze Einführung

Algorithmen und Datenstrukturen

1. Übung zu "Numerik partieller Differentialgleichungen"

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Dynamische Sprachen auf der JVM

Generische Typen in Java 1.5. Die Erweiterung der Java Language Specification

5. Tutorium zu Programmieren

Institut fu r Informatik

GetName(), GetName(), GetGeschlecht() und AelterWerden().

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Objects First With Java A Practical Introduction Using BlueJ. Mehr über Vererbung. Exploring polymorphism 1.0

Algorithmen und Datenstrukturen 07

5. Abstrakte Klassen. Beispiel (3) Abstrakte Klasse. Beispiel (2) Angenommen, wir wollen die folgende Klassenhierarchie implementieren:

Vorkurs C++ Programmierung

Java Tipps für Lehrer. Table des matières. Einleitung

Prinzipien Objektorientierter Programmierung

Test zu Grundlagen der Programmierung Leitung: Michael Hahsler. 21. November 2003

Java - Programmierung - Objektorientierte Programmierung 1

Programmierkurs Java

5.5.8 Öffentliche und private Eigenschaften

Objektorientierte Programmierung

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

Objektorientierte Programmierung mit Python Polymorphismus und Vererbung. Eltern

Funktionale Programmierung

C++ - Einführung in die Programmiersprache Polymorphismus und Vererbung. Eltern

5. Abstrakte Klassen

Javakurs 2013 Objektorientierung

Programmieren von Webinformationssystemen

Primitive Datentypen

Ein Blick über den Tellerrand Funktionale Ideen in der praktischen Programmierung

2.4.3 Polymorphie (Wiederholung von Alp2)

Objektorientierte Programmierung. Objektorientierte Programmierung. Klasse. Objekt. Beispiel: Sportfest1. Methode. Eine Einführung mit BlueJ

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

3. Konzepte der objektorientierten Programmierung

Einführung in die C-Programmierung

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Java: Vererbung. Teil 3: super()

Einführung in die. objektorientierte Programmierung

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

Java für C++ Programmierer

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Einfache Rechenstrukturen und Kontrollfluss II

Objektorientierung: Klassen und Objekte

Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ

C# im Vergleich zu Java

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Tutorium Java Ein Überblick. Helge Janicke

Javakurs für Anfänger

Auszug aus. C sharp. Galileo Computing. Ein Service von. Tutorial und Referenz. von Eric Gunnerson

EINI WiMa/LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

Klassenbeziehungen & Vererbung

Objektorientierte Programmierung

Jürgen Bayer. Anonyme Methoden, Lambda-Ausdrücke und Ausdrucksbäume in.net

Alltagsnotizen eines Softwareentwicklers

Große Übung Praktische Informatik 1

Binärbäume. Prof. Dr. E. Ehses,

13. Tutorium zu Programmieren

Programmierkurs Python I

Java Einführung Methoden in Klassen

Programmieren in Java

Transkript:

Veranstaltungsnummer: 18.163 Sommersemester 2008 Dozent: Prof. Dr. Heinz Züllighoven Betreuer: Dr. Axel Schmolitzky Die Programmiersprache Scala Simon Gerlach, Johannes Kuhlmann Ausgewählte Themen der Softwaretechnik 1 Übersicht Historisches Status, Rechtfertigung Eigenschaften Interaktion mit Java Typsystem Syntax Ausgewählte Themen der Softwaretechnik 2 1

Historisches Entwickelt an der École Polytechnique Fédérale de Lausanne (EPFL), Schweiz Forschungsprojekt Schlüsselfigur: Prof. Martin Odersky Verlauf in Entwicklung seit 2001 erstes Release im Januar 2004 Version 2 im März 2006 aktuell ist Version 2.7.1 vom 5.5.2008 Ausgewählte Themen der Softwaretechnik 3 Historisches: Martin Odersky 1989 Doktor an der ETH Zürich Ab 1989 am IBM T. J. Watson Research Center Ab 1991 an der Yale University Ab 1993 Professor an der Uni Karlsruhe und ab 1997 an der University of South Australia Seit 1999 Professor an der EPFL Frühere Arbeiten: Pizza: erweitert Java um Generics, Funktionspointer, Pattern Matching GJ: erweitert Java um Generics, kaum verändert in Java 5 eingegangen Ausgewählte Themen der Softwaretechnik 4 2

Status Stabilität: quite stable and generates stable byte-code that will run successfully on most JREs zahlreiche Paper, sehr ausführliche Dokumentation, viele Blog-Einträge aktive Mailing-Listen, aktive Entwicklung ein bisher 636 Seiten starkes Buch in Arbeit 3 aktuelle Jobangebote im Scala-Wiki Lizenz: BSD-Style Ausgewählte Themen der Softwaretechnik 5 Oderskys Rechtfertigung Aufstieg von Webservices und verteilter Software vergleichbar zur Ablösung der Command-Lines durch GUIs was OO-Sprachen förderte Webservices nutzen verschiedene Sprachen Scala vereint diese Ansätze: Funktional: XML-Verarbeitung Objektorientiert: Geschäftslogik Nebenläufigkeit Statische Typisierung Ausgewählte Themen der Softwaretechnik 6 3

Eigenschaften (1) Scala hat zwei Bedeutungen: italienisch für Treppe für scalable language Die Sprache ist: skalierbar: gleiche Konzepte für kleine und große Teile objektorientiert und funktional Ausgewählte Themen der Softwaretechnik 7 Eigenschaften (2) Jeder Wert ist ein Objekt Jede Operation ist eine Methode Da Zahlen Objekte, sind haben sie Methoden: 1 + 2 * 3 / x kann geschrieben werden als 1.+((2.*(3))./(x)) Gültige Bezeichner können aus Sonderzeichen bestehen, z. B.: ^&<>=!:+*/% Funktionen können in Variablen gespeichert und als Argument an Methoden übergeben werden. Ausgewählte Themen der Softwaretechnik 8 4

Interaktion mit Java Scala läuft auf der JVM Volle Interoperabilität Alle Java-Library-Klassen können importiert werden. java.lang wird automatisch importiert Scala-Klassen können Java-Klassen erweitern. Java Interfaces können implementiert werden. Ausgewählte Themen der Softwaretechnik 9 Typsystem Statisch (Typprüfung zur Übersetzungszeit) Bietet Typinferenz zur Ableitung von Typen ohne explizite Typangabe: var wahr1: Boolean = true var wahr2 = true Subtyp-Polymorphie und Implementationsmehrfachvererbung möglich Ausgewählte Themen der Softwaretechnik 10 5

Typsystem: Überblick Ausgewählte Themen der Softwaretechnik 11 Syntax Basiert stark auf Java und C#, aber: kein Semikolon nach Anweisungen nötig Deklarationen haben die Form name: typ void ist in Scala Unit Methoden mit nur einem Argument können als Infix-Notation geschrieben werden: arg.startswith("-") entspricht arg startswith "-" keine static-member werden nur als Singletons umgesetzt Ausgewählte Themen der Softwaretechnik 12 6

Syntax: Hello, world! Definiert ein Singleton Deklarationen haben die Form name: typ object HelloWorld { def main(args: Array[String]) { println("hello, world!") } } Ruft Java auf: System.out.println(...) GermanDate Ausgewählte Themen der Softwaretechnik 13 Syntax: Ausdrücke (1) Simple Berechnungen, die ein Ergebnis und einen Typ besitzen 87 + 145 => Int: 232 "hello" + " world!" => java.lang.string: "hello world! Können benannt werden: Schlüsselwort def def radius = 10 => radius: Int Auswertung der rechten Seite erst bei Benutzung des Namens Ausgewählte Themen der Softwaretechnik 14 7

Syntax: Ausdrücke (2) Sofortige Auswertung mit Schlüsselwort val val x = 12 * 15 Ablauf einer Auswertung: Linksseitigste Operation auswählen Ihre Operanden auswerten Den Operator auf die Operanden anwenden Ende, wenn ein Wert erreicht ist Beispiel einer Auswertung: (2 * pi) * radius => (2 * 3.141592653589793) * radius => 6.283185307179586 * radius... Ausgewählte Themen der Softwaretechnik 15 Syntax: Funktionen und Parameter Mittels def lassen sich auch Funktionen mit oder ohne Parameter definieren Parameter stehen in Klammern und haben die übliche Form name: typ Hat eine Funktion keine Parameter, können die Klammern weggelassen werden Aber: ein leeres Klammerpaar muss beim Aufruf jedoch immer angegeben werden Ausgewählte Themen der Softwaretechnik 16 8

Syntax: Auswertung von Funktionen (1) Auswertung erfolgt standardmäßig über call-by-value: def sumofsquares(x: Double, y: Double) = square(x) + square(y) sumofsquares(3, 2+2) => sumofsquares(3, 4) => square(3) + square(4) => 3 * 3 + square(4) => 9 + square(4) => 9 + 4 * 4 => 9 + 16 => 25 Ausgewählte Themen der Softwaretechnik 17 Syntax: Auswertung von Funktionen (2) Steht einem Parameter-Typ ein => voran, wird jedoch für diesen Parameter call-by-name angewendet: def sumofsquares(x: Double, y: => Double) = square(x) + square(y) sumofsquares(3, 2+2) => square(3) + square(2+2) => 3 * 3 + square(2+2) => 9 + square(2+2) => 9 + (2+2) * (2+2) => 9 + 4 * (2+2) => Vorteil: Die Auswertung wird verzögert, bis sie benötigt wird. Ein nicht benötigter Parameter wird auch nicht ausgewertet. Ausgewählte Themen der Softwaretechnik 18 9

Syntax: Fallunterscheidungen if-else-konstrukt Syntax wie in Java Unterschied: Java erlaubt nur die Auswahl zwischen zwei Anweisungen Scala erlaubt auch die Auswahl zwischen zwei Ausdrücken if-else in Scala also auch wie...?... :... in Java Beispiel: def abs(x: Double) = if (x >= 0) x else -x Ausgewählte Themen der Softwaretechnik 19 Syntax: Blöcke Werden mit geschwungenen Klammern umschlossen: {... } Gelten als Ausdruck und haben einen Wert. Der Wert wird durch den letzten Ausdruck im Block definiert (kein explizites return nötig). Newton Ausgewählte Themen der Softwaretechnik 20 10

Syntax: Funktionen höherer Ordnung Nehmen eine andere Funktion als Parameter oder geben eine Funktion als Ergebnis zurück. Beispiel: def sum(f: Int => Int, a: Int, b: Int): Int = if (a > b) 0 else f(a) + sum(f, a + 1, b) Ausgewählte Themen der Softwaretechnik 21 Syntax: Anonyme Funktionen Ausdruck, der zu einer Funktion ausgewertet wird Werden ohne Namen definiert: (x: Int) => x * x Können immer auch durch normale Funktionsdefinitionen ersetzt werden => nur syntaktischer Zucker HighOrder Ausgewählte Themen der Softwaretechnik 22 11

Syntax: Klassendefinition Schlüsselwort class Primärer Konstruktor wird im Kopf der Klasse angegeben Member der Klasse können auf private gesetzt werden Erzeugen eines Exemplars mit Schlüsselwort new Ausgewählte Themen der Softwaretechnik 23 Syntax: Vererbung implizite Superklasse: scala.scalaobject Die Unterklasse erbt alle Member der Oberklasse Überschreiben explizit mit Schlüsselwort override Wenn Klasse A Klasse B erweitert, können Exemplare von Klasse A überall verwendet werden, wo Exemplare von Klasse B erwartet werden. Rational Ausgewählte Themen der Softwaretechnik 24 12

Syntax: Abstrakte Klassen Analog zu Java: Schlüsselwort abstract Können abstrakte Member enthalten Es können keine Exemplare erzeugt werden. Ausgewählte Themen der Softwaretechnik 25 Syntax: Mixins Ähnlich den Interfaces in Java Dürfen aber Code enthalten Erlauben das Beimischen von Funktionalität zu einer Klasse und Implementationsmehrfachvererbung. Date Ausgewählte Themen der Softwaretechnik 26 13

Syntax: Case Classes Schlüsselwort case wird class vorangestellt Case classes haben einige Besonderheiten: 1. Implizite Konstruktorfunktion mit demselben Namen wie die Klasse (kein new mehr nötig beim Aufruf) 2. Automatische Generierung von tostring, equals und hashcode 3. Automatische Generierung von Gettern für Konstruktorargumente 4. Case classes erlauben die Konstruktion von Mustern (engl.: pattern), die sich auf den Konstruktor der case class beziehen. Ausgewählte Themen der Softwaretechnik 27 Syntax: Pattern matching Ähnlich einer switch-anweisung in Java Wird mittels der Methode match aufgerufen Allgemein: Pattern werden aus folgenden Anweisungen zusammengebaut: Case class Konstruktoren, deren Argumente wieder Pattern sind. Pattern Variablen Dem Wildcard Pattern _ Literale: true, abc Konstanten Expr (target) Ausgewählte Themen der Softwaretechnik 28 14

Weitere Sprachbestandteile XML: Bestandteil der Sprache Actors und Messages: ähnlich Erlang Unterstützung von Nebenläufigkeit Tupel und Listen For-Comprehensions implicit Funktionen und Parameter Refinements und vieles mehr... Ausgewählte Themen der Softwaretechnik 29 Ende Vielen Dank für die Aufmerksamkeit! Kontaktdaten: Simon Gerlach Johannes Kuhlmann 4gerlach@informatik.uni-hamburg.de 4kuhlman@informatik.uni-hamburg.de Ausgewählte Themen der Softwaretechnik 30 15

Quellen Odersky, Martin: A Brief History of Scala, http://www.artima.com/weblogs/viewpost.jsp?thread=163733 (abgerufen 30.5.2008), 9.6.2006. Odersky, Martin: Pimp my Library, http://www.artima.com/weblogs/viewpost.jsp?thread=179766 (abgerufen 30.5.2008), 9.10.2006. Odersky, Martin: The Scala Experiment, Google Tech Talk, http://lampwww.epfl.ch/~odersky/talks/google06.pdf (abgerufen 30.5.2008), 2006. Odersky, Martin: Scala Rationale, http://www.scala-lang.org/docu/files/scalarationale.pdf (abgerufen 30.5.2008), 13.6.2007. Odersky, Martin: The Scala Language Specification, Version 2.7 (Draft), 2008. Odersky, Martin, Phillipe Altherr et al.: An Overview of the Scala Programminig Language, 2006. Scala Wiki, http://scala.sygneca.com/ (abgerufen 30.5.2008), 2008. Schinz Michel und Philipp Haller: A Scala Tutorial for Java programmers, Version 1.2, http://www.scalalang.org/docu/files/scalatutorial.pdf (abgerufen 30.5.2008), 2008. Odersky, Martin: Scala By Example, Draft, http://www.scala-lang.org/docu/files/scalabyexample.pdf (abgerufen am 19.05.2008), 05.05.2008 The Scala Programming Language, http://www.scala-lang.org/ (abgerufen 30.5.2008), 2008. Upadhya, Revati: Steps (Titelbild), http://www.sxc.hu/photo/857689 (abgerufen 30.5.2008), 2007. Venners, Bill, Martin Odersky und Lex Spoon: First Steps to Scala, http://www.artima.com/scalazine/articles/steps.html (abgerufen 30.5.2008), 9.5.2007. Ausgewählte Themen der Softwaretechnik 31 16