26
1 Hier wird Wissen Wirklichkeit Modul: Programmierung B-PRG Grundlagen der Programmierung 1 – Teil 1 – V10 Klassen Prof. Dr. Detlef Krömker Professur für Graphische Datenverarbeitung Institut für Informatik Fachbereich Informatik und Mathematik (12) Prof. Dr. Detlef Krömker 2 Hier wird Wissen Wirklichkeit Programmieren 1 – Teil 1 V9 WS 2005/2006 Rückblick Wir haben wichtige Datenstrukturen kennen gelernt Felder (array) Listen (list) Mengen (set) Stapel (stack) (Warte-)Schlange (queue) Verbund (struct) Dictionaries Weitere und deren Realisierungen in Python!

Modul: Programmierung B-PRG Grundlagen der Programmierung … · 2006-11-17 · 4 7 Programmieren 1 – Teil 1 –V9 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit WS 2005/2006

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Modul: Programmierung B-PRG Grundlagen der Programmierung … · 2006-11-17 · 4 7 Programmieren 1 – Teil 1 –V9 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit WS 2005/2006

1

Hier wird Wissen Wirklichkeit

Modul: Programmierung B-PRGGrundlagen der Programmierung 1 – Teil 1 – V10

Klassen

Prof. Dr. Detlef KrömkerProfessur für Graphische DatenverarbeitungInstitut für InformatikFachbereich Informatik und Mathematik (12)

Prof. Dr. Detlef Krömker2 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Rückblick

Wir haben wichtige Datenstrukturen kennen gelernt

Felder (array) Listen (list)Mengen (set) Stapel (stack)(Warte-)Schlange (queue) Verbund (struct)Dictionaries Weitere

und deren Realisierungen in Python!

Page 2: Modul: Programmierung B-PRG Grundlagen der Programmierung … · 2006-11-17 · 4 7 Programmieren 1 – Teil 1 –V9 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit WS 2005/2006

2

Prof. Dr. Detlef Krömker3 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Rückblick

Zahlen

Zeichen

Kollektionen

Wahrheitswerte

aufrufbar

None

Sequenzen

Abbildungen

Mengen

elementare

Prozeduren

Klassen

Ganzzahlen

Gleitkommazahl.

div. Kodierungendiv. Kodierungen

integer

Komplexe Zahlen

long

float

decimal

ustring

complex

string

class

def

list [ ]

dictionary { }

tupel ( )

Python Objekte

set ( )frozenset ( )

unmutable

mutable

Aufzählungstypen

Prof. Dr. Detlef Krömker4 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Wo sind wir in Teil1?

V 0 Begrüßung und Einführung----V 1 Daten – Information – WissenV 2 Computer – Algorithmus – ProgrammV 3 Variablen – Datentypen – Objekte ----V 4 Elementare numerische DatentypenV 5 Zeichenketten----V 6 Verzweigungen und SchleifenV 7 Prozeduren----V 8 Aggregierte DatentypenV 9 KlassenV10 Graphen und BäumeV11 Bibliotheken

Page 3: Modul: Programmierung B-PRG Grundlagen der Programmierung … · 2006-11-17 · 4 7 Programmieren 1 – Teil 1 –V9 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit WS 2005/2006

3

Prof. Dr. Detlef Krömker5 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Noch ein Rückblick: Objekte

Der Begriff Objekt im Kontext der Objektorientierten Programmierung (Abkürzung OOP) .

Aus der Blickrichtung der Datentypen ist OOP eine Variante, bei der zusammengehörige Daten (Attribute) und die darauf arbeitende Programmlogik (Methoden) zu Einheiten zusammengefasst werden, den so genannten Objekten.

Prof. Dr. Detlef Krömker6 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Prozedurales ObjektorientiertesProgrammieren Programmieren

Page 4: Modul: Programmierung B-PRG Grundlagen der Programmierung … · 2006-11-17 · 4 7 Programmieren 1 – Teil 1 –V9 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit WS 2005/2006

4

Prof. Dr. Detlef Krömker7 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Unser heutiges Lernziel

In der Objektorientierten Programmierung ist das Konzept der Klasse

grundlegend für die Realisierung verschiedener Paradigmen:

‣ Abstraktion,

‣ Kapselung,

‣ Polymorphie,

‣ Vererbung,

‣ Introspektion.

Diese sind zu verstehen und deren Realisierung in Python kennen zu

lernen.

Prof. Dr. Detlef Krömker8 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Und bitte beachten Sie!

Programmieren erfordert Disziplin, Ausdauer,

abstraktes Denkvermögen, Kreativität und hohe

