Programmierparadigmen und Sprachen

Ähnliche Dokumente
Die Programmiersprache Scala

Praktische Informatik 3: Funktionale Programmierung Vorlesung 13 vom : Scala Eine praktische Einführung

Praktische Informatik 3: Funktionale Programmierung Vorlesung 13 vom : Scala Eine praktische Einführung

Scala: Klassen, Methoden und Objekte. von Simon Lerch

Ausdrücke in Scala. Funktionale Programmierung. Christoph Knabe FB VI

Vererbung und Traits

Programmieren in Java

Scala. Funktionale (Zustandslose) Objekte

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

Scala & Lift. Ferenc Lajko

Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

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

Funktionale Programmierung. Frank Adler

Einleitung Nutzung der Standard Kontrollstrukturen if else, for, do while, while, match, try catch Spezielle Kontrollstrukturen

Methoden und Funktionen in Scala

Algorithmen und Datenstrukturen

Web-Techniken Einführung in JavaScript

Gliederung der Folien

Datenstrukturen / Container in Java

Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen. J. W. v. Goethe.

1 Klassen und Objekte

II.4.5 Generische Datentypen - 1 -

Alles außer Java! JVM-Sprachen sagen Happy Birthday

II.4.2 Abstrakte Klassen und Interfaces - 1 -

OCP Java SE 8. Lambda

Methoden (fortgeschritten) in C# - 1

Grundlegende Datentypen

Gliederung. n Teil I: Einleitung und Grundbegriffe. n Teil II: Imperative und objektorientierte Programmierung

Informatik II Übung 06. Benjamin Hepp 5 April 2017

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Übergang von funktionaler zu OOP. Algorithmen und Datenstrukturen II 1

Die Definition eines Typen kann rekursiv sein, d.h. Typ-Konstruktoren dürfen Elemente des zu definierenden Typ erhalten.

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Vorkurs Informatik WiSe 15/16

Programmierkurs Java

Universität Karlsruhe (TH)

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Funktionale Programmierung Grundlegende Datentypen

float: Fließkommazahl nach IEEE 754 Standard mit 32 bit

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Validation und Quick Fixing mit Xtend. 3. Dezember 2014

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Funktionale Programmierung ALP I. Funktionen höherer Ordnung SS Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

string: Beispiele: Test, test, `Seitentitel: ${document.title}`

Algorithmen und Datenstrukturen II

4. Vererbung Die Klasse Object. Die Klasse Object

12 Abstrakte Klassen, finale Klassen und Interfaces

Konzepte von Programmiersprachen

Generische Datenstrukturen

Objektorientierte Programmierung

Java Methoden. Informatik 1 für Nebenfachstudierende Grundmodul. Kai-Steffen Hielscher Folienversion: 1. Februar 2017

Objekt-Funktionale Programmierung. am Beispiel von SCALA. Thorsten Jolitz

Groovy für Java Programmierer. 20. Juli Stefan Kolatzki

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete. II.4.2 Abstrakte Klassen und Interfaces - 1 -

Klausur: Java (Liste P)

Methoden und Wrapperklassen

Funktionale Programmiersprachen

Java Grundlagen 2 - OOP

Polymorphie. 15. Java Objektorientierung II

Ich liebe Java && Ich liebe C# Rolf Borst

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

Polymorphie. 15. Java Objektorientierung II

12) Generische Datenstrukturen

Funktionales Programmieren mit objektorientierten Sprachen

Musterlösung Stand: 5. Februar 2009

Transkript:

Fakultät Informatik Institut für Software- und Multimediatechnik Professur Softwaretechnologie Programmierparadigmen und Sprachen Scala Paul Henke Dresden, 07.05.2009

Gliederung Hello World Scala? Features Demo TU Dresden, 07.05.2009 Scala Folie 2 von 21

