Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU...

50
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

Transcript of Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU...

Page 1: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

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

Page 2: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 2

Inhalt

Einführung

Spracherweiterungen und Performance

Design Patterns mit Python

Page 3: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 3

Inhalt Einführung

Was ist ein Objekt?

Page 4: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 4

Inhalt Einführung

Objekte benutzen

Page 5: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 5

Inhalt Einführung

Objekte erstellen

Page 6: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 6

Inhalt Einführung

Methoden aufrufen

Page 7: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 7

Inhalt Einführung

Eigene Klassen

Page 8: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 8

Inhalt Einführung

Eigene Klassen – die __init__ Methode

Objektreferenzierung um auf Objektattribute zuzugreifen

Page 9: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 9

Inhalt Einführung

Alles ist ein Objekt!

Page 10: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 10

Inhalt Einführung

First class functions, z.B. Closures und Lambda Ausdrücke

Page 11: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 11

Inhalt Einführung

Meta Programming mit on-the-fly method patching

(bind unbound methods)

Page 12: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 12

Inhalt Einführung

Vererbung und Mehrfachvererbung

Page 13: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 13

Inhalt Einführung

Vererbung und Mehrfachvererbung – Diamantenproblem

von http://en.wikipedia.org/wiki/Diamond_problem

Page 14: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 14

Inhalt Einführung

Vererbung und Mehrfachvererbung – super()

Page 15: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 15

Inhalt Einführung Spracherweiterungen

Spracherweiterungen

Page 16: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 16

Inhalt Einführung Spracherweiterungen

Lambda

Page 17: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 17

Inhalt Einführung Spracherweiterungen

List comprehensions

Page 18: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 18

Inhalt Einführung Spracherweiterungen

List comprehensions

Page 19: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 19

Inhalt Einführung Spracherweiterungen

Closures

Page 20: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 20

Inhalt Einführung Spracherweiterungen

Closures – Doing it wrong

Page 21: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 21

Inhalt Einführung Spracherweiterungen

Closures – Doing it better – Array idiom

Page 22: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 22

Inhalt Einführung Spracherweiterungen

Closures – Doing it even better – Funktionsattribut

Page 23: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 23

Inhalt Einführung Spracherweiterungen

Decorator

Page 24: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 24

Inhalt Einführung Spracherweiterungen

Decorator – naiver Ansatz

Page 25: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 25

Inhalt Einführung Spracherweiterungen

Decorator – Python Syntax

Page 26: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 26

Inhalt Einführung Spracherweiterungen

Geschwindigkeitsmessungen

Page 27: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 27

Inhalt Einführung Spracherweiterungen

Geschwindigkeitsmessungen - Lambda

Page 28: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 28

Inhalt Einführung Spracherweiterungen

Geschwindigkeitsmessungen - Closure

Page 29: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 29

Inhalt Einführung Spracherweiterungen

Geschwindigkeitsmessungen – List Comprehension

Page 30: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

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."

Page 31: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

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?

Page 32: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

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)

Page 33: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 33

Inhalt Einführung Spracherweiterungen Design Patterns

Singleton in Python

Klassisch

Borg

Alternativ

import Singleton

Page 34: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

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

Page 35: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

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

Page 36: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 36

Inhalt Einführung Spracherweiterungen Design Patterns

Iterator in Python

Page 37: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 37

Inhalt Einführung Spracherweiterungen Design Patterns

Observer

Page 38: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 38

Inhalt Einführung Spracherweiterungen Design Patterns

Observer mit Python - klassisch

Page 39: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 39

Inhalt Einführung Spracherweiterungen Design Patterns

Observer mit Python - klassisch

Page 40: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 40

Inhalt Einführung Spracherweiterungen Design Patterns

Observer mit Python

mit Class Functionen und Closures

Page 41: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 41

Inhalt Einführung Spracherweiterungen Design Patterns

Proxy mit Python

Page 42: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 42

Inhalt Einführung Spracherweiterungen Design Patterns

Proxy mit Python

Page 43: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 43

Inhalt Einführung Spracherweiterungen Design Patterns

Adapter

Objekt Adapter

Klassen Adapter

Page 44: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 44

Inhalt Einführung Spracherweiterungen Design Patterns

Adapter - Objekt Adapter

Python Java

Page 45: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 45

Inhalt Einführung Spracherweiterungen Design Pattern

Adapter - Klassen Adapter

Page 46: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 46

Inhalt Einführung Spracherweiterungen Design Pattern

Page 47: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 47

Zusammenfassung

Page 48: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 48

praktischer Teil

Page 49: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

TU Dresden, 27.01.2011 OOP mit Python 49

Fragen?

Antworten!

Page 50: Objektorientiertes Programmieren mit Pythonst.inf.tu-dresden.de/files/teaching/ws10/ps/... · TU Dresden, 27.01.2011 OOP mit Python 30 Inhalt Einführung Spracherweiterungen Design

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