Lernbereitschaft!

Warum sage ich Ihnen das immer wieder?

‣ Leistungsnachweis: etwa 40 - 50 % Programmieraufgaben

‣ etwa 20% Multiple Choice – haben auch Python-Fragen!

‣ Sie können schon 10% vorab haben! Rechnen Sie selbst ... es geht

theoretisch ohne Programmieren, aber es wird schwer!

‣ Erfahrungen mit dem PRG-Praktikum (3. Semester) ...

Klage dort: Wir haben zu wenig Programmiererfahrung!

Page 5: Modul: Programmierung B-PRG Grundlagen der Programmierung … · 2006-11-17 · 4 7 Programmieren 1 – Teil 1 –V9 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit WS 2005/2006

5

Prof. Dr. Detlef Krömker9 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Übersicht

Objekte – Klassen – Instanzen

‣ Klassen und Instanzen‣ Kapselung‣ Vererbung und Polymorphie‣ Introspektion‣ Klassenbibliotheken

Klassen in Python

‣ Die class - Anweisung‣ Klasseninstanzen‣ Referenzzählung und Zerstörung von Instanzen‣ Vererbung‣ Datenkapselung‣ Überladen von Operatoren‣ Introspektion‣ Zusammenfassung der Namenskonventionen

Prof. Dr. Detlef Krömker10 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Paradigmen der OO-Programmierung

‣ Abstraktion

‣ Kapselung

‣ Polymorphie

‣ Vererbung

‣ Introspektion

‣ Klassen

‣ Methoden

Page 6: Modul: Programmierung B-PRG Grundlagen der Programmierung … · 2006-11-17 · 4 7 Programmieren 1 – Teil 1 –V9 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit WS 2005/2006

6

Prof. Dr. Detlef Krömker11 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Klassen und Instanzen (1)

Klassen sind Vorlagen, aus denen Objekte (Instanzen) zur Laufzeit erzeugt werden.

‣ Im Programm werden dann nicht einzelne Objekte, sondern eine Klasse gleichartiger Objekte definiert.

‣ Klassen sind die „Konstruktionspläne“ (Schablonen) für Objekte.

‣ Die Klasse entspricht in etwa einem Datentyp, geht aber darüber hinaus: Sie legt nicht nur die Datenstrukturen fest, aus denen die mit Hilfe der Klassen erzeugten Objekte bestehen, sie definiert zudem die Algorithmen (Methoden).

Prof. Dr. Detlef Krömker12 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Klassen und Instanzen (2)

‣ Im Kontext der Datenstrukturen (Datentypen) realisieren Klassen also einen konstruktiven Weg neue benutzerspezifische Datenstrukturenund die darauf arbeitenden Methoden zu beschreiben (zu programmieren).

‣ In rein objektorientierten Sprachen wie Smalltalk und auch in Python werden dem Prinzip alles ist ein Objekt folgend, auch elementare Typen wie Ganzzahlen (Integer) durch Objekte repräsentiert.

‣ Auch Klassen selbst sind hier Objekte, die wiederum Ausprägungenvon Metaklassen sind.

‣ Viele Sprachen, unter anderem C++ und Java folgen allerdings nicht der „reinen Lehre“.

Page 7: Modul: Programmierung B-PRG Grundlagen der Programmierung … · 2006-11-17 · 4 7 Programmieren 1 – Teil 1 –V9 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit WS 2005/2006

7

Prof. Dr. Detlef Krömker13 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Klassen

‣ Die Struktur einer Klasse bilden die Attribute (auch Eigenschaften).

‣ Attribute selbst können auch wieder komplexe Datentypen (z.B. Listen, Mengen, Dictionaries) oder Klassen sein.

‣ Aus Klassen erzeugte Objekte werden Instanzen (Exemplare) der Klasse genannt.

‣ In manchen Programmiersprachen gibt es zu jeder Klasse ein bestimmtes Objekt (Klassenobjekt), das dazu dient, die Klasse zur Laufzeit zu repräsentieren; dieses Klassenobjekt ist dann z.B. zuständig für die Erzeugung (Instanzierung) von Objekten der Klasse durch einen Konstruktor.

Prof. Dr. Detlef Krömker14 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Kapselung (encapsulation):

bezeichnet den kontrollierten Zugriff auf Objekte.

Anmerkung: Das Kapselungsprinzip gibt es auch unabhängig von objektorientierten Konzepten, z.B. als Modularisierungsprinzip.

Vom Innenleben eines Objektes soll der Benutzer (Programmierer des aufrufenden Objekts) möglichst wenig wissen müssen (Geheimnisprinzip, information hiding).

