Scala. Funktionale (Zustandslose) Objekte

Ähnliche Dokumente
Prof. W. Henrich Seite 1

Einführung in die Programmierung 1

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Objektorientierte Programmierung

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Grundlagen von Python

Java I Vorlesung 6 Referenz-Datentypen

Probeklausur: Programmierung WS04/05

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Repetitorium Informatik (Java)

3 Objektorientierte Konzepte in Java

Javakurs für Anfänger

Java Einführung Methoden. Kapitel 6

3 Objektorientierte Konzepte in Java

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Java Vererbung. Inhalt

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Einstieg in die Informatik mit Java

5.4 Klassen und Objekte

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

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

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

Programmieren in C++ Überladen von Methoden und Operatoren

Programmieren I + II Regeln der Code-Formatierung

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

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Überschreiben von Methoden

Elementare Konzepte von

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Übersicht. Vorstellung des OO-Paradigmas

Java Kurs für Anfänger Einheit 5 Methoden

1 Polymorphie (Vielgestaltigkeit)

PHP Code Konventionen Um einen einheitlichen Code zu generieren, der von jedem gelesen werden kann, müssen folgende Konventionen eingehalten werden.

Probeklausur: Programmierung WS04/05

Einführung in ActionScript

Objektorientierte Programmierung

Repetitorium Informatik (Java)

Javakurs für Anfänger

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

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

10 Objektorientierte Programmierung, Teil 1

Kapitel 6. Vererbung

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

Java Einführung Klassendefinitionen

4 Vererbung, Polymorphie

Methoden (fortgeschritten) in C# - 1

Kapitel 6. Vererbung

1.2 Attribute und Methoden Aufbau einer Java-Klasse:

Javakurs 2013 Objektorientierung

Codegeneratoren mit Xtend , A. Arnold

Kapitel 6. Vererbung

THE GO PROGRAMMING LANGUAGE. Michael Karnutsch & Marko Sulejic

Programmierkurs Python I

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

Computeranwendung und Programmierung (CuP)

Einführung in die Programmierung Laborübung bei Korcan Y. Kirkici. 3.Übung bis

Inhaltsüberblick. I. Grundbegriffe - Objekte und Klassen. Organisatorisches. I. Grundbegriffe - Objektorientierte Konzepte

Vorkurs C++ Programmierung

Konstruktoren, Packages und Scopes

Java I Vorlesung Vererbung und Sichtbarkeit

Vererbung. Martin Wirsing. Ziele. Vererbung

Wiederholung zur Vorlesung Programmieren

13. Tutorium zu Programmieren

Programmieren I. Kapitel 8. Vererbung

3 Klassen, Attribute, Methoden

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

C++ - Operatoren. Eigene Klassen mit neuen Funktionen

PIWIN 1 Übung Blatt 5

Einstieg in die Informatik mit Java

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden

Javaprogrammierung mit NetBeans. Variablen, Datentypen, Methoden

Java - Überladen von Methoden und Konstruktoren

JAVA - Methoden

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

Präsentation Interfaces

5.6 Vererbung. Vererbung

Software Engineering Klassendiagramme Einführung

Beispiel: Zwischen der Oberklasse und der abgeleiteten Klasse besteht eine ist ein Beziehung. Eine abgeleitete Klasse stellt eine Spezialisierung der

Algorithmen und Datenstrukturen

Klassen mit Instanzmethoden

Java: Vererbung. Teil 3: super()

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

AuD-Tafelübung T-B5b

Problem: Keine Integers in JavaCard. ToDo: Rechnen mit Bytes und Shorts

Einführung in die Programmierung

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

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

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

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

1. Der Einstieg in Java. Was heißt Programmieren?

IT- Handbuch für Fachinformatiker, 7. Auflage: Text- Lösungen Sascha Kersken

Java I Vorlesung Objektorientiertes Programmieren

Java Einführung Operatoren Kapitel 2 und 3

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