Hello World object HelloWorld { def main(args: Array[String]) { println("hello, world!") TU Dresden, 07.05.2009 Scala Folie 3 von 21

Scala? Scalable Language wird von Martin Odersky (EPFL, Schweiz) seit 2001 entworfen und entwickelt statisch getypte Multiparadigmensprache verknüpft Objektorientierte Programmierung mit Funktionaler läuft auf der JVM sowie in.net vollständig in die jeweilige Umgebung integriert aktuelle Version 2.7.4 TU Dresden, 07.05.2009 Scala Folie 4 von 21

Features Klassen Einfach Vererbung Mixins (durch Traits) Alles wird als Objekt behandelt Type Inference XML als nativer Datentyp Schönfinkeln Partial Application First Class und Higher Order Functions Closures Structural Typing Pattern Matching Tupel Actors und Messages TU Dresden, 11.05.2009 Scala Folie 5 von 21

Syntax Semikolons unnötig keine Operatoren Methoden können Infix geschrieben werden Klammern können bei Methoden mit maximal einem Parameter weggelassen werden 1 + 2 statt 1.+(2) geeignet für Domain Specific Languages (durch viele Freiheiten in der Syntax) z.b. ScalaTest Framework collection should contain element 1.0 result should be >= 0 TU Dresden, 07.05.2009 Scala Folie 6 von 21

Klassenhierarchie TU Dresden, 07.05.2009 Scala Folie 7 von 21

Klassen class Person(name:String, age:int) { def Name:String = name def Age:Int = age var city:string = "" def sayhi { println("hi") override def tostring():string = name + " (" + age + ")" var p:person = new Person("Horst", 20) println(p.name) // Horst println(p) // Horst (20) p.sayhi() p.city = "Dresden" // Hi TU Dresden, 07.05.2009 Scala Folie 8 von 21

Singletons Objects es gibt keinen static Modifier object Math { def PI:Double = 3.14159 def pow(b:long,e:long) = { def sin(a:double) = { def cos(a:double) = { /*... */ println(math.pow(2,8)) // 256 TU Dresden, 07.05.2009 Scala Folie 9 von 21

Type Inference auf Typangaben kann ich den meisten Fällen verzichtet werden Variablen var x = 5 var y = "Scala x = "ist toll" // x:int // y:string // type mismatch var z = x * 10 // z:int Rückgabetyp von Funktionen def add(x:float, y:float) = { x+y // add(float, Float):Float TU Dresden, 07.05.2009 Scala Folie 10 von 21

Traits abstrakter Typ ähnlich wie Java Interfaces bzw abstrakte Klassen Mixin Composition -> Mehrfach Vererbung trait Occupation { var occupation = "" override def tostring = super.tostring + "(" + occupation + ")" trait Status { var status = "" override def tostring = super.tostring + "(" + status + ")" TU Dresden, 11.05.2009 Scala Folie 11 von 21

Traits class BetterPerson(n:String, a:int) extends Person(n,a) with Occupation with Status val bp = new BetterPerson("Alice", " 25) bp.occupation = "Student"; bp.status = "Married" println(bp) // Alice (25)(Student)(Married) TU Dresden, 11.05.2009 Scala Folie 12 von 21

Traits trait Ord[T] { def < (that: T): Boolean def <=(that: T): Boolean = (this < that) (this == that) def > (that: T): Boolean =!(this <= that) def >=(that: T): Boolean =!(this < that) class Rational(n: Int, d: Int) extends Ord[Rational] { /* */ def <(that: Rational) = numer * denom > that.numer * that.denom var r1 = new Rational(7,5) var r2 = new Rational(13,7) println(r1 > r2) // true TU Dresden, 11.05.2009 Scala Folie 13 von 21

First Class Functions Funktionen sind auch Objekte haben einen Typ können Variablen zugewiesen werden val printhi:() => Unit = () => println("hi") printhi() // "hi" val return5:() => Int = () => 5 return5() // 5 val add:(int,int) => Int = (x,y) => x+y add(7,3) // 10 TU Dresden, 07.05.2009 Scala Folie 14 von 21

Higher Order Functions Funktionen die andere Funktionen als Parameter nehmen oder zurück geben def exists[t](list:list[t], f:t => Boolean ):Boolean = { for(item <- list) if(f(item)) return true return false val l = List(2,3,5,7,8,10) println(exists(l, n => n % 4 == 0)) println(exists(l, n => n < 0)) println(exists(plist, p => p.age > 18)) // true // false // true TU Dresden, 07.05.2009 Scala Folie 15 von 21

Closures Funktionen die auf Variablen zugreifen können die in ihrem Scope liegen def findpersonbyname(name:string):person = { personlist.filter(p => p.name == name) var x = 3 val printx: () => Unit = () => println(x) printx() // 3 x = 23 printx() // 23 TU Dresden, 07.05.2009 Scala Folie 16 von 21

Tail Recursion def factorial(n:bigint):bigint = { if(n == 1) 1 else n * factorial(n-1) println(factorial(10)) // 3628800 println(factorial(5000)) // StackOverflowError def factorial2(akk:bigint,n:bigint):bigint = { if(n == 1) akk else factorial2(akk*n,n-1) println(factorial2(1,5000)) // 42285779 TU Dresden, 11.05.2009 Scala Folie 17 von 21

Currying ist die Umwandlung einer Funktion mit mehreren Argumenten in mehrere Funktionen mit je einem Argument def factorial3(akk:bigint)(n:bigint):bigint = { if(n == 1) akk else factorial2(akk*n n,n-1) println(factorial3(1)(7)) // 5400 Partial Application def fact = factorial3(1)_ println(fact(8)) // 40320 TU Dresden, 07.05.2009 Scala Folie 18 von 21

Pattern Matching def factorial4(akk:int, i:int):int = { i match { case 1 => akk case n => factorial2(akk*n, n-1) println(factorial4(1,9)) // 362880 def tup(exp:any) = { exp match { case (a,b) => println("matched:" + a + "," + b) case (a) => println("matched:" + a ) println(tup(5)) // Matched:5 println(tup(("bob",25))) // Matched:Bob,25 TU Dresden, 07.05.2009 Scala Folie 19 von 21

Quellen Offizielle Seite www.scala-lang.org Scala by Example http://www.scala-lang.org/docu/files/scalabyexample.pdf Scala Tutorial http://www.scala-lang.org/docu/files/scalatutorial.pdf ScalaTest Framework http://www.artima.com/scalatest/ A Weblog by Martin Odersky http://www.artima.com/weblogs/index.jsp?blogger=modersky p// / g/ jp gg www.wikipedia.de TU Dresden, 07.05.2009 Scala Folie 20 von 21

Fragen Fragen? TU Dresden, 07.05.2009 Scala Folie 21 von 21