Clojure in Lehre und Forschung



Ähnliche Dokumente
Funktionale Programmierung (in Clojure)

Einführung in die Programmierung

Funktionale Programmierung mit Haskell

Objektorientierte Programmierung

Große Übung Praktische Informatik 1

Modellierung und Programmierung 1

Computeranwendung und Programmierung (CuP)

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Funktionale Programmierung

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup Conrad Kobsch

WPF Steuerelemente Listbox, ComboBox, ListView,

BEISPIELKLAUSUR Softwareentwicklung:

Grundlagen von Python

Einführung in Javadoc

Javakurs zu Informatik I. Henning Heitkötter

Software Engineering Klassendiagramme Assoziationen

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

NODELOCKED LIZENZ generieren (ab ST4)

Vorgetragen von. Sanaz Mostowfi Anna Polovets Mandy Neumann

Programmieren Lernen mit BYOB. Gerald Futschek 5. November 2012

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

Programmieren in Java

Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag

Vererbung & Schnittstellen in C#

Gliederung. Programmierparadigmen. Sprachmittel in SCHEME. Objekte: Motivation. Objekte in Scheme

Vorkurs Informatik WiSe 15/16

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Programmieren in Haskell Einführung

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version September

Programmierparadigmen

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

Arbeiten mit dem Geometrieprogramm GeoGebra

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

Grundbegriffe der Informatik

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Erwin Grüner

U08 Entwurfsmuster (II)

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.

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

IBM Software Demos Rational Software Delivery Platform - Änderungen an Design und Architektur einer Anwendung

Objektorientierte Programmierung OOP

Um die Rücklagen ordnungsgemäß zu verbuchen, ist es wichtig, Schritt-für-Schritt vorzugehen:

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Objektorientierung: Klassen und Objekte

SQL - Übungen Bearbeitung der Datenbank Personal (1)

Lehrer: Einschreibemethoden

Objektorientierte Programmierung

Formale Sprachen und Grammatiken

I.1 Die Parrot Assemblersprache

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Prof. Dr. Ulrich Hoffmann, Prof. Dr. Uwe Schmidt

Anpassung einer freien SSL/TLS Implementierung an die Kertasarie VM

Programmieren Lehren Bericht über einen erneuten Anlauf

Vererbung in der OOP

Programmierung I Einführung in Python, Beyond the Basics

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

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),

Software Engineering Interaktionsdiagramme

Scala kann auch faul sein

Java Einführung Collections

Übung - Datenmigration in Windows Vista

Anleitung für die Teilnahme an den Platzvergaben "Studio II, Studio IV und Studio VI" im Studiengang Bachelor Architektur SS15

Dokumentation. Black- und Whitelists. Absenderadressen auf eine Blacklist oder eine Whitelist setzen. Zugriff per Webbrowser

Client-Server-Beziehungen

Scala & Lift. Ferenc Lajko

Formale Systeme, WS 2012/2013 Lösungen zu Übungsblatt 4

Was ist das Tekla Warehouse

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Whitepaper. Produkt: combit Relationship Manager 7. combit Relationship Manager -rückläufer Script. combit GmbH Untere Laube Konstanz

Universität Augsburg, Institut für Informatik Sommersemester 2005 Prof. Dr. Werner Kießling 16. Juli 2005 Dr. Alfons Huhn, Timotheus Preisinger

Studentische Lösung zum Übungsblatt Nr. 7

Programmierung 2. Übersetzer: Code-Erzeugung. Sebastian Hack. Klaas Boesche. Sommersemester

Schnelleinstieg in die (cs) AuftragPro

Einfache Ausdrücke Datentypen Rekursive funktionale Sprache Franz Wotawa Institut für Softwaretechnologie

emlp: e-learning Plattform und mobile Lösungen für Military Operations EUROKEY Software GmbH Ludwig Kuhn

Erfahrungen mit Hartz IV- Empfängern

Die Anwendung von Work of Leaders in drei Schritten

Zählen von Objekten einer bestimmten Klasse

WPF Bindung. Dr. Beatrice Amrhein

S7-Hantierungsbausteine für R355, R6000 und R2700

Übungsblatt 3: Algorithmen in Java & Grammatiken

GSD-Radionik iradionics Android-App

Objektorientierte Programmierung. Kapitel 12: Interfaces

C O C O O N. Wo ist Cocoon in die Apache Projekte einzureihen?

Praktikum: Einstieg: Arbeitsplatz, JCreator

