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

Post on 21-Jul-2020

7 views 0 download

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

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 (aleax@google.com). 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