Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| modul:archiv:m320:learningunits:lu99:theorie:lu8-kapitel_2 [2026/08/30 14:06] – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | modul:archiv:m320:learningunits:lu99:theorie:lu8-kapitel_2 [2026/08/30 14:09] (aktuell) – ↷ Links angepasst, weil Seiten im Wiki verschoben wurden 74.7.243.195 | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ==== 1. Abstrakte Basisklassen ==== | ||
| + | Eine abstrakte Klasse kann als Blaupause für andere Klassen betrachtet werden. Sie ermöglicht es, eine Reihe von Methoden zu erstellen, die **in allen untergeordneten Klassen implementiert werden müssen** (<color # | ||
| + | Wenn eine gemeinsame Schnittstelle für verschiedene Implementierungen einer Komponente bereitgestellt werden soll, verwenden wir eine abstrakte Klasse.\\ | ||
| + | In der UML wird eine abstrakte Klasse durch '' | ||
| + | |||
| + | ---- | ||
| + | //Beispiel 7.1:// Übergeordneter Begriff '' | ||
| + | {{modul: | ||
| + | //Abb 7.1: UML-Diagramm mit abstrakter Klasse//\\ | ||
| + | Die Klasse '' | ||
| + | Die Methode '' | ||
| + | |||
| + | ---- | ||
| + | |||
| + | |||
| + | === Wozu abstrakte Basisklassen verwenden? === | ||
| + | |||
| + | Indem eine abstrakte Basisklasse definiert wird, können gemeinsame Anwendungsprogrammschnittstelle (API) für eine Reihe von Unterklassen definiert werden. Diese Funktion ist besonders nützlich in Situationen, | ||
| + | |||
| + | === Wie funktionieren abstrakte Basisklassen in Python? === | ||
| + | |||
| + | Standardmässig stellt Python keine abstrakten Klassen bereit. Python wird mit einem Modul '' | ||
| + | |||
| + | ---- | ||
| + | //Beisiel 7.2:// Abstrakte Klasse für Vielecke (Polygon)\\ | ||
| + | <file python> | ||
| + | from abc import ABC, abstractmethod | ||
| + | | ||
| + | class Polygon(ABC): | ||
| + | """ | ||
| + | Ein unbestimmtes Polygon, das | ||
| + | a) weiss, dass es eine gewisse Anzahl Seiten hat | ||
| + | b) aber nicht weiss, wie viele es wirklich sind. | ||
| + | """ | ||
| + | @abstractmethod | ||
| + | def __init__(self): | ||
| + | """ | ||
| + | Konstruktor: | ||
| + | """ | ||
| + | pass | ||
| + | | ||
| + | | ||
| + | @abstractmethod | ||
| + | def my_sides(self): | ||
| + | """ | ||
| + | Abstrakte Methode ohne Implementierung. Diese muss | ||
| + | zwingend in einer abgeleiteten Klasse erfolgen. | ||
| + | """ | ||
| + | pass | ||
| + | | ||
| + | class Triangle(Polygon): | ||
| + | # overriding abstract method | ||
| + | def my_sides(self): | ||
| + | print(' | ||
| + | | ||
| + | class Quadrilateral(Polygon): | ||
| + | # overriding abstract method | ||
| + | def my_sides(self): | ||
| + | print(' | ||
| + | | ||
| + | | ||
| + | if __name__ == ' | ||
| + | polygons = [ | ||
| + | Triangle(), | ||
| + | Quadrilateral(), | ||
| + | ] | ||
| + | for p in polygons: | ||
| + | p.my_sides() | ||
| + | </ | ||
| + | |||
| + | Output: | ||
| + | < | ||
| + | I have 3 sides | ||
| + | I have 4 sides | ||
| + | </ | ||
| + | Beachten Sie hier die Nutzung der Polymorphie, | ||
| + | |||
| + | ---- | ||
| + | [[https:// | ||