Oop2011 jenseits von fakultät und_fibunacci_alfert_loechner

  • Published on
    27-Dec-2014

  • View
    389

  • Download
    0

Embed Size (px)

DESCRIPTION

Funktionale Programmierung bietet viele Mglichkeiten, die Herausforderungen moderner Multi-Core-Rechner einfacher als mit klassischer OO-Programmierung zu bewltigen. Dadurch verlieren Objekte ihre dominante Rolle und damit die klassische Design- und Architekturmuster einen Teil ihrer Basis. Wir zeigen, welche Muster nicht mehr bentigt werden, welche in abgewandelter Form weiterhin bestehen und welche neuen Muster und Konstruktionsprinzipien wichtig und hilfreich sind. Die Grundideen knnen auch in der OO-Welt profitabel eingesetzt werden.

Transcript

  • 1. Jenseits von Fakultt und Fibonacci:Architektur Funktionaler ProgrammeDr. Klaus AlfertDr. Bernd Lchner Folie 1 Januar 2011 Dr. Klaus Alfert Dr. Bernd Lchner Zhlke 2011
  • 2. Warum istFunktionale Programmierungin vieler Munde? Folie 3 Januar 2011 Dr. Klaus Alfert Dr. Bernd Lchner Zhlke 2011
  • 3. Sun T 2 Niagara 2 2007, 8 Cores 8 Threads
  • 4. Intel i7 Nehalem 2008, 4 Cores 2 Threads
  • 5. IBM POWER 7, 2010, 8 Cores 4 Threads
  • 6. Oracle T 3 Rainbow Falls 2010, 16 Cores 8 Threads
  • 7. Intel Cloud Computing on a Chip 2009, 48 Cores (Prototyp)
  • 8. Warum ist Nebenlufigkeitmit Objekten schwierig? Folie 9 Januar 2011 Dr. Klaus Alfert Dr. Bernd Lchner Zhlke 2011
  • 9. Objekte haben eine Identitt :2 :3 :1
  • 10. Objekte haben einen (lokalen) Zustand :2 :3 :1
  • 11. Objekte haben Verhalten :2 :3 :1
  • 12. Multithreading erfordert Locks :2 :3 :1
  • 13. Ein hoher Grad an Nebenlufigkeit wirdleicht unbersichtlich
  • 14. Ein hoher Grad an Nebenlufigkeit wirdleicht unbersichtlich
  • 15. Wie kann funktionaleProgrammierung hier helfen?
  • 16. Was unterscheidet FPvon OOP? Folie 17 Januar 2011 Dr. Klaus Alfert Dr. Bernd Lchner Zhlke 2011
  • 17. Zu den Programmbeispielen Beispiele in Haskell & Erlang Haskell ist puristisch elegant Erlang hat Industrial-Strength Die Beispiele sind aber alle bertragbar in andere funktionaleF# Programmiersprachen. Zhlke 2011
  • 18. A LISP programmer knowsthe value of everything, but the cost of nothing. Alan J. Perlis Epigrams of Programming Zhlke 2011
  • 19. Werte, Variablen, VernderlicheWas sind imperative Variablen? Namen fr Adressen von Speicherzellen Abstraktionsniveau: Assembler x 42 Objekte haben eine Identitt: Entspricht einer Adresse von SpeicherzellenWas sind funktionale Variablen? Namen fr Werte: Sei x beliebig, aber fest Variablen werden an Werte gebunden x Abstraktionsniveau: Mathematik 42 Notwendig: Effiziente Abbildung auf Speicherzellen durch Laufzeitsystem Zhlke 2011
  • 20. Objekte versus Werte :1 42 :1 42 CopyGleich, aber Gleich undnicht identisch identisch :2 42 42 Funktionen erzeugen aus alten Werte neue!
  • 21. Zhlke 2011
  • 22. Rekursion statt Iteration: Hyper-Fakultt(Sloane: A Handbook of Integer Sequences)Fakultt ist fr Kinder Hyper-Fakultt ist fr Erwachsene n H (n) k k k 1H(n) = 1, 1, 4, 108, 27648, 86400000, 4031078400000,3319766398771200000, 55696437941726556979200000,21577941222941856209168026828800000,215779412229418562091680268288000000000000000,61564384586635053951550731889313964883968000000000000000, Zhlke 2011
  • 23. Rekursion statt Iteration: Hyper-Fakultt(Sloane: A Handbook of Integer Sequences)Imperativ: Zuweisungsorientiert Rekursiv: Werteorientierthfac(n): hfac(n)-> r := 1; if n == 0 while n > 0 do then 1 r := r * n^n; else n^n * hfac(n-1) n := n 1; od return r; Zhlke 2011
  • 24. Rekursion statt Iteration: Hyper-Fakultt(Sloane: A Handbook of Integer Sequences)Imperativ: Zuweisungsorientiert Berechnung: hfac(3)hfac(n): r := 1; while n > 0 do n 1 0 3 2 r := r * n^n; n := n 1; od r ? 108 27 1 return r; Zhlke 2011
  • 25. Rekursion statt Iteration: Hyper-Fakultt(Sloane: A Handbook of Integer Sequences)Imperativ: Zuweisungsorientiert Rekursiv: Werteorientierthfac(n): hfac(n)-> r := 1; if n == 0 while n > 0 do then 1 r := r * n^n; else n^n * hfac(n-1) n := n 1; od return r; Zhlke 2011
  • 26. Rekursion statt Iteration: Hyper-Fakultt(Sloane: A Handbook of Integer Sequences)Berechnung: hfac(3) 108 Rekursiv: Werteorientiert 3 hfac(n)-> n fun if n == 0 if n == 0 then 1 then 1 else n^n * hfac(n-1) hfac(2) else n^n * hfac(n-1) 2 4 fun n if n == 0 then 1 1 else n^n

Recommended

View more >