Objektorientiertes Programmieren mit Python Eine Einführung in OOP mit Python mit Fokus auf Design Patterns
Proseminar Softwaretechnologie mit Python – OOP mit Python
Dresden, 25.11.2010
TU Dresden, 27.01.2011 OOP mit Python 2
Inhalt
Einführung
Spracherweiterungen und Performance
Design Patterns mit Python
TU Dresden, 27.01.2011 OOP mit Python 3
Inhalt Einführung
Was ist ein Objekt?
TU Dresden, 27.01.2011 OOP mit Python 4
Inhalt Einführung
Objekte benutzen
TU Dresden, 27.01.2011 OOP mit Python 5
Inhalt Einführung
Objekte erstellen
TU Dresden, 27.01.2011 OOP mit Python 6
Inhalt Einführung
Methoden aufrufen
TU Dresden, 27.01.2011 OOP mit Python 7
Inhalt Einführung
Eigene Klassen
TU Dresden, 27.01.2011 OOP mit Python 8
Inhalt Einführung
Eigene Klassen – die __init__ Methode
Objektreferenzierung um auf Objektattribute zuzugreifen
TU Dresden, 27.01.2011 OOP mit Python 9
Inhalt Einführung
Alles ist ein Objekt!
TU Dresden, 27.01.2011 OOP mit Python 10
Inhalt Einführung
First class functions, z.B. Closures und Lambda Ausdrücke
TU Dresden, 27.01.2011 OOP mit Python 11
Inhalt Einführung
Meta Programming mit on-the-fly method patching
(bind unbound methods)
TU Dresden, 27.01.2011 OOP mit Python 12
Inhalt Einführung
Vererbung und Mehrfachvererbung
TU Dresden, 27.01.2011 OOP mit Python 13
Inhalt Einführung
Vererbung und Mehrfachvererbung – Diamantenproblem
von http://en.wikipedia.org/wiki/Diamond_problem
TU Dresden, 27.01.2011 OOP mit Python 14
Inhalt Einführung
Vererbung und Mehrfachvererbung – super()
TU Dresden, 27.01.2011 OOP mit Python 15
Inhalt Einführung Spracherweiterungen
Spracherweiterungen
TU Dresden, 27.01.2011 OOP mit Python 16
Inhalt Einführung Spracherweiterungen
Lambda
TU Dresden, 27.01.2011 OOP mit Python 17
Inhalt Einführung Spracherweiterungen
List comprehensions
TU Dresden, 27.01.2011 OOP mit Python 18
Inhalt Einführung Spracherweiterungen
List comprehensions
TU Dresden, 27.01.2011 OOP mit Python 19
Inhalt Einführung Spracherweiterungen
Closures
TU Dresden, 27.01.2011 OOP mit Python 20
Inhalt Einführung Spracherweiterungen
Closures – Doing it wrong
TU Dresden, 27.01.2011 OOP mit Python 21
Inhalt Einführung Spracherweiterungen
Closures – Doing it better – Array idiom
TU Dresden, 27.01.2011 OOP mit Python 22
Inhalt Einführung Spracherweiterungen
Closures – Doing it even better – Funktionsattribut
TU Dresden, 27.01.2011 OOP mit Python 23
Inhalt Einführung Spracherweiterungen
Decorator
TU Dresden, 27.01.2011 OOP mit Python 24
Inhalt Einführung Spracherweiterungen
Decorator – naiver Ansatz
TU Dresden, 27.01.2011 OOP mit Python 25
Inhalt Einführung Spracherweiterungen
Decorator – Python Syntax
TU Dresden, 27.01.2011 OOP mit Python 26
Inhalt Einführung Spracherweiterungen
Geschwindigkeitsmessungen
TU Dresden, 27.01.2011 OOP mit Python 27
Inhalt Einführung Spracherweiterungen
Geschwindigkeitsmessungen - Lambda
TU Dresden, 27.01.2011 OOP mit Python 28
Inhalt Einführung Spracherweiterungen
Geschwindigkeitsmessungen - Closure
TU Dresden, 27.01.2011 OOP mit Python 29
Inhalt Einführung Spracherweiterungen
Geschwindigkeitsmessungen – List Comprehension
TU Dresden, 27.01.2011 OOP mit Python 30
Inhalt Einführung Spracherweiterungen Design Patterns
Design Patterns
mit Python
Ron Jeffries:
"Small Boy with a Patterns Book. After spending a bunch of time thinking about these ideas, over a few days now, I finally recognized in myself what I call "Small Boy with a Patterns Book". You can always tell when someone on your team is reading the Gang of Four book (Gamma, et al., Design Patterns). Every day or so, this person comes in with a great idea for a place in the system that is just crying out for the use of Composite, or whatever chapter he read last night. There’s an old saying: To a small boy with a hammer, everything looks like a nail. As programmers, we call into the same trap all too often. We learn about some new technology or solution, and we immediately begin seeing places to apply it."
TU Dresden, 27.01.2011 OOP mit Python 31
Inhalt Einführung Spracherweiterungen Design Patterns
Design Patterns
• Creational:
Art und Weise der Objektinstantiierung
• Structural:
Zusammensetzung von Klassen und Objekten
• Behavioral:
Wie interagieren Klassen und Objekte und wie teilen sie sich Verantwortlichkeiten?
TU Dresden, 27.01.2011 OOP mit Python 32
Inhalt Einführung Spracherweiterungen Design Patterns
Singleton in C++ und Java
C++
Java (ab v.5 / 1.6)
TU Dresden, 27.01.2011 OOP mit Python 33
Inhalt Einführung Spracherweiterungen Design Patterns
Singleton in Python
Klassisch
Borg
Alternativ
import Singleton
TU Dresden, 27.01.2011 OOP mit Python 34
Inhalt Einführung Spracherweiterungen Design Patterns
Factory und Abstract Factory
von http://en.wikipedia.org/wiki/Abstract_factory_pattern
TU Dresden, 27.01.2011 OOP mit Python 35
Inhalt Einführung Spracherweiterungen Design Patterns
Factory Method in Python und Java (*)
Python
Java
(*) Bitte mit Vorsicht genießen
TU Dresden, 27.01.2011 OOP mit Python 36
Inhalt Einführung Spracherweiterungen Design Patterns
Iterator in Python
TU Dresden, 27.01.2011 OOP mit Python 37
Inhalt Einführung Spracherweiterungen Design Patterns
Observer
TU Dresden, 27.01.2011 OOP mit Python 38
Inhalt Einführung Spracherweiterungen Design Patterns
Observer mit Python - klassisch
TU Dresden, 27.01.2011 OOP mit Python 39
Inhalt Einführung Spracherweiterungen Design Patterns
Observer mit Python - klassisch
TU Dresden, 27.01.2011 OOP mit Python 40
Inhalt Einführung Spracherweiterungen Design Patterns
Observer mit Python
mit Class Functionen und Closures
TU Dresden, 27.01.2011 OOP mit Python 41
Inhalt Einführung Spracherweiterungen Design Patterns
Proxy mit Python
TU Dresden, 27.01.2011 OOP mit Python 42
Inhalt Einführung Spracherweiterungen Design Patterns
Proxy mit Python
TU Dresden, 27.01.2011 OOP mit Python 43
Inhalt Einführung Spracherweiterungen Design Patterns
Adapter
Objekt Adapter
Klassen Adapter
TU Dresden, 27.01.2011 OOP mit Python 44
Inhalt Einführung Spracherweiterungen Design Patterns
Adapter - Objekt Adapter
Python Java
TU Dresden, 27.01.2011 OOP mit Python 45
Inhalt Einführung Spracherweiterungen Design Pattern
Adapter - Klassen Adapter
TU Dresden, 27.01.2011 OOP mit Python 46
Inhalt Einführung Spracherweiterungen Design Pattern
TU Dresden, 27.01.2011 OOP mit Python 47
Zusammenfassung
TU Dresden, 27.01.2011 OOP mit Python 48
praktischer Teil
TU Dresden, 27.01.2011 OOP mit Python 49
Fragen?
Antworten!
TU Dresden, 27.01.2011 OOP mit Python 50
Quellen [1] Voidspace. Introduction to OOP with Python. URL http://www.voidspace.org.uk/python/articles/OOP.shtml,
10/26/2010 - 11:40.
[2] http://docs.python.org Python v2.7 documentation for classes URL http://docs.python.org/tutorial/classes.html, 10/26/2010 - 13:30.
[3] http://docs.python.org Python v2.7 documentation for functions URL http://docs.python.org/library/functions.html, 10/26/2010 - 13:30.
[4] http://diveintopython.org Dive Into Python - Lambda Functions URL http://diveintopython.org/power_of_introspection/lambda_functions.htm 10/30/2010 - 22:30.
[5] Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad, and Michael Stal. Pattern-Oriented Software Architecture – A System of Patterns, John Wiley & Sons, 1996. 457 pages.
[6] Paul Dubois. Introduction to Python, Tutorial at TOOLS USA 96, August 1996
[7] Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns – Elements of Reusable Object-Oriented Software, Addison-Wesley, 1995. 395 pages.
[8] Vespe Savikko. Design Patterns in Python, Tampere University of Technology URL http://www.python.org/workshops/1997-10/proceedings/savikko.html
[9] Alex Martelli ([email protected]). Design Patterns in Python, Google URL http://www.aleax.it/gdd_pydp.pdf
[10] Joe Gregorio (Google). (The Lack of) Design Patterns in Python, OSCON 5:20pm Thursday, 07/24/2008 Portland 256 URL http://assets.en.oreilly.com/1/event/12/_The%20Lack%20of_%20Design %20Patterns%20in%20Python%20Presentation.pdf