Anwendungsentwicklung mit Java. Grundlagen der OOP, Vererbung, Schnittstellen, Polymorphie

Objektorientierte Programmierung mit Python Polymorphismus und Vererbung. Eltern

Interfaces und Vererbung

Java Einführung Methoden in Klassen

Übung 1: Object Inspector

Kapitel 11: Wiederholung und Zusammenfassung

Transkript:

Scala Funktionale (Zustandslose) Objekte

Agenda Was sind Funktionale Objekte? veränderliche Objekte vs. unveränderliche Objekte Klassen Parameter Konstruktoren Private Member Methoden und Operatoren Overriding (Überschreiben)

Was sind Funktionale Objekte? Objekte die unveränderlich sind z.b. String

veränderliche Objekte vs. unveränderliche Objekte

veränderliche Objekte vs. unveränderliche Objekte Veränderliche Objekte Vor der Übergabe muss man eine Kopie herstellen Bsp: Objekt Hashmap wird dann verändert = > nicht wieder findbar Unveränderliche Objekte Leichter verständlich Können leicht übergeben werden 2 Threads können das Objekt nicht korrumpieren Sichere Hashtable Schlüssel ( ) Kopie statt Update

Beispiele Implementierung einer Klasse zur Darstellung von Komplexen Zahlen.

Klassen Parameter

Klassen Parameter Class Klassenname(n: Int, d: Int) n,d werden Klassenparameter genannt Klassenparameter können nur in der Klasse genutzt werden! Compiler generiert einen Primär Konstruktor Trick: wird vor die Parameter val geschrieben, erstellt der Compiler automatisch Klassenvariablen

Konstruktoren

Konstruktoren Primärkonstruktor: Alles was nach dem Kopf steht und nicht in einer Methode steht wird ausgeführt bildet also den Primärkonstruktor. Um Variablen eines übergebenen Objekts lesen zu können müssen sie vals sein bei unveränderlichen Objekten muss dies bei der Initialisierung geschehen. Der Primärkonstruktor ist immer der Einstiegspunkt in eine Klasse.

Konstruktoren Auxiliary Konstruktoren: Definition: Hilfskonstruktor, Sekundärkonstruktor. this wird als Name verwendet und nicht der Klassenname. z.b def this(n: Int) Als erstes muss immer ein anderer Konstruktor aufgerufen werden! (textlich vor dem Aufrufenden) Letztendlich Aufruf des Primärkonstruktors. Nur der Primärkonstruktor kann super Klassen K

