".NET und jetzt!" C# in 21 Tagen oder doch besser Best PracticesGFU Cyrus AG
Konzepte, Werkzeuge und Ideen aus der Praxis für bessere und erfolgreichere .NET-Softwareprojekte.
* Klassen/Objekte/Komponenten
* Mehrschichtige .NET-Anwendungen
* Bibliotheken und Pattern
* Frameworks und Tools
* Unit Testing und Codeanalyse
* Continous Integration und Versionsverwaltung
* Dokumentation und Instrumentation
Überblick über die Entwicklung mit Clojure bei HEROLABS.
* Warum haben wir uns für Clojure entschieden? (Simplicity, Erweiterbarkeit, Java-Interop)
* Was heißt Funktionale Programmierung?
=> Man braucht ein anderes Mindset
* Was uns stört.
* Und wie entwickelt man mit Clojure (Ecosystem)?
Anlass war ein Talk bei mgm-tp.
Funktionale Programmierung hat zu guter Letzt auch in Java Einzug gehalten. Es ist jetzt ganz normal, überall mit Lambdas oder mit map() und filter() zu arbeiten. Aber ist das wirklich funktionale Programmierung?
Wie sieht es aus, wenn man Java 8 mit einer althergebrachten funktionalen Programmiersprache vergleicht? Und was kann der Java-Programmierer, der aus der objektorientierten (OO) Entwicklung kommt, von funktionalen Sprachen lernen und in seinen Java-Alltag integrieren?
Auf diese Fragen ging Nicole Rauch in ihrem Referat ein. Ebenso stellte sie die grundlegenden Aspekte er funktionalen Programmierung vor und zeigte auf, was die funktionale Programmierung so besonders macht.
Gerne stellen wir Ihnen die Slides des Referats zur Verfügung.
Vorteile von Aqua-4D Wasserbehandlung: Ersatz oder Verkleinerung des RO Systems; Dosierung von Düngern wird um 30 % reduziert; Ersatz der chemischen Nematizide, Notwendigen Wassermengen werden reduziert.
".NET und jetzt!" C# in 21 Tagen oder doch besser Best PracticesGFU Cyrus AG
Konzepte, Werkzeuge und Ideen aus der Praxis für bessere und erfolgreichere .NET-Softwareprojekte.
* Klassen/Objekte/Komponenten
* Mehrschichtige .NET-Anwendungen
* Bibliotheken und Pattern
* Frameworks und Tools
* Unit Testing und Codeanalyse
* Continous Integration und Versionsverwaltung
* Dokumentation und Instrumentation
Überblick über die Entwicklung mit Clojure bei HEROLABS.
* Warum haben wir uns für Clojure entschieden? (Simplicity, Erweiterbarkeit, Java-Interop)
* Was heißt Funktionale Programmierung?
=> Man braucht ein anderes Mindset
* Was uns stört.
* Und wie entwickelt man mit Clojure (Ecosystem)?
Anlass war ein Talk bei mgm-tp.
Funktionale Programmierung hat zu guter Letzt auch in Java Einzug gehalten. Es ist jetzt ganz normal, überall mit Lambdas oder mit map() und filter() zu arbeiten. Aber ist das wirklich funktionale Programmierung?
Wie sieht es aus, wenn man Java 8 mit einer althergebrachten funktionalen Programmiersprache vergleicht? Und was kann der Java-Programmierer, der aus der objektorientierten (OO) Entwicklung kommt, von funktionalen Sprachen lernen und in seinen Java-Alltag integrieren?
Auf diese Fragen ging Nicole Rauch in ihrem Referat ein. Ebenso stellte sie die grundlegenden Aspekte er funktionalen Programmierung vor und zeigte auf, was die funktionale Programmierung so besonders macht.
Gerne stellen wir Ihnen die Slides des Referats zur Verfügung.
Vorteile von Aqua-4D Wasserbehandlung: Ersatz oder Verkleinerung des RO Systems; Dosierung von Düngern wird um 30 % reduziert; Ersatz der chemischen Nematizide, Notwendigen Wassermengen werden reduziert.
Von 2.-3. Dezember 2014 in Nürnberg. Jetzt anmelden! Unser Tipp: Günter Loidl hält einen Vortrag zum Thema: Instandhaltung 4.0: Auswirkungen und Potentiale von Industrie 4.0 für die Instandhaltung!
Weitere Infos: http://www.mf-austria.at/fileadmin/content/Dateien/MFA/MFA-Mitglieder/Tagung_Instandhaltung_2014.pdf
Social-Media-Frust: Die größten Probleme der Pressestellen im Social WebFaktenkontor
Gefällt mir... NICHT: Im Rahmen des "Social Media Trendmonitor" haben news aktuell und Faktenkontor die Vertreter der Pressestellen auch gefragt, inwiefern die Arbeit mit sozialen Medien bisher nicht den gewünschten Erfolg gebracht hat. Die Infografik fasst die Frust-Faktoren zusammen.
Kubernetes und Docker sind trotz des hohen Verbreitungsgrads noch relativ junge Technologien. Viele Menschen machen gerade gute und teilweise auch schmerzliche Erfahrungen mit beiden. Der Vortrag bietet einen Katalog an Patterns und Antipatterns bei der Entwicklung von Anwendungen auf Basis Kubernetes und Docker. Der Katalog repräsentiert dabei die Erfahrung aus mehreren Industrieprojekten, die es bis in Produktion geschafft haben.
Es geht darum, was man bei Docker-Files und Kubernetes-Deskriptoren richtig und falsch machen kann; welche Architekturbausteine man einsetzen sollte; wie die Continuous Delivery Pipeline gestaltet werden sollte und wie Anwendungen auf Cloud-Native-Plattformen gut betreibbar und diagnostizierbar gemacht werden können.
Docker und Kubernetes Patterns & Anti-PatternsQAware GmbH
JavaLand 2018, Brühl: Vortrag von Josef Adersberger (@adersberger, CTO bei QAware).
Abstract:
Kubernetes und Docker sind trotz des hohen Verbreitungsgrads noch relativ junge Technologien. Viele Menschen machen gerade gute und teilweise auch schmerzliche Erfahrungen mit beiden. Der Vortrag bietet einen Katalog an Patterns und Antipatterns bei der Entwicklung von Anwendungen auf Basis Kubernetes und Docker. Der Katalog repräsentiert dabei die Erfahrung aus mehreren Industrieprojekten, die es bis in Produktion geschafft haben.
Es geht darum, was man bei Docker-Files und Kubernetes-Deskriptoren richtig und falsch machen kann; welche Architekturbausteine man einsetzen sollte; wie die Continuous Delivery Pipeline gestaltet werden sollte und wie Anwendungen auf Cloud-Native-Plattformen gut betreibbar und diagnostizierbar gemacht werden können.
The Lotus Code Cookbook - Ulrich Krause
Tipps, Tipps, Tipps ... Die Session behandelt kein zentrales Thema. In loser Folge werden Tipps und Tricks aus allen Bereichen der Programmierung in Lotus Notes / Domino vorgestellt. @Formula, LotusScript, Java, JavaScript, LS2CApi.
Zielgruppe sind Alle, die sich mit Applikationsentwicklung beschäftigen. Anfänger und "alte Hasen"; es ist für jeden etwas dabei.
LINQ - Einheitlicher Datenzugriff in .NETGFU Cyrus AG
Auch mit Objektorientierung gibt es immer noch eine große Kluft zwischen Programmen, die in einer Hochsprache geschrieben wurden und den Daten, die diese Programme bearbeiten.
In Hochsprachen wie C# oder VB verwenden Entwickler spezialisierte Datentypen, Objekte, Methodenaufrufe und hochgradig optimierte Compiler, während beim Datenzugriff alles auf ein paar Strings reduziert wird, die SQL-Abfragen beinhalten.
Entwickler arbeiten hierbei mit zwei total unterschiedlichen Paradigmen (Syntax von SQL und der bevorzugten Programmiersprache) sowie Typsystemen und konvertieren also ständig Daten zwischen zwei verschiedenen Domänen. Diese Unstimmigkeit ist Ursache für menschliche Fehler und verschwendet Zeit.
LINQ ist Microsoft Antwort auf dieses Dilemma. Die Veranstaltung zeigt die Konzepte und Möglichkeiten der neuen .NET-Schnittstelle.
Die Idee hinter LINQ
Die verschiedenen Varianten
- LINQ to Objects
- LINQ to SQL
- LINQ to DataSet
- LINQ to XML
- LINQ to Entity
- LINQ to .....
Kurze Syntax-Übersicht
Praktische Beispiele LINQ To Objects
Kurz-Video LINQ to SQL
Fazit und Ausblick
Slides für meinen Workshop bei der BASTA Spring 2014 in Darmstadt. Hier eine Beschreibung des Workshopinhalts: Es ist schwierig genug, die Anforderungen der Kunden und Kollegen im Alltag zu erfüllen. Da bleibt nicht immer genug Zeit, um auch noch up to date zu bleiben was Neuerungen in C# betrifft. Wenn Ihnen dieses Problem bekannt vorkommt, kann dieser Workshop helfen. Wir widmen einen ganzen Tag besserem C#. Rainer Stropek, bekannter BASTA!-Speaker und Microsoft MVP, zeigt Ihnen, was C# mittlerweile leisten kann. Der Schwerpunkt im Workshop liegt diesmal auf folgenden Themen:
Coding und Design Guidelines – Best und Worst Practices, um besseren C#-Code zu schreiben.
Deep Dive in Lambdas und Linq – was hinter den Kulissen geschieht, wo sie helfen und wo sie mehr schaden als zu nützen.
Parallele und asynchrone Programmierung mit Task Parallel Library (TPL) und async/await – praktische Anwendung am Server und im Full-Client
Modularisierung von .NET-Anwendungen mit NuGet, MEF und Portable Class Libraries (PCL)
Neuerungen in Visual Studio 2013 für C#-Entwickler – alle Beispiele werden mit Visual Studio 2013 gezeigt. Sie erfahren dabei, was VS2013 an Verbesserungen für C#-Entwickler bringt.
Rainer Stropek setzt bei den Teilnehmern C#-Wissen zumindest auf dem Level von Version 2, idealerweise auch ein wenig Version 3, voraus. Ein eigener Laptop ist nicht Voraussetzung. Alle Konzepte werden anhand vieler Live-Coding-Beispiele erklärt. Zusätzlich erhalten alle Teilnehmer eine umfangreiche Präsentation als Zusammenfassung der gezeigten Themen.
Code Days 2019, München: Vortrag von Johannes Weigend (@JohannesWeigend, Technischer Geschäftsführer bei QAware)
=== Dokument bitte herunterladen, falls unscharf! Please download slides if blurred! ===
Abstract:
Programmiersprachen für die Cloud - Java und Go im Vergleich
Java ist nach dem Tiobe Index 2018 unangefochten Platz 1 bei den weltweit eingesetzten Programmiersprachen. Java ist ausgereift, stabil und verfügt über ein immenses Open Source Ökosystem. Was will man mehr? Obwohl Java gerade für die Backend Entwicklung attraktiv ist, hat Google 2008 eine eigene Programmiersprache Open Source gestellt: Golang oder kurz Go. Der Vortrag beleuchtet die Stärken und Schwächen von Go gegenüber Java, gibt Hinweise für welche Projekte Go eine gute Alternative ist, und wie ein Best of Breed Ansatz aussehen kann. Interessant an Go ist, dass die Grundbausteine von Cloud Plattformen wie OpenShift oder die Google Container Plattform mit Go erstellt wurden. Docker, Kubernetes, Helm, Grafana oder Prometheus ‒ alles ist mit Go programmiert. Die Fragen aus der Sicht von Java-Experten sind: Was macht Go für die Cloud so interessant? Gibt es Funktionen, die Java Programmierer kennen sollten, und wenn ja, welche?
Ob ASP.net MVC, NuGet oder die codebasierten Migrationen bei EF – immer mehr Konzepte und Ideen schwappen von Ruby in die .Net Welt. Wieso aber gerade von Ruby? Und was macht Rails so beliebt bei Webentwicklern?
Ruby ist wie C# eine objektorientierte Programmiersprache. Damit enden die Gemeinsamkeiten aber schon fast. Die vielen fremden Konzepte und Ansätze machen einen Einstieg in Ruby und Rails nicht gerade einfach. Aber genau in diesen Unterschieden liegen die Stärken und machen Ruby so interessant.
Dieser Vortrag gibt einen Überblick über Ruby und Rails und hilft einem sich in dieser ungewohnten Umgebung zu Recht zu finden.
Um Bilder und Grafiken "bereinigte" Version des Vortrags bei der JUG Ostfalen.
Nahezu jede große Website – egal ob das Backend in Java, PHP, Ruby oder Python programmiert wurde – verwendet im Browser JavaScript als Sprache. Software-Artefakte, die in JavaScript erstellt wurden, werde zunehmend wichtiger, da Logik in letzter Zeit tendenziell wieder vom Server zurück in den Browser wandert. JavaScript-Entwicklung ist im Alltag des Enterprise-Entwicklers angekommen. Teils muss er als Backend-Entwickler JavaScript-Code überarbeiten, der z.B. von einer Webagentur erstellt wurde, teils muss er auch selbst JavaScript-Artefakte erzeugen oder ein ganzes Framework oder eine Library in JavaScript schreiben oder pflegen.Der erste Teil des Vortrags richtet sich an Enterprise-Enwickler (meist mit einem Java-EE-Hintergrund), die sich für JavaScript interessieren, sich schnell darin einarbeiten wollen und Tipps suchen, dieses Ziel zu erreichen. Dabei werden einige Grundlagen der Sprache vorgestellt. Dieser Teil des Vortrags soll eher Lust auf Mehr machen als fundamentales Wissen in aller Tiefe zu vermitteln.Enterprise-Entwicklung ist in der Regel Teamarbeit. Eine große Codebasis mus wartbar bleiben. Im zweiten Teil des Vortrags werden Techniken und Tools vorgestellt, die dabei helfen können, eine geeignete Codequalität zu erreichen und zu wahren
Einführung in die funktionale Programmierung mit ClojureSascha Koch
Diese Präsentation ist im Rahmen eines Treffens der Java User Group Bielefeld entstanden.
Ich habe eine Einführung in die funktionale Programmierung an Hand des Lambda Kalküls gegeben. Anschließend haben wir uns die Programmiersprache Clojure angeschaut und einige Beispiele durchgesprochen.
Anschließend hat Daniel Rosowski noch funktionale Programmierung mit Guava und Java 8 vorgestellt: http://de.slideshare.net/DanielRosowski/real-lifefp
Provisionierung von Dockerhosts und -Containern mit Terraform, Ansible und LXD auf Blech und Cloud
Lästige und aufwändige manuelle Serverinstallation kann auf einfache Art durch automatisierte Provisionierung und Konfiguration der Infrastruktur ersetzt werden. Dieser Vortrag zeigt einen Ansatz, bei dem die Definition der Infrastruktur in voll maschinenlesbarer und ausführbarer Form in einem git repo anstatt in den Köpfen der (oder des) Engineers vorhanden sind.
Es wird gezeigt, wie das Verfahren sowohl auf Blech (d.h. auf lokalen physischen Maschinen) als auch in der Cloud angewendet werden kann, und somit eine grosse Übereinstimmung zwischen Test-/Integrations- und Produktionsinfrastruktur erreicht wird.
Die vorgestellten Werkzeuge sind terraform und ansible für Provisionierung und Konfigurationsmanagement, sowie lxd (nur lokal) und docker für System- und Applikationscontainer. Die vollständige Codebasis ist auf github verfügbar, so dass alle TeilnehmerInnen auch sofort mit eigenen Experimenten loslegen können.
Lean web architecture mit jsf 2.0, cdi & co.adesso AG
Vortrag von Andreas Hartmann, Principal Software Architect bei adesso, auf dem Herbstcampus 2012 zu ‚Lean Web Architecture mit JSF 2.0 & CDI‘. Die Präsentation vermittelt, wie man in kürzester Zeit komplexe Anwendungen entwickeln kann – auf schlankem Weg.
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDIadesso AG
Auch mit JSF 2 und CDI lassen sich in kürzester Zeit komplexe Anwendungen realisieren, wenn man weiß, wie. Anhand des Technologie-Stacks JSF 2, CDI, Lombok, HTML5, jQuery und JPA wird eine leichtgewichtige Architektur anhand einer Livedemo vorgestellt, die den Anforderungen des Rapid Application Development gerecht wird und in der Cloud betrieben werden kann.
Software entwickeln ist schwer, aber Architekt zu sein ist sogar noch anspruchsvoller. In dieser Session werden zehn praktische Hinweise gegeben, die man als Architekt beachten sollte, um Projekte technisch erfolgreich durchzuführen. Sie basieren auf langjähriger Erfahrung aus zahlreichen Architektur-Reviews.
Der Markt für Java-Cloud-Lösungen ist in Bewegung: Etablierte Cloud-Anbieter erweitern ihre Angebote um Java-Lösungen und einige Start-ups etablieren sich. Dieser Vortrag zeigt den aktuellen Stand von Angeboten wie Amazon Elastic Beanstalk, VMware Cloud Foundry oder Google App Engine und zeigt Stärken und Schwächen auf. Außerdem wird auf Möglichkeiten zur Nutzung von Java mit IaaS Cloud eingegangen. Ausgewählte Angebote werden auch live präsentiert.
Google, Apple, Microsoft bauen wesentliche Strategien auf den Einsatz von HTML5 auf. HTML5 beschäftigt heute die Webwelt und ist dabei viel mehr als die Weiterentwicklung von HTML 4.01 oder XHTML 1.0. Es bietet neue vielfältige Möglichkeiten, den Web-Browser als Plattform für interaktive Anwendungen zu nutzen - und das bei Bedarf uauch offline. Wir zeigen Ihnen anhand von Beispielseznarien, wie Sie von den neuen Möglichkeiten profitieren können.
2. Scala Nightsession - Agenda
► Part I - Spracheinführung
> Intro
> Scala Basics
► Part II - Scripting
> Scripting mit Scala
> Livecoding
► Part III – Application Development
> Funktionale Programmierung
> Objektorientierung
> Livecoding
2 Scala
3. I – Spracheinführung
► Imperativ
> Echte Variablen
> Kontrollstrukturen (if, while, try-catch)
⇒ Skripting
► Objektorientiert
> Gemeinsame Basistypen für alle „Objekte“
> Komposition durch Kombination von Klassen/traits
⇒ Modulare Anwendungsentwicklung
► Funktional
> Jeder Ausdruck hat einen Rückgabewert
> Zustandslos: Immutable Werte und Collections
> Closures, Tupel, Algebraische Datentypen, ….
⇒ Datenverarbeitung
3 Scala
4. I – Spracheinführung
Was ist Scala?
Eine Skriptsprache
►
Eine Applikationssprache
►
Ein Toolkit zum Erstellen von eigenen Sprachen (DSLs)
►
Ein aufgeräumtes Java
►
Was kann man mit Scala?
Beliebige Problemstellungen ausdrücken und per Typsystem prüfen
►
Für jeden Anwendungsfall einen optimalen Kontext schaffen (DSLs)
►
Einfache Aufgaben erledigen, Komplexe einfach machen
►
Vorhandenen Code zu jeder beliebigen Zeit flexibel und sicher erweitern
►
Direkt auf der JVM aufsetzen und beliebige Java-Libraries nutzen
►
Mit den Aufgaben und Anforderungen wachsen
►
4 Unternehmenspräsentation
5. I – Spracheinführung: DasTypsystem
You've got the best of both worlds, don't you?
All our strengths, none of our weaknesses.
► Scalas Typsystem ist stark und statisch
► Einfaches Refactoring
► Ermöglicht guten IDE-Support
► Es sind viel mehr Ausdrücke prüfbar als in Java
► Der Code wirkt dynamisch
> Typangaben entfallen meist
– Ausnahme: Schnittstellen
– Vorteil v.a. bei Typparametern (Generics)
> Statisches Ducktyping
> Implizite Konvertierungen
5 Scala
6. I – Spracheinführung
Eine Einführung von Martin Odersky
A
Scalable
Language
Martin Odersky
FOSDEM 2009
Martin Odersky, FOSDEM 2009
6 Unternehmenspräsentation
8. II – Scripting-Einführung (IKEA-Style)
Scripting mit Scala - Have it your way!
Beim Skripten geht es darum, Aufgaben zu erledigen
►
> Die Sprache soll dich unterstützen und nicht mit Typen und Objekten nerven
Wenn du eine Library oft in deinen Skripten verwendest…
►
> Gönn ihr ein paar Extra-Methoden und Operatoren!
> Impliziten Konvertierungen machen es möglich
Mach es dir einfach!
►
> Funktionen auf Package-Ebene statt XXXUtils, XYZHelper, …
> Closures und Collections sind deine besten Freunde!
> Objekte… Klassen? Typen?? => Überbewertet!
Durch den Einsatz als Skriptsprache lässt sich Scala am besten erlernen!
8 Unternehmenspräsentation
9. II – Scripting-Basiskomponenten
Scala‘s Collections:
Here be Arrays
► Vollständiges Neudesign
> Ersetzen die JDK-Collections
> Einfache Zusammenarbeit mit diesen durch Implizite Konvertierungen
► Jede Collection gibt es in Mutable und Immutable-Varianten
Eine Übersicht: http://www.scala-lang.org/docu/files/collections-api/collections.html
►
9 Unternehmenspräsentation
10. II – Scripting-Basiskomponenten
Collections: Sequenzen und Maps
Seq (~ java.util.List)
val a = Seq(1,2,4,7)
println(a(3)) // gibt 7 aus
val b = a +: 5 // Seq(1,2,4,7,5)
val c = a :+ 10 // Seq(10,1,2,4,7)
var d = Array(1,2,9) ++ a // Array (1,2,9,1,2,4,7)
d = d.filter { i => i > 3 } // Array(9,4,7)
d = d.map { i = > (i + 1).toString }
// Array(„10“,“5“,“8“)
Map (~ java.util.Map)
val m = Map(„a“ -> 4, „b“ -> 5, „d“ -> 6)
val ma = m(„a“) // 4
val m2 = m + („f“ -> 6) // Map(a->4, b->5, d->6, f->6)
val m3 = m – “b“ // Map(a->4, d->6, f->6)
10 Unternehmenspräsentation
11. II – Scripting-Basiskomponenten
Implizite Konvertierungen
► Selbstdefinierte automatische Typumwandlungen
► Scala‘s Panzerklebeband
Schnittstellen ändern
implicit def asFileFilter(fn: File => Boolean) = new FileFilter{
def matches(f: File) = fn(f)
}
val files = new File(“foobar.xml“).listFiles { f => f.isFile }
Neue Methoden hinzufügen
implicit def xstring(s: String) = new Object{
def asFile = new File(s)
}
val dirs = “foobar.xml“.asFile.listFiles {f => f.isDirectory }
11 Unternehmenspräsentation
12. II – Scripting-Basiskomponenten
Implizite Konvertierungen: Nutzen
> Natives Einbinden von fremden Libraries
– Kitten z.B. zwischen Scala‘s und Java‘s Collections
– Automatisches Ersetzen von Interfaces durch closures (s.o.)
– Bestehende Objekte (lokal) um neue Methoden erweitern
> Sicherer Ersatz für dynamische Metaklassen
– Werden nur angewendet wenn sie im Scope (importiert) sind
– Überschreiben keine vorhandenen Methoden und stacken nicht
– Können keine globalen Änderungen bewirken
> Implicits sind vor allem für das Skripting interessant
– Code wird kürzer, besser lesbar
– Java-Utilities können einfacher verwendet werden
12 Unternehmenspräsentation
13. I – Scripting mit Scala
Live Coding Session
Themen
► Die Eclipse-IDE
► Package-Objekte und App
► Var, Val und Def
► Implizite Konvertierungen
► Collections
13 Unternehmenspräsentation
14. III - Application Development
► Application Development
14 Unternehmenspräsentation
15. III – Application Development
Scala im „Programming in the Large“
Je größer ein Projekt ist, je mehr Mitarbeiter es hat und je länger es läuft, umso
►
wichtiger sind
> Statische Typisierung
– Einfaches Refactoring und reduzierte Testaufwände
– Typangaben dokumentieren den Code
> Erweiterbarkeit
– Vorhandener Code muss an neue Anforderungen
– Leichte Wiederverwendbarkeit
> Stabilität
– Keine Seiteneffekte
> Modularisierung
– Aufgaben auf Teams auspalten
– Kontrakte definieren
Jeder dieser Punkte kann auf Spracheebene adressiert werden
►
15 Unternehmenspräsentation
16. III – Application Development
► Scalas Schlüsselkomponenten dazu
> Funktionale Programmierung (FP)
– Datenverarbeitung
> Objektorientierung (OO)
– Modularisierung
– Modellierung von Workflows
> Das Typsystem
– Die 3 Sprachebenen: Statements, Templates, Typen
– Typparameter (Generics)
16 Unternehmenspräsentation
17. III - Funktionale Programmierung
► Prinzipien
> Trennung von Daten und Funktionen!
> Zustandlosigkeit
► Daten
> Typen: Werte, Collections
> Sondertypen: Funktionen (Closures), Algebraische Datentypen
> Pattern Matching: Zerlegen von Daten in ihre Werte
► Funktionen
> Liefern immer einen Wert zurück
> Verändern nicht ihre Eingabeparameter
► Ziele
> Effiziente Datenverarbeitung
> Vermeidung von Seiteneffekten!
> Dadurch hohe Test- und Wartbarkeit
17 Unternehmenspräsentation
18. III – Funktionale Komponenten in Scala
► Scala integriert die FP als Teil der Objektorientierung
> Funktionen: Objekte mit einer unsichtbaren „apply“-Funktion
{ i => i.toString }
=> new Function(){ def apply(i: Any) = i.toString() }
> Algebraische Datentypen: Case Klassen
abstract sealed class Frucht
case class Apfel(sauer: Boolean) extends Frucht
Case class Birne(sorte: String) extends Frucht
> Pattern Matching
def welcheFrucht(frucht: Frucht) = frucht match {
case Apfel(sauer) => println(„Ich bin ein Apfel und sauer:“ + sauer)
case Birne(sorte) => println(„Ich bin eine Birne und heiße:“+ sorte)
}
18 Unternehmenspräsentation
19. III - Objektorientierung in Scala
► Klassen
> Wie in Java, nur kürzer!
> Case-Klassen: Quick-and-Dirty Datentypen mit equals/hashcode/toString
► Objekte
> Singletons als Sprachkonstrukt ersetzen die Statics
> Unterstützten Vererbung
> Package Objekt: Definition von package-weiten Funktionen / Werten
► Traits
> Wie Java-Interfaces, nur mit Implementierungen!
> Erlauben eingeschränkte Mehrfachvererbung: (abstrakt, ohne Konstruktor)
► Strukturelle Typen
> Wie Java-Interfaces, nur ohne Vererbung
> „Statisch typisiertes“ Ducktyping
19 Unternehmenspräsentation
20. III – Objektorientierung: Das Typsystem
Objektorientierung mit einer aufgeräumten Typhierarchie
Supertypen
► Any: Alle Objekte
► AnyRef: Alle Referenzen
> java.lang.Object
► AnyVal: Alle „Primitiven“
Subtypen
► Null: Subtyp aller AnyRefs
► Nothing: Subtyp aller Typen
> Ausstieg per Exception
Besonderheit
► Unit: Leerer Wert == void
20 Scala
21. III - Erweiterbarkeit durch FP und OO
In welcher Hinsicht ist Scala erweiterbar?
► Neue Datenstrukturen (Objektorientiert)
> Vererbung
► Neue Operationen (Funktional)
> Case Classes mit Pattern Matching
In jede Richtung mit impliziten Konvertierungen und Parametern..
Scala
22. III – Das Typsystem: Scalas Sprachebenen
Statements
Geben Werte zurück, erzeugen Seiteneffekte
def a = { 3 }
println („Hello World“)
Templates
Definition von Objekten und Klassen
trait Printable { … }
class Printer extends Printable{ … }
object Printer extends Printer{ … }
new { … } with Printable { … }
Typen
Kontrakte aus Klassen, Traits und Methoden
type Jlist[T] = java.util.List[T]
type Closeable = { def close() }
def onClosableList(c : Closeable with Jlist[T])
22 Unternehmenspräsentation
23. Livecoding
Themen
► Objektorientierung
► Funktionale Programmierung mit Case-Klassen / Pattern Matching
► Integration mit Java-Klassen
23 Unternehmenspräsentation
25. Einsatzszenarien
Scalas Stärken
► Skripting
► Buildskripte (SBT, baut auf Maven auf)
► Applikationsentwicklung
► Ersatz für XML-Konfigurationsdateien
► Unit-Testing (ScalaTest, Specs)
► Web-Entwicklung mit Lift
► Domain Specific Languages
Javas Stärken
► GUI-Layouting (GUI-Builder erzeugen immer Java-Code)
► GWT (Es gibt keinen Bytecode-Compiler für GWT)
► JPA-Beans (?)
Scala
26. Kritikpunkte
► Sprache
> XML-Support auf Sprachebene
> Keine dynamische Typisierung
> Komplexität?
– Sprache: Weniger komplex als Java, C# und C++…
– Fehlermeldungen des Compilers nicht immer hilfreich, v.a. bei impliziten
Konvertierungen
– Flexible Syntax erfordert Konventionen
– Viele Sprachfeatures sind für Library-Designer gedacht und werden nur
selten in der Applikationsentwicklung gebraucht
► Tooling
> Die IDEs (Noch)
> Auf die Java-Sprache bezogene Tools nicht einsetzbar (GWT)
Scala
27. Ich danke euch für eure Aufmerksamkeit.
Weitere JVM-Sprachen:
Groovy (dyn)
►
Clojure (dyn)
►
Fantom (stat/dyn)
►
JRuby (dyn)
►
Gosu (stat)
►
27 Unternehmenspräsentation