Durch die Kapselung werden nur Informationen über das "Was" eines Objektes (was es leistet) nach außen sichtbar, nicht aber das "Wie" (die interne Repräsentation).

Es wird eine Schnittstelle nach außen definiert und zugleich dokumentiert.

Page 8: Modul: Programmierung B-PRG Grundlagen der Programmierung … · 2006-11-17 · 4 7 Programmieren 1 – Teil 1 –V9 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit WS 2005/2006

8

Prof. Dr. Detlef Krömker15 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Kapselung in UML

Attribute und Methoden können sein:

public (+): Zugreifbar für alle Ausprägungen (auch die anderer Klassen)

private (-): Nur für Ausprägungen der eigenen Klasse zugreifbar

protected (#): Nur für Ausprägungen der eigenen Klasse und von Spezialisierungen der selben zugreifbar

package (~): erlaubt den Zugriff für alle Elemente innerhalb des eigenen Pakets

Prof. Dr. Detlef Krömker16 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Vorteile der Kapselung (1)

‣ Dadurch, dass die Implementierung eines Objektes anderen Objekten nicht bekannt ist, kann die Implementierung geändert werden, ohne die Zusammenarbeit mit anderen Objekten zu beeinträchtigen.

‣ Beim Zugriff über eine Zugriffsfunktion spielt es von außen keine Rolle, ob diese Funktion 1:1 im Inneren des Objekts existiert, das Ergebnis einer Berechnung ist, oder möglicherweise aus anderen Quellen (z.B. einer Datei oder Datenbank) stammt.

‣ Erhöhte die Übersichtlichkeit, da nur die öffentliche Schnittstelle eines Objektes betrachtet werden muss.

‣ Deutlich verbesserte Testbarkeit, Stabilität und Änderbarkeit der Software

Page 9: Modul: Programmierung B-PRG Grundlagen der Programmierung … · 2006-11-17 · 4 7 Programmieren 1 – Teil 1 –V9 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit WS 2005/2006

9

Prof. Dr. Detlef Krömker17 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Beispiel:

‣ Ein Bankkonto könnte beispielsweise folgendermaßen definiert werden:

‣ hat eine Kontonummer (Attribut name) ‣ hat einen Kontoinhaber (Referenz auf einen Kunden) ‣ hat eine Liste von Buchungen (Liste von Referenzen auf Buchungen) ‣ kann eine Einzahlung durchführen (Methode deposit) ‣ kann eine Auszahlung durchführen (Methode withdraw)‣ kann den Saldostand mitteilen (Methode inquiry)

Dieses und die zugehörige Syntax kennt der anwendende Programmierer ... nicht aber wie es implementiert ist!

Prof. Dr. Detlef Krömker18 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Durchatmen!Paradigmen der OO-Programmierung

‣ Abstraktion

‣ Kapselung

‣ Polymorphie

‣ Vererbung

‣ Introspektion

‣ Klassen

‣ Methoden

Page 10: Modul: Programmierung B-PRG Grundlagen der Programmierung … · 2006-11-17 · 4 7 Programmieren 1 – Teil 1 –V9 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit WS 2005/2006

10

Prof. Dr. Detlef Krömker19 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Vererbung und Polymorphie

Klassen können von anderen Klassen abgeleitet werden (Vererbung).

‣ Dabei erbt die Klasse die Datenstruktur (Attribute) und die Methoden von der vererbenden Klasse (Basisklasse).

‣ In der abgeleiteten Klasse (Subklasse) können Methoden der Basisklasse in den meisten Programmiersprachen überschrieben werden, d.h. einzelne Methode neu implementiert, und eigene Methoden und Daten (Attribute) hinzufügt werden.

‣ Ein Objekt der abgeleiteten Klasse kann überall verwendet werden, wo ein Objekt der Basisklasse erwartet wird; überschriebene Methoden werden dann auf der abgeleiteten Klasse ausgeführt (Polymorphie).

‣ Verschiedene Objekte können auf die gleiche Nachricht unterschiedlich reagieren.

Prof. Dr. Detlef Krömker20 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Vererbung und Polymorphie (2)

Die Nutzung der Vererbung bietet sich an, wenn es Objekte gibt, die konzeptionell aufeinander aufbauen. Gegebenenfalls lassen sich Objektdefinitionen von vorneherein so aufteilen, dass identischeMerkmale in der Definition eines "vererbenden" Objektes zusammengefasst werden.

Unter bestimmten Voraussetzungen können Algorithmen, die auf denSchnittstellen eines bestimmten Objekttypes operieren, auch mit davon abgeleiteten Objekten zusammenarbeiten.

Page 11: Modul: Programmierung B-PRG Grundlagen der Programmierung … · 2006-11-17 · 4 7 Programmieren 1 – Teil 1 –V9 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit WS 2005/2006

11

Prof. Dr. Detlef Krömker21 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Superklasse – Subklasse ... Terminologie

‣ Vererbungsbeziehungen zwischen Objekten werden in der Regel mit Hilfe von Klassendefinitionen hergestellt.

‣ Dabei bezeichnet man die "vererbende" Klasse als Basisklasse oder auch Superklasse und die "erbende" Klasse als abgeleitete Klassebzw. Subklasse

Superklasse = Basisklasse = OberklasseSubklasse = abgeleitete Klasse = UnterklasseMethode = Elementfunktion = MemberfunktionAttribut = Datenelement = MemberExemplar = Instanz

Prof. Dr. Detlef Krömker22 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

„Das“ klassische Beispiel

Ein Fahrzeug besitzt bestimmte Attribute, diese können z.B. Höchstgeschwindigkeit, maximale Zuladung und Farbe sein.

Die Klasse Kraftfahrzeug erbt all diese Attribute, kann aber noch zusätzliche Attribute besitzen. Des Weiteren kann ein Kraftfahrzeug auch zusätzliche Methoden wie Motor starten besitzen

Die Klasse Personenkraftwagen kann dann wiederum von Kraftfahrzeug abgeleitet werden

Durch die Ableitung von Kraftfahrzeug erbt der Personenkraftwagen automatisch alle Attribute von Kraftfahrzeug und Fahrzeug.

- Höchstgeschwindigkeit- maximale_Zuladung- Farbe

Fahrzeug

- Fahren (Geschwindigkeit)

- Art_des_Antriebs- Leistung

Kraftfahrzeug

- Starte_Motor

- Anzahl der Sitzplätze

Personenkraftwagen

Page 12: Modul: Programmierung B-PRG Grundlagen der Programmierung … · 2006-11-17 · 4 7 Programmieren 1 – Teil 1 –V9 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit WS 2005/2006

12

Prof. Dr. Detlef Krömker23 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Kriterien

Ob eine Klasse in einer Vererbungsbeziehung zu einer anderen Klasse steht, lässt sich durch eine einfache "ist-ein"-Regel feststellen, also

‣ Ein Personenkraftwagen ist ein Kraftfahrzeug, ‣ ein Personenkraftwagen ist ein Fahrzeug, aber

‣ ein Fahrzeug ist kein Personenkraftwagen – weil nicht jedes Fahrzeug ein Personenkraftwagen ist!

Ein Personenkraftwagen ist auch kein Sitz, sondern ‣ ein Personenkraftwagen besitzt einen oder hat einen Sitz.

‣ Die Beziehung „hat einen“ kennzeichnet die Attribute einer Klasse.

Prof. Dr. Detlef Krömker24 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Mehrfachvererbung

Von Mehrfachvererbung spricht man, wenn eine Klasse mehrere unmittelbare Basisklassen hat.

Beispiel: Modellierung eines Amphibienfahrzeugs

hat Attribute von Landfahrzeug

als auch die von Wasserfahrzeug erbt.

Amphibienfahrzeug

- Tiefgang

Wasserfahrzeug

- Anzahl_der_Räder

Landfahrzeug

Page 13: Modul: Programmierung B-PRG Grundlagen der Programmierung … · 2006-11-17 · 4 7 Programmieren 1 – Teil 1 –V9 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit WS 2005/2006

13

Prof. Dr. Detlef Krömker25 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Implementierung der Mehrfachvererbung

Nur wenige Programmiersprachen bieten die Möglichkeit der Mehrfachvererbung.

Programmiersprachen mit Mehrfachvererbung sind z.B. C++, Eiffel und Python.

Dagegen unterstützen z.B. Smalltalk und Ada Mehrfachvererbung nicht.

Als Einwand gegen Mehrfachvererbung wird häufig genannt, dass es das Design unnötig verkompliziere und undurchsichtig machen könne?

Prof. Dr. Detlef Krömker26 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Eingeschränkte Implementierungen der Mehrfachvererbung

‣ Java, Delphi und C# bieten mit so genannten „Schnittstellen“ eine eingeschränkte Form der Mehrfachvererbung.

‣ Hierbei kann eine Klasse maximal von einer Basisklasse abgeleitet werden, jedoch kann sie beliebig viele Schnittstellen erben.

‣ Damit verpflichtet sich diese Klasse, die Methoden der Schnittstellen zu erfüllen.

‣ Mit einfacher Vererbung und eingeschränkter Mehrfachvererbung inForm von Schnittstellen sind die meisten Anforderungen an ein Software-Design realisierbar, ohne die „Nachteile“ der uneingeschränkten Mehrfachvererbung in Kauf nehmen zu müssen.

Page 14: Modul: Programmierung B-PRG Grundlagen der Programmierung … · 2006-11-17 · 4 7 Programmieren 1 – Teil 1 –V9 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit WS 2005/2006

14

Prof. Dr. Detlef Krömker27 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Introspektion

‣ Introspektion (engl introspection, auch Reflexion (engl. reflection) bedeutet, dass ein Programm Erkenntnisse über seine eigene Struktur gewinnen kann.

‣ Eine wichtige Rolle spielt Introspektion im Zusammenhang mit typsicherer Programmierung, aber auch in Fragen der Persistenz (persistente Datenhaltung von Objekten und deren Beziehungen).

‣ Introspektion ermöglicht es, z.B. zur Laufzeit Informationen über Klassen oder deren Instanzen abfragen zu können. Bei einer Methode sind das u.a. deren Sichtbarkeit, der Typ des Rückgabewertes oder der Typ der Übergabeparameter. Die Umsetzung ist dabei sprachspezifisch realisiert.

Prof. Dr. Detlef Krömker28 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Klassenbibliotheken

Klassen werden in der Regel in Form von Klassenbibliothekenzusammengefasst, die häufig thematisch organisiert sind.

vergleichbar mit Modulen oder Paketen.

Page 15: Modul: Programmierung B-PRG Grundlagen der Programmierung … · 2006-11-17 · 4 7 Programmieren 1 – Teil 1 –V9 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit WS 2005/2006

15

Prof. Dr. Detlef Krömker29 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Entwicklung von OO-Programmiersprachen (ohne Python)

Prof. Dr. Detlef Krömker30 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Klassen in Python

Klassen sind der wesentliche Mechanismus, um

‣ Datenstrukturen und neue Datentypen

zu definieren.

Klassen in Python ‣ Die class - Anweisung‣ Klasseninstanzen‣ Referenzzählung und Zerstörung von Instanzen‣ Vererbung‣ Datenkapselung‣ Überladen von Operatoren‣ Introspektion‣ Zusammenfassung der Namenskonventionen

Page 16: Modul: Programmierung B-PRG Grundlagen der Programmierung … · 2006-11-17 · 4 7 Programmieren 1 – Teil 1 –V9 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit WS 2005/2006

16

Prof. Dr. Detlef Krömker31 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Die class - Anweisung

‣ definiert eine Menge von Attributen (Variablen) genannt Klassenvariablen und

‣ Funktionen (Methoden)

Klassen werden mit der class-Anweisung definiert.

Der Rumpf einer Klasse enthält eine Folge von Anweisun-gen, die ausgeführt werden, wenn die Klasse zum ersten Mal definiert wird.

Prof. Dr. Detlef Krömker32 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Beispiel

class Account:"Eine einfache Klasse"account_type = "Basic"def __init__(self, name, balance):

"Initialisiere eine neue Account-Instanz."self.name = nameself.balance = balance

def deposit(self, amount):"Addiere zur Bilanz hinzu."self.balance = self.balance + amount

def withdraw(self, amount):"Subtrahiere von der Bilanz."self.balance = self.balance - amount

def inquiry(self):"Gib aktuelle Bilanz zurueck."return self.balance

Dokumentations-String: String-Konstante direkt nach class Name: Dieser String im Attribut _ _doc_ _ des Objekts gespeichert. Auch bei Funftionen und ModulenVon help () (eingebaute Funktion) ausgewertet

Objekte, die während der Ausführung eines Klassenrumpfes erzeugt werden, werden in ein Klassenobjekt platziert, das als Namensraum dient. Auf die Attribute der Klasse Account kann man wie folgt zugreifen:•Account.account_type•Account.__init__•Account.deposit•Account.withdraw•Account.inquiry

Klassenvariablen wie account_type sind solche, die allen Instanzen einer Klasse identisch zur Verfügung stehen, d.h. sie gehören nicht einzelnen Instanzen (für Java- und C++-Programmierer: Klassenvariablen verhalten sich wie statische Variablen).

Funktionen, die innerhalb einer Klasse definiert werden (d.h. Methoden)

operieren immer auf einer Klasseninstanz, die als erstes Argument übergeben wird.

Gemäß einer Konvention wird dieses Argument self genannt, obwohl jeder

erlaubte Bezeichner verwendet werden könnte.

Page 17: Modul: Programmierung B-PRG Grundlagen der Programmierung … · 2006-11-17 · 4 7 Programmieren 1 – Teil 1 –V9 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit WS 2005/2006

17

Prof. Dr. Detlef Krömker33 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

help (Account)>>> help (Account)Help on class Account in module __main__:

class Account| Eine einfache Klasse| | Methods defined here:| | __init__(self, name, balance)| Initialisiere eine neue Account-Instanz.| | deposit(self, amt)| Addiere zur Bilanz hinzu.| | inquiry(self)| Gib aktuelle Bilanz zurueck.| | withdraw(self, amt)| Subtrahiere von der Bilanz.| | -------------------------------------------------------------------| Data and other attributes defined here:| | account_type = 'Basic'

>>>

Prof. Dr. Detlef Krömker34 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Achtung:

Es ist wichtig festzuhalten, dass eine class-Anweisung keine Instanzen einer Klasse erzeugt (d.h. im obigen Beispiel werden keine Konten erzeugt).

Stattdessen definiert eine Klasse nur die Menge von Attributen und Methoden, über die alle Instanzen verfügen, sobald sie erzeugt werden.

Funktionen, die innerhalb einer Klasse definiert werden (d.h. Methoden) operieren immer auf einer Klasseninstanz, die als erstes Argument übergeben wird.

Page 18: Modul: Programmierung B-PRG Grundlagen der Programmierung … · 2006-11-17 · 4 7 Programmieren 1 – Teil 1 –V9 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit WS 2005/2006

18

Prof. Dr. Detlef Krömker35 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Zusammengefasst:

‣ Die class-Anweisung erzeugt ein Klassen-Objekt und weißt diesem einen Namen zu.

‣ Zuweisungen in class-Anweisungen erzeugen Klassen-Attribute, die Zustand und Verhalten von Objekten exportieren.

‣ Klassenmethoden sind (ggf. verschachtelte) def mit einem speziellen ersten Argument self, das die Instanzvariable aufnimmt.

‣ Zuweisungen an Attribute des ersten Arguments (zum Beispiel self.X = obj) in Methoden erzeugen instanzspezifische Attribute.

Prof. Dr. Detlef Krömker36 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Instanzen einer Klasse

werden erzeugt, indem ein Klassenobjekt wie eine Funktion aufgerufen wird

Dies erzeugt eine neue Instanz und ruft die Methode __init__() der Klasse auf, falls definiert.

Beispiel: zum Erzeugen von Konten

‣ a = Account("Rainer", 1000.00) ‣ b = Account("Maria", 100000000000)

Diese Anweisungen rufen folgendes auf: Account.__init__(a, "Rainer", 1000.00)

Page 19: Modul: Programmierung B-PRG Grundlagen der Programmierung … · 2006-11-17 · 4 7 Programmieren 1 – Teil 1 –V9 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit WS 2005/2006

19

Prof. Dr. Detlef Krömker37 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Beispiel

>>> a.deposit(100.00) # Ruft Account.deposit(a, 100.00) auf>>> b.withdraw (20.00)>>> print a.nameRainer>>> print a.account_typeBasic>>> a.inquiry ()1100.0>>> b.inquiry ()99999999980.0>>>

Prof. Dr. Detlef Krömker38 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Referenzzählung und Zerstörung von Instanzen

‣ Alle Instanzen verfügen über einen Referenzzähler.

‣ Sobald dieser auf Null fällt, wird die Instanz zerstört

‣ Bevor die Instanz jedoch zerstört wird, sieht der Interpreter nach, ob für das Objekt eine Methode namens __del__() definiert ist, und ruft diese gegebenenfalls auf.

‣ Gelegentlich wird ein Programm die del-Anweisung verwenden, um eine Referenz auf ein Objekt zu löschen.

Page 20: Modul: Programmierung B-PRG Grundlagen der Programmierung … · 2006-11-17 · 4 7 Programmieren 1 – Teil 1 –V9 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit WS 2005/2006

20

Prof. Dr. Detlef Krömker39 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Zusammengefasst:

‣ Eine Klasse wie eine Funktion aufzurufen class_name ()erzeugt ein neues Instanzobjekt dieser Klasse.

‣ Jedes Instanzobjekt enthält alle Klassenattribute und bekommt seinen eigenen Namensraum für Attribute.

‣ Instanzen „erben“ Attribute jener Klasse von der sie erzeugt werden, sowie all derer Oberklassen (siehe Vererbung)

Prof. Dr. Detlef Krömker40 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Vererbung

‣ ist ein Mechanismus, um eine neue Klasse zu erzeugen, indem das Verhalten einer existierenden Klasse spezialisiert oder angepasst wird.

‣ Die ursprüngliche Klasse wird Basis- der Oberklasse genannt. ‣ Die neue Klasse wird abgeleitete oder Unterklasse genannt.

‣ Wenn eine Klasse mittels Vererbung erzeugt wird, »erbt« sie die Attribute, die in ihren Basisklassen definiert sind. Allerdings darf eine abgeleitete Klasse beliebige Attribute neu definieren oder neue Attribute selbst hinzufügen.

‣ Vererbung wird in der class-Anweisung mit einer durch Kommata getrennten Liste von Namen von Oberklassen angegeben.

Page 21: Modul: Programmierung B-PRG Grundlagen der Programmierung … · 2006-11-17 · 4 7 Programmieren 1 – Teil 1 –V9 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit WS 2005/2006

21

Prof. Dr. Detlef Krömker41 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Beispiel

class A:varA = 42def method1(self):

print "Klasse A : method1"class B:

varB = 37def method1(self):

print "Klasse B : method1"def method2(self):

print "Klasse B : method2"

class C(A, B): # Erbt von A und B.varC = 3.3def method3(self):

print "Klasse C : method3"

class D: passclass E(C, D): pass

Die Suche nach einem in einer Oberklasse definierten Attribut erfolgt mittels Tiefensuche und von links nach rechts, d.h. in der Reihenfolge, in der die Oberklassen in der Klassendefinition angegeben wurden.

Die Oberklassen werden in der Reihenfolge C, A, B, D abgesucht. Für den Fall, dass mehrere Klassen das gleiche Symbol definieren, gilt, dass das zuerst gefundene Symbol genommen wird.

Prof. Dr. Detlef Krömker42 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Beispiel (2)

>>> c = C() # Erzeuge ein 'C'>>> c.method3() # Ruft C.method3(c) aufKlasse C : method3>>> c.method1() # Ruft A.method1(c) aufKlasse A : method1>>> c.varB # Greift auf B.varB zu37>>>

Page 22: Modul: Programmierung B-PRG Grundlagen der Programmierung … · 2006-11-17 · 4 7 Programmieren 1 – Teil 1 –V9 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit WS 2005/2006

22

Prof. Dr. Detlef Krömker43 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Zusammengefasst

‣ Klassen erben Attribute von allen in der Kopfzeile ihrer Klassendefinition angegebenen Klassen (Oberklassen). Die Angabe mehrerer Klassen bewirkt Mehrfachvererbung.

‣ Der Vererbungsmechanismus durchsucht zunächst die Instanz, dann deren Klasse, dann alle erreichbaren Oberklassen (von links nachrechts) und benutzt die erste gefundene Version eines Attributnamens.

Prof. Dr. Detlef Krömker44 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Datenkapselung

‣ Allgemein gilt in Python, dass alle Attribute „öffentlich“ sind, d.h. alle Attribute einer Klasseninstanz sind ohne Einschränkungen überallsichtbar und zugänglich. Das bedeutet auch, dass alles, was in einer Oberklasse definiert wurde, an Unterklassen vererbt wird und dort zugänglich ist.

‣ Dieses Verhalten ist in objektorientierten Anwendungen oft unerwünscht, weil es die interne Implementierung eines Objektes freilegt (Widerspruch zur Kapselung) und zu Konflikten zwischen den Namensräumen von Objekten einer abgeleiteten und denen ihrer Oberklassen führen kann.

Page 23: Modul: Programmierung B-PRG Grundlagen der Programmierung … · 2006-11-17 · 4 7 Programmieren 1 – Teil 1 –V9 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit WS 2005/2006

23

Prof. Dr. Detlef Krömker45 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Private Daten in Klassen

Um dies zu verhindern, werden alle Namen in einer Klasse, die mit einem doppelten Unterstrich beginnen, wie z.B. __Foo, „verstümmelt“, dass der Name die Form _Classname__Foo annimmt: name mangling

Namen in Modulen, die mit einem einzelnen Unterstrich beginnen, z.B. _Spam und jene die nicht in der __all__ -Liste des Moduls vorkommen, werden bei einem Import der Form from module import * nicht bekannt gemacht.

Dies erlaubt es einer Klasse, private Attribute zu besitzen, da solche privaten Namen in einer abgeleiteten Klasse nicht mit den gleichen privaten Namen einer Oberklasse kollidieren können.

Dies ist jedoch keine echte Kapselung (privacy), da solche Namen voll qualifiziert immer noch genutzt werden können.

Prof. Dr. Detlef Krömker46 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Überladen von Operatoren

‣ Klassen fangen eingebaute Operatoren ab und implementieren sie, indem sie Methoden mit speziellen Namen definieren, die mit zweiUnterstrichen beginnen und enden. Diese Namen werden von Oberklassen normal ererbt.

‣ Pro Operation wird genau eine Methode ausgeführt, sofern sie in der Suchhierarchie (siehe Namenskonventionen) gefunden wird, sonst tritt eine NameError auf.

‣ Python ruft also „automatisch“ die überladene Methode einer Klasse auf

‣ Wenn eine Klasse zum Beispiel die Methode namens __add__(self,other) definiert und a eine Instanz dieser Klasse ist, so ist a + other äquivalent zu a.add(other).

Page 24: Modul: Programmierung B-PRG Grundlagen der Programmierung … · 2006-11-17 · 4 7 Programmieren 1 – Teil 1 –V9 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit WS 2005/2006

24

Prof. Dr. Detlef Krömker47 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Introspektion

Python stellt viele eingebaute Funktionen bereit, siehe Skript und Dokumentation.

Prof. Dr. Detlef Krömker48 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Zusammenfassung der Namenskonventionen (1)

(1) Namen, die mit zwei Unterstrichen beginnen und enden (zum Beispiel _ _init_ _), haben eine besondere Bedeutung für den Interpreter: Klassen fangen eingebaute Operationen ab und implementieren dieses auf ihre Art (Überladen die Methode), indem sie Methoden mit zwei Unterstrichen beginnen und enden lassen, die sie von ihrer Oberklasse geerbt haben.

(2) Namen, die mit einem Unterstrich beginnen, (z.B. _A) und denen auf oberster Ebene eines Moduls zugewiesen wird, werden bei frommodule import * nicht sichtbar. (Pseudo private Attribute)

(3) Namen in einer class-Anweisung, die mit zwei Unterstrichen beginnen, aber nicht damit enden, z.B. _ _A, wird der Name der Klasse vorangestellt (Pseudo private Attribute)

Page 25: Modul: Programmierung B-PRG Grundlagen der Programmierung … · 2006-11-17 · 4 7 Programmieren 1 – Teil 1 –V9 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit WS 2005/2006

25

Prof. Dr. Detlef Krömker49 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Zusammenfassung der Namenskonventionen (2)

(4) Klassennamen beginnen normalerweise mit einem großen Buchstaben, z.B. MeineKlasse (Camel Casing)

(5) Der erste (am weitesten links stehende) Parameter der Methodendefinition innerhalb von Klassen wird normalerweise selfgenannt.

(6) Qualifizierte Namen werden als Attribute bezeichnet und unterliegen den Regeln für Objekt-Namensräumen. Zuweisungen in bestimmten lexikalischen Geltungsbereichen (beziehen sich auf die Schachtelung im Quellcode eines Programmes) initialisieren Objekt-Namensräume (Module, Klassen).

Prof. Dr. Detlef Krömker50 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Zusammenfassung der Namenskonventionen (3)

Unqualifizierte Namen unterliegen auch lexikalischen Gültigkeitsregeln. Zuweisungen binden solche Namen an den lokalen Gültigkeitsbereich, es sei denn, sie sind als global deklariert.

wie lokal modul __main__ Skript, interaktiver Modus

umgebendes Modul class-AnweisungKlasse

umgebendes Modul Funktionsaufruf Funktion, Methode

wie kokal, das Modul selbst

das Modul selbst Modul

Globaler BereichLokaler BereichKontext

Page 26: Modul: Programmierung B-PRG Grundlagen der Programmierung … · 2006-11-17 · 4 7 Programmieren 1 – Teil 1 –V9 Prof. Dr. Detlef Krömker Hier wird Wissen Wirklichkeit WS 2005/2006

26

Prof. Dr. Detlef Krömker51 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Fragen und (hoffentlich) Antworten

Prof. Dr. Detlef Krömker52 Hier wird Wissen WirklichkeitProgrammieren 1 – Teil 1 – V9WS 2005/2006

Ausblick

Graphen und Bäume ... „Brot und Butter“ Datenstrukturenund deren Implementierung

und zum Abschluss (nächsten Freitag):

noch einige Specials (kurz):

‣ Bibliotheken‣ Ein- und Ausgabe‣ exceptions‣ event-based programming

und der Abschluss des Teils 1

Danke für Ihre Aufmerksamkeit!