Programmierung von MS-Office mit Visual Basic

Java Einführung Packages

1. Teilklausur. Modul "OOPM Vorlesung/Übung" Gruppe A

ecaros2 Installer procar informatik AG 1 Stand: FS 09/2012 Eschenweg Weiterstadt

Einführung in die Programmierung

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Werkzeuge der Informatik UNIX

Integrierte und automatisierte GUI-Tests in Java

1. Übung zu "Numerik partieller Differentialgleichungen"

Hinweise zur Datensicherung für die - Prüfmittelverwaltung - Inhalt

Transkript:

Clojure in Lehre und Forschung Johannes Brauer NORDAKADEMIE Hochschule der Wirtschaft 29. Mai 2015 Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 1 / 22

Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 2 / 22

Merkmale [ECG12, Hig15] Clojure Clojure- Datenstrukturen Persistente Datenstrukturen [Oka98, Hic09] Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 3 / 22

Merkmale [ECG12, Hig15] Merkmale [ECG12, Hig15] Clojure Clojure- Datenstrukturen Persistente Datenstrukturen [Oka98, Hic09] Autor: Rich Hickey, 2008, http://clojure.org stürmische Entwicklung Jede Woche erscheint ein neues Clojure-Buch. Planet Clojure verzeichnet über 400 Clojure-Blogs. Findet zunehmend Beachtung in der Industrie. Lisp-Dialekt gehostete Sprache läuft auf der Java Virtual Machine Variante: ClojureScript wird nach JavaScript kompiliert strenge, dynamische Typisierung betont den funktionalen Programmierstil starke Unterstützung von paralleler und asynchroner Programmierung Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 4 / 22

Clojure Merkmale [ECG12, Hig15] Clojure Clojure- Datenstrukturen Persistente Datenstrukturen [Oka98, Hic09] Try Clojure Command line tool - the repl java -cp clojure.jar clojure.main LightTable is a new interactive IDE La Clojure and IntelliJ IDEA Eclipse and Counterclockwise Clojure with Emacs Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 5 / 22

Clojure-Datenstrukturen Merkmale [ECG12, Hig15] Clojure Clojure- Datenstrukturen Persistente Datenstrukturen [Oka98, Hic09] Atomare Datentypen Ganzzahlen beliebiger Genauigkeit 123456789876543 Doubles 1.234, BigDecimals 1.234M Rationale Zahlen 7/13 Strings "Karl", Characters \R \o \s \a Symbole daniel gustav, Keywords :duesentrieb :gans true, false, nil Datenstrukturen Listen einfach verkettet, wachsen vorn (Karl ist 27), (list 2 3 4) Vektoren Zugriff per Index, wachsen hinten [a b c [d e f]] Maps Mengen von Schlüssel-Wert-Paaren {:a 1, :b 2, :c 3}, {"Karl" 27 "Rosa" 45} Mengen #{karl rosa klara} Alle können beliebig ineinander verschachtelt werden. Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 6 / 22

Persistente Datenstrukturen [Oka98, Hic09] Merkmale [ECG12, Hig15] Clojure Clojure- Datenstrukturen Persistente Datenstrukturen [Oka98, Hic09] In Clojure sind alle Datenstrukturen unveränderbar (immutable). Keine Synchronisierung bei konkurrierendem Zugriff erforderlich Datenstrukturen sind (wie Funktionen) Werte erster Ordnung. Jede Änderung liefert neue Version einer Datenstruktur: ( def m {: a 1 : b 2}) m ; ; => {: a 1, : b 2} ( assoc m : c 5) ; ; => {: c 5, : a 1, : b 2} m ; ; => {: a 1, : b 2} Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 7 / 22

an der NORDAKADEMIE anderswo Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 8 / 22

an der NORDAKADEMIE an der NORDAKADEMIE anderswo im Bachelor-Studiengang Wirtschaftsinformatik : Modul Abstraktionskonzepte der Informatik funktionale Abstraktion (funktionale Programmierung) Datenabstraktion Typsysteme Algebraische Spezifikation von Datentypen im Bachelor-Studiengang Angewandte Informatik : Modul Programmierparadigmen funktionale Programmierung prädikative Programmierung Constraint programming in Zukunft in der Programmiergrundausbildung aktuelle Diskussion im Fachbereich Informatik Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 9 / 22

