====== UML-Klassendiagramm ====== Häufig stellt man fest, dass es Objekte gibt, die sich in ihren Eigenschaften oder Verhalten (Attributen oder Methoden) ähneln. Diese Gemeinsamkeiten werden in Klassen zusammengefasst. Neben Eigenschaften bzw. Attributen habe Klassen Methoden, die aufgerufen werden können und ihr Verhalten bestimmen. Alle Objekte einer Klasse haben den gleichen Aufbau und verhalten sich ähnlich. Man kann sie übersichtlich in [[wpde>Klassendiagramm|Klassendiagrammen]] darstellen. Details stehen in //UML 2.0 Pocket-Reference// im Abschnitt »Class Diagrams« und in der //UML-Notationsübersicht//. ===== Aufbau und Zweck ===== | Person | | - name: string \\ - alter: int | | + erfrage_Name(): string \\ + erfrage_Alter(): int \\ + alter_Festlegen(neuesAlter: int): void \\ + laufen(): void \\ + essen(nahrungsMittel: Nahrung): void | * Warum? Um Übersicht über ein komplexes Programm zu erhalten. * Für jede Klasse wird ein Kasten gezeichnet. * Der Kasten hat drei Bereiche: - oben steht der Klassenname - in der Mitte stehen die Attribute - unten stehen die Methoden * Rückgabewerte von Methoden und Datentypen von Attributen und Parametern stehen am Ende und sind durch einen Doppelpunkt getrennt. * Sichtbarkeiten public/private/protected werden durch +/-/# abgekürzt. * Beziehungen zwischen Klassen lassen sich darstellen: "besteht aus", "erbt von" ===== Umsetzung in Quelltext ===== Programmiersprachen realisieren Klassen auf unterschiedliche Arten, die sich häufig jedoch in weiten Teilen ähneln. ==== Klassen in Python ==== Klassen werden in Python mit dem Schlüsselwort ''class'' beschrieben. Attribute werden im Konstruktor ''__init__(self)'' mit ''self'' an die erzeugte Instanz gebunden. [[edu:Methoden]] haben einen Namen (häufig ein Verb), ggf. Parameter und ggf. einen Rückgabewert. **Achtung:** Jede Methode hat als ersten Parameter das Attribut ''self''. Beim Aufruf der Methode wird dieser jedoch nicht angegeben. class Person: def __init__(self): self.name = "" self.alter = 0 def erfrage_Name(self): return self.name def erfrage_Alter(self): return self.alter def alter_festlegen(self, neues_Alter): self.alter = neues_Alter def laufen(): # ... pass def essen(self, nahrungsMittel): nahrungsmittel.aufessen() # Sobald die Klasse deklariert ist, können Objekte erzeugt # und die Methoden und Attribute verwendet werden. peter = Person() peter.name = "Peter" print(peter.erfrage_Name()) # "Peter" peter.alter_festlegen(18) print(peter.erfrage_Alter()) # 18 //Kapitel 8: Objektorientierte Programmierung// in dem Buch //Raspberry Pi programmieren mit Python// beschreibt, wie die Objekt-Orientierte Programmierung in [[Python]] realisiert wurde. Weitere Details stehen in //Python Crashkurs// Kapitel 9: //Classes/Klassen//. In Python können auch Typen mit sogenannten [[https://sw101.tbs1.de/typen/|type hints]] angegeben werden. ==== Klassen in C# ==== → [[Klassen in C-Sharp]] ===== Klassendiagramme für Python ===== Verschiedene IDEs wie etwa [[python#entwicklungsumgebungen_ides|PyCharm]] ermöglichen es, Klassendiagramme direkt aus dem Quelltext generieren zu lassen. Für Dokumentationszwecke ist das sinnvoll, für die Planung hingegen nicht, da zu diesem Zeitpunkt ja noch kein Quelltext existiert. **Achtung!** Klassendiagramme, die von IDEs generiert werden, sind häufig nicht standardkonform, sondern bilden spezifische Besonderheiten der Programmiersprache ab. Mit dem Programm ''pyreverse'' können Klassendiagramm aus Python-Quelltext automatisch erstellt werden. Es ist Bestandteil des größeren Paketes [[https://www.pylint.org/|Pylint]], das den Quelltext analysieren und auf Fehler hinweisen kann. Ein Klassendiagramm wird mit dem folgenden Aufruf erstellt pyreverse -o png -f ALL quelltext.py Die Option ''-o'' gibt das Ausgabeformat und ''-f'' einen Filter an (ALL zeigt alle Zugriffsebenen: //private, public// und //protected//). Leider ermittelt das Programm keine Rückgabewerte und zeigt auch keine Parameter von Methoden an. ===== Klassendiagramme in IHK-Prüfungen ===== Klassendiagramme kommen häufig in IHK-Prüfungen vor. So z.B. in //2015, Winter, Handlungsschritt 2//.