Konstruktoren Einschub zum hinzufügen von Klassenvariablen Um Variablen eines übergebenen Objekts lesen zu können müssen sie vals sein z.b. class Rational(n: Int, d: Int) { Val numer = n Val denom = d Leichter verständlich

Private Member

Private Member Das Schlüsselwort ist private. Kann bei Variablen und Methoden angewendet werden. Hat die selbe Wirkung wie bei Java. Der Defaultwert in Scala ist public.

Methoden und Operatoren

Methoden und Operatoren Definition mit Schlüsselwort def. Dann einer oder mehrere erlaubte Bezeichner, Gefolgt von Parametern in Klammern Dahinter wird dann : + Typ des Rückgabewerts angegeben. Wenn die Methode mehr als eine Zeile Lang ist schreibt man noch = { Was geschen soll } z.b.: def add(other: Rational): Unit = { }

Methoden und Operatoren Bezeichner in Scala : Alphanumerischen Operatoren Gemischten Buchstäblichen (literal)

Methoden und Operatoren Alphanumerische Bezeichner: Unterstrich oder Buchstabe gefolgt von weiteren Buchstaben, Nummern oder Unterstrichen $ zählt als Buchstabe ist aber reserviert für den Scala Compiler Bezeichner in Programmen sollten es nicht enthalten, werden aber kompiliert (kann zu Konflikten führen)

Methoden und Operatoren Namenskonventionen: Camel case (klein): Variabelnamen, Parameter von Methoden, lokale Variablen und Funktionen. Camel case (groß): Traits und Klassennamen. Zum Unterstrich: z.b. Val name_: Int = 1 Der Compiler liest name_: und nicht name_ :

Methoden und Operatoren Scala vs. Java val!= finals Parameter sind vals Sie können bei jedem Aufruf verschieden sein. Java: finals alles groß, Unterstrich als Trennzeichen Scala: der erste Buchstabe sollte groß sein X_OFFSET Xoffset

Methoden und Operatoren Operator Bezeichner: Operator Zeichen sind druckbare ASCII Zeichen wie z.b. +,:,?,~,# Noch genauer gehören die Operator Zeichen zur UniCode Menge aller mathematischen Symbole (Sm) oder zu den anderen ( other ) Symbolen (So) Intern werden Symbole in legale Java Bezeichner umgewandelt (mit Einbettung des $ Zeichens) z.b. : > $colon$minus$greater

Methoden und Operatoren Gemischte Bezeichner: Alphanumerischer Bezeichner + Unterstrich + ein Operator Bezeichner z.b. unary_+

Methoden und Operatoren Buchstäblichen Bezeichner (literal) Willkürliche Strings eingeschlossen von Hochkommas Idee: man kann irgendeinen Bezeichner nehmen der von der Laufzeit akzeptiert wird. Das Resultat ist immer ein Scala Bezeichner Es Funktioniert auch bei reservierten Wörtern z.b. Thread.`yield`() (yield ist reserviert)

Overriding

Overriding (Überschreiben) Überschreiben von geerbten Methoden. Schlüsselwort ist override Override + Methodendefinition Ist optional beim Überschreiben einer Abstrakte n Methode z.b. override def tostring = numer + / + denom Wieso? Leichtere Fehlersuche.

Overloading

Overloading Analog wie bei Java. Bei einem Aufruf entscheidet der Compiler welche Methode zu wählen ist, indem er das passende Argument heraussucht. Bei den Operatoren wird durch den rechten Operanden entschieden. Wenn es keinen einzigartigen, besten zutreffenden Fall gibt, bekommt man vom Compiler eine ambiguous reference error

Implizite Konvertierung

Implizite Konvertierung Sagt dem Compiler was er tun soll, wenn ein Objekt keine Methode hat das übergebene Objekt zu handhaben. z.b. x = Int; y = Rational X + y Ints haben keine Methode um Rationals zu addieren Lösung: implicit def inttorational(x: Int) = new Rational(x)

Implizite Konvertierung One at a time Rule: Nur eine Konvertierung, verschachteln nur bedingt möglich. Explicits First Rule: Der Compiler verändert keinen funktionierenden Code. Non Ambiguity Rule: Der Compiler weigert sich wenn er die Wahl hat für mehrere implizite Konvertierungen. Scope Rule: Die Konvertierung muss im Scope sein.

Überprüfen von Vorbedingungen

Überprüfen von Vorbedingungen Sicherstellen, dass die Daten korrekt sind Besonders Wichtig bei Unveränderlichen Objekten Scala bietet extra die require Methode. require( boolean Ausdruck ) Falls der Ausdruck false ergibt wird eine IllegalArgumentException geworfen.

Self Referenz

Self Referenz Im Prinzip wie in Java Innerhalb einer Methode zeigt es auf das Objekt, das die Methode ausführt. Im Konstruktor auf das Objekt, das instantiiert wird. Meistens verwendet als Rückgabewert

If Anweisung Liefert einen Wert zurück Val example = if(boolean) result1 else result2 Ermöglicht das verwenden von val anstatt var. Code wird leichter verständlich.

Quellen Martin Odersky: Programming in scala artima 2008 Wampler, Payne: Programming Scala O Ŕeilly 2009

Schluss Vielen Dank für eure Aufmerksamkeit : )