anderswo Projekt Clojure in Education (ClojurEd)[MAE13] der University of Minnesota, Morris incorporating Clojure into undergraduate curriculum an der NORDAKADEMIE anderswo Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 10 / 22

Die DSL-Akademie Objekte als Closures person Funktionale Objekte klassenlose Objekte Ergänzungen Implementierung Vorhaben Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 11 / 22

Die DSL-Akademie Die DSL-Akademie Objekte als Closures person Funktionale Objekte klassenlose Objekte Ergänzungen Implementierung Vorhaben Thema: Innovationen im Bereich n aus der Sicht der Praxis [BCK08] akademischer Zirkel bestehend aus: Dr. Christoph Crasemann Dr. Hartmut Krasemann Stefanie Jasser mir Schwerpunktthema der letzten Zeit: Überwindung der semantischen Lücke zwischen Allzwecksprachen und Anwendungsdomänen Implementierungstechniken für domänenspezifische Sprachen [KBC11] Implementierung einer in Smalltalk eingebetteten Sprache für die Erzeugung klassenloser Objekte (DOSL) [BKC12] Vortrag auf NKIF 2012 Implementierung einer Parserkombinator-Bibliothek in Clojure [Bra15] DOSL für Clojure Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 12 / 22

Die DSL-Akademie Objekte als Closures person Funktionale Objekte klassenlose Objekte Ergänzungen Implementierung Vorhaben Objekte als Closures 1 ( defn person [ ] 2 ( l e t [ name (atom n i l ) 3 vorname (atom n i l ) 4 set name ( fn [ n ] ( r e s e t! name n )) 5 set vorname ( fn [ n ] ( r e s e t! vorname n )) 6 get name ( fn [ ] @name) 7 get vorname ( f n [ ] @vorname ) 8 vollname ( fn [ ] ( s t r @vorname " " @name ) ) ] 9 ( fn [ message ] 10 ( cond (= message : set name) set name 11 (= message : set vorname ) set vorname 12 (= message : get name) get name 13 (= message : get vorname ) get vorname 14 (= message : get vollname ) vollname 15 : e l s e ( throw ( Exception. 16 ( s t r "Message not understood : " 17 message ) ) ) ) ) ) ) Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 13 / 22

person Die DSL-Akademie Objekte als Closures person Funktionale Objekte klassenlose Objekte Ergänzungen Implementierung Vorhaben ( def p ( person )) (( p : set vorname ) "Gustav ") (( p : set name) "Gans ") (( p : get vollname )) ; ; => "Gustav Gans" Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 14 / 22

Funktionale Objekte Die DSL-Akademie Objekte als Closures person Funktionale Objekte klassenlose Objekte Ergänzungen Implementierung Vorhaben Den Begriff functional objects prägte Mattias Felleisen in einer Keynote der ECOOP 2004 in Oslo am 16 Juni 2004. ( defn person [ n v ] ( l e t [ name n vorname v get name ( fn [ ] name) get vorname ( fn [ ] vorname ) vollname ( fn [ ] ( s t r vorname " " name )) gruss ( fn [ grussformel ] ( s t r grussformel " " ( vollname ) ) ) ] {: get name get name : get vorname get vorname : vollname vollname : gruss gruss })) ( def p ( person "Gans" "Gustav ")) (( p : gruss ) " Hallo ") ; ; => " Hallo Gustav Gans" Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 15 / 22

klassenlose Objekte Die DSL-Akademie Objekte als Closures person Funktionale Objekte klassenlose Objekte Ergänzungen Implementierung Vorhaben In der Syntax der DOSL wird das person-objekt aufgeschrieben, ohne dass vorher eine Klassendefintion angelegt werden muss: ( obj [ name "Gans" vorname "Gustav "]) Technisch liefert der Ausdruck wieder eine Dispatcher-Funktion, die mit dem Namen einer Methode als Argument aufgerufen werden kann: (( obj [ name "Gans" vorname "Gustav "]) name) ; ; => "Gans" Ein DOSL-Objekt kann auch an ein Symbol gebunden werden: ( def p ( obj [ name "Gans" vorname "Gustav "])) (p vorname ) ; ; => "Gustav" Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 16 / 22

