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:// |