Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| modul:m320_2024:learningunits:lu11:abstrakte_basisklasse [2024/10/22 07:56] – angelegt msuter | modul:m320_2024:learningunits:lu11:abstrakte_basisklasse [2024/10/22 11:03] (aktuell) – msuter | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | ==== 1. Abstrakte Basisklassen ==== | + | ====== LU11a - 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 # | + | <WRAP center round tip 60%> |
| - | Wenn eine gemeinsame Schnittstelle für verschiedene Implementierungen einer Komponente bereitgestellt werden soll, verwenden wir eine abstrakte Klasse.\\ | + | 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 # |
| - | In der UML wird eine abstrakte Klasse durch '' | + | </ |
| + | |||
| + | ===== Was ist eine abstrakte Klasse ===== | ||
| + | |||
| + | Eine Klasse, die eine oder mehrere abstrakte Methoden enthält, wird als abstrakte Klasse bezeichnet. | ||
| + | Eine abstrakte Methode ist eine Methode, die eine Deklaration, | ||
| + | |||
| + | 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: Übergeordneter Begriff '' | ||
| - | ---- | ||
| - | //Beispiel 7.1:// Übergeordneter Begriff '' | ||
| {{: | {{: | ||
| - | //Abb 7.1: UML-Diagramm mit abstrakter Klasse//\\ | ||
| - | Die Klasse '' | ||
| - | Die Methode '' | ||
| - | ---- | + | //Abb: UML-Diagramm mit abstrakter Klasse// |
| + | Die Klasse '' | ||
| + | Es bedingt immer eine konkrete Ableitung (hier '' | ||
| + | Die Methode '' | ||
| - | === Wozu abstrakte Basisklassen verwenden? === | ||
| - | Indem eine abstrakte | + | ===== Wozu abstrakte |
| - | === Wie funktionieren abstrakte Basisklassen in Python? === | ||
| - | Standardmässig stellt Python keine abstrakten Klassen bereit. Python | + | Indem eine abstrakte Basisklasse definiert |
| + | Diese Funktion ist besonders nützlich in Situationen, in denen ein Drittanbieter | ||
| + | Eine Situation in der es schwierig oder gar nicht möglich ist, alle Klassen im Kopf zu behalten. | ||
| - | ---- | ||
| - | //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:// | [[https:// | ||