Ergänzungen Definition von Methoden: Die DSL-Akademie Objekte als Closures person Funktionale Objekte klassenlose Objekte Ergänzungen Implementierung Vorhaben ( defobj p [ name "Gans" vorname "Gustav" vollname ( fn [ ] ( s t r vorname " " name ) ) ] ) (p vollname ) ; ; => "Gustav Gans" Nachträgliches Hinzufügen von Slots: ( def p (add s l o t p gruss ( fn [ grussformel ] ( s t r grussformel " " ( vollname ) ) ) ) ) (p gruss " Hallo ") ; ; => " Hallo Gustav Gans" Set-Methoden automatisch erzeugt: (( p name "Ente ") name) ; ; => "Ente" (p name) ; ; => "Gans" Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 17 / 22

Implementierung Die DSL-Akademie Objekte als Closures person Funktionale Objekte klassenlose Objekte Ergänzungen Implementierung Vorhaben Die Implementierung der DOSL erfolgt hauptsächlich durch drei Clojure-Makros: obj Erzeugung der DOSL-Objekte defobj syntaktischer Zucker für die Bindung eines Objekts an eine Variable add-slot Erzeugung eines neuen Objekts durch Hinzufügen eines Slots Zusammen mit Hilfsfunktionen und -makros ca. 50 LOC. Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 18 / 22

Vorhaben Die DSL-Akademie Objekte als Closures person Funktionale Objekte klassenlose Objekte Ergänzungen Implementierung Vorhaben Überarbeitung des Curriculums für die Programmiergrundausbildung in den Informatik-Studiengängen Abschied von objects first (und Smalltalk) Eine Idee (unter vielen) für das erste Studienjahr: Einstieg mit funktionaler Programmierung funktionale Objekte Klassen als expliziten Abstraktionsmechanismus einführen DSL-Akademie: Nutzung von funktionalen Objekten für die Entwicklung einer DSL für eine kaufmännische Domäne Nutzung von Clojure für die Umsetzung des Data-Context-Interaction-Architekturmusters [CR12] Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 19 / 22

Literatur Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 20 / 22

Literatur technisch: Möglichkeit der Klassenbildung? änderbare Objekte? Ist das DCI-Architekturmuster tragfähig? Ist Clojure als DCI-Sprache geeignet? didaktisch Wie wird das didaktische Konzept für die Programmiergrundausbildung aussehen? Wird Clojure (DOSL) ggf. dabei helfen? Ihre Fragen! Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 21 / 22

Literatur [BCK08] Brauer, Johannes, Christoph Crasemann und Hartmut Krasemann: Auf dem Weg zu idealen Programmierwerkzeugen Bestandsaufnahme und Ausblick. Informatik-Spektrum, 31(6):580 590, Dezember 2008. [BKC12] Brauer, Johannes, Hartmut Krasemann und Christoph Crasemann: Implementierung einer in Smalltalk eingebetteten Sprache für die Erzeugung klassenloser Objekte. In: Forschung für die Wirtschaft 2012. NORDAKADEMIE Hochschule der Wirtschaft, 2012. [Bra15] [CR12] Brauer, Johannes: Implementierung einer Parserkombinator-Bibliothek in Clojure. In: Forschung für die Wirtschaft 2015. NORDAKADEMIE Hochschule der Wirtschaft, 2015. Coplien, James O. und Trygve Mikkjel Heyerdahl Reenskaug: The data, context and interaction paradigm. In: SPLASH 12: Proceedings of the 3rd annual conference on Systems, programming, and applications: software for humanity, Seiten 227 228, New York, NY, USA, 2012. ACM. [ECG12] Emerick, Chas, Brian Carper und Christophe Grand: Clojure Programming. O Reilly Media, Inc, 2012. Hickey, Rich: The clojure programming language. In: Proceedings of the 2008 symposium on Dynamic languages, Seite 1. ACM, 2008. [Hic09] Hickey, Rich: Persistent Data Structures and Managed References. https://github.com/engelberg/instaparse, 2009. zuletzt aufgerufen am 11. 4. 2015. [Hig15] Higginbotham, Daniel: Clojure for the Brave and True. Leanpub, 2015. [KBC11] Krasemann, Hartmut, Johannes Brauer und Christoph Crasemann: DSLs MIT PARSER-KOMBINATOREN: Mit wenig Code zu einer Harel- Statechart-DSL. OBJEKTspektrum, (4), 2011. [MAE13] Machkasova, Elena, Stephen J Adams und Joe Einertson: Steps towards teaching the Clojure programming language in an introductory CS class. 2013. [Oka98] Okasaki, Chris: Purely Functional Data Structures. Cambrigde University Press, 1998. Johannes Brauer Norddeutsches Kolloqium für Informatik an Fachhochschulen 2015 22 / 22