Grundlegende Konzepte von UML

In dieser interaktiven Lerneinheit erschließt du dir die fundamentalen Konzepte der UML-Modellierung und lernst die verschiedenen Sichtweisen auf Softwaresysteme kennen. Du verstehst die Bedeutung der wichtigsten UML-Diagrammtypen und deren Einsatzzwecke in der Softwareentwicklung. Diese Grundlagen befähigen dich, Softwaresysteme systematisch zu analysieren und deine Entwürfe professionell zu dokumentieren.

Einführung

Objektorientierung spielt eine zentrale Rolle in der Softwareentwicklung – doch ohne eine klare Darstellung kann es schnell unübersichtlich werden. UML hilft dabei, Klassen, Objekte und ihre Beziehungen zu strukturieren und verständlich zu visualisieren. Sie macht sichtbar, wie Komponenten eines Systems zusammenarbeiten, und schafft eine gemeinsame Grundlage für Entwicklerteams.

Aber wie genau unterstützt UML die Objektorientierung, und welche Konzepte sind essenziell, um die Diagramme richtig zu verstehen?

Lernziele

Nach dieser Lerneinheit kannst du:

  1. Die Grundlagen der Objektorientierung (Klassen, Objekte, Attribute, Methoden) erklären.
  2. Verstehen, wie UML-Konzepte wie Abstraktion, Kapselung und Polymorphie in der Modellierung helfen.
  3. Die gängigen Beziehungsarten in UML (Vererbung, Assoziation, Aggregation, Komposition, Abhängigkeit, Realisierung) unterscheiden und korrekt notieren.

Überleitung

Alle diese Konzepte – von Klassen und abstrakten Klassen über Schnittstellen bis hin zu Vererbung und Komposition – ergeben zusammen die Grundlage der objektorientierten Modellierung. Im nächsten Schritt betrachten wir, wie UML diese Beziehungen grafisch abbildet und wie du damit komplexe Softwarestrukturen anschaulich darstellen kannst.

Was ist Objektorientierung?

Was ist Objektorientierung?

Die Objektorientierung ist ein Programmierparadigma, das darauf abzielt, reale Weltobjekte in der Software zu modellieren. Ein Objekt ist eine Instanz einer Klasse. Klassen definieren die Struktur und das Verhalten von Objekten durch Attribute (Daten) und Methoden (Funktionen). Dieses Konzept hilft Entwicklern, komplexe Systeme in kleinere, verständliche Teile zu zerlegen.

Beispiel: Auto

Die Klasse Auto hat Attribute wie Farbe, Marke und PS, sowie Methoden wie fahren() und bremsen().

Ein Objekt wäre ein spezifisches Auto, zum Beispiel ein roter VW Golf.

Was bedeutet Abstraktion in UML?

Abstraktion ist ein fundamentales Konzept der Objektorientierung. Es bedeutet, dass nur die wesentlichen Eigenschaften eines Objekts betrachtet werden, während unwichtige Details ausgeblendet werden. UML hilft, komplexe Systeme durch Abstraktion zu vereinfachen, indem nur die relevanten Elemente dargestellt werden.

Darstellung von Abstraktion in UML

  • Abstrakte Klassen werden oft kursiv geschrieben oder mit dem Stereotyp <<abstract>> gekennzeichnet.
  • Abstrakte Klassen wie Fahrzeug repräsentieren allgemeine Konzepte und werden nicht direkt instanziiert, sondern durch spezialisierte Klassen wie Lkw, Pkw oder Motorrad konkretisiert.
  • Interfaces bieten eine ähnliche Möglichkeit, Abstraktionen darzustellen, indem sie nur Methoden deklarieren, die konkrete Klassen später implementieren müssen.

Beispiel: Verkehrssystem

In einem Verkehrssystem kann die Klasse Fahrzeug als Abstraktion verwendet werden. Anstatt jede technische Spezifikation zu beachten, werden nur die gemeinsamen Eigenschaften wie Antrieb, Geschwindigkeit und Kapazität dargestellt. Die spezifischen Implementierungen wie Lkw, Pkw und Motorrad sind konkrete Fahrzeugtypen, die zusätzliche Details enthalten, aber im System nur als allgemeine Fahrzeuge behandelt werden.

Was ist eine Schnittstelle (Interface) ?

Eine Schnittstelle (englisch: Interface) definiert einen Vertrag, der festlegt, welche Methoden eine Klasse implementieren muss, ohne die konkrete Implementierung dieser Methoden vorzugeben. Schnittstellen ermöglichen es, gemeinsame Funktionalitäten verschiedener Klassen zu spezifizieren, unabhängig von deren konkreten Implementierungen.

Darstellung einer Schnittstelle in UML

  • Eine Schnittstelle wird in UML durch ein Rechteck mit dem Stereotyp <<interface>> oben im Rechteck dargestellt.
  • Methoden werden in der Schnittstelle ohne Implementierung (also ohne Rumpf) aufgelistet.
  • Die Beziehung zwischen einer Klasse und einer Schnittstelle wird durch eine gestrichelte Linie mit einem offenen Dreieck von der Klasse zur Schnittstelle dargestellt.

Beispiel: Gerät

Angenommen, wir haben eine Schnittstelle Gerät, die die Methode anschalten() definiert.

Verschiedene Klassen, wie beispielsweise die Klasse Fernseher, können diese Schnittstelle implementieren, um die Methode anschalten() bereitzustellen.

Unterschiede zwischen abstrakten Klassen und Schnittstellen

Abstrakte Klassen:

  • Können sowohl abstrakte (ohne Implementierung) als auch konkrete Methoden (mit Implementierung) enthalten.
  • Dienen als Basisklassen, von denen andere Klassen erben.
  • Können Zustände (Attribute) definieren.
  • Eine Klasse kann in der Regel nur von einer abstrakten Klasse erben.

Schnittstellen:

  • Enthalten nur Methodensignaturen (keine Implementierungen) und keine Zustände.
  • Definieren einen Vertrag, den implementierende Klassen einhalten müssen.
  • Ermöglichen eine flexible Architektur, da eine Klasse mehrere Schnittstellen implementieren kann.

Kapselung

Was bedeutet Kapselung?

Die Kapselung ist ein Prinzip der Objektorientierung, das die Daten einer Klasse schützt, indem es den Zugriff darauf kontrolliert. Attribute einer Klasse werden oft als privat deklariert und können nur über öffentliche Methoden (Getter und Setter) verändert oder ausgelesen werden.

Kapselung und Datenabstraktion

Die Kapselung von Daten und Methoden innerhalb von Klassen schützt die internen Zustände eines Objekts vor unbefugtem Zugriff. Durch wohldefinierte Schnittstellen wird die Komplexität reduziert und die Sicherheit erhöht. Datenabstraktion ermöglicht es, nur die relevanten Eigenschaften eines Objekts nach außen sichtbar zu machen, während unwichtige Details verborgen bleiben.

UML unterstützt die Modellierung von Klassen mit unterschiedlichen Sichtbarkeitsebenen:

  • Öffentlich (+): Elemente sind für alle sichtbar.
  • Geschützt (#): Elemente sind für die Klasse selbst und ihre Unterklassen sichtbar.
  • Privat (-): Elemente sind nur innerhalb der Klasse sichtbar.

Beispiel: Bankkonto

  • Private Attribute: - kontonummer, - kontostand
  • Öffentliche Methoden: + einzahlen(), + abheben(), + getKontostand()

In diesem Beispiel sind die sensiblen Daten des Bankkontos gekapselt und können nur über die öffentlichen Methoden manipuliert oder abgefragt werden.

Polymorphie und dynamisches Binden

Polymorphie ermöglicht es, Objekte verschiedener Klassen einheitlich zu behandeln, sofern sie eine gemeinsame Schnittstelle implementieren oder von einer gemeinsamen Oberklasse erben.

Dynamisches Binden bedeutet, dass zur Laufzeit entschieden wird, welche konkrete Implementierung einer Methode aufgerufen wird.

Beispiel: Tiere

Polymorphie in Aktion:

Objekte vom Typ Tier können zur Laufzeit entweder ein Hund oder eine Katze sein. Polymorphie ermöglicht es, dass beide Klassen über die gemeinsame Schnittstelle der Oberklasse Tier angesprochen werden, auch wenn sie unterschiedliche Implementierungen der Methode +geraeuschMachen() haben.

Tier meinTier = new Hund(); // Oder new Katze()
meinTier.geraeuschMachen(); // Führt die Methode des jeweiligen Tieres aus

Dynamisches Binden

Das dynamische Binden stellt sicher, dass das Programm zur Laufzeit entscheidet, welche Implementierung von +geraeuschMachen() ausgeführt wird, basierend auf dem tatsächlichen Typ des Objekts (Hund oder Katze), obwohl das Objekt als Tier deklariert wurde.

⏳ Lädt Dataview-Inhalt...

Die Hauptbeziehungen in UML

In UML gibt es sechs Hauptbeziehungen zwischen Klassen. Diese beschreiben, wie Klassen miteinander interagieren oder voneinander abhängen:

  1. Vererbung (Generalisierung)
  2. Assoziation
  3. Aggregation
  4. Komposition
  5. Abhängigkeit
  6. Realisierung

Die Vererbung (Generalisierung)

Die Vererbung, auch Generalisierung genannt, beschreibt eine „ist ein“-Beziehung zwischen einer Oberklasse und einer Unterklasse. Die Unterklasse erbt alle Attribute und Methoden der Oberklasse.

Beispiele zur Vererbung

  • Ein Papagei ist ein Vogel, der wiederum ein Tier ist.
  • Ein Laptop ist ein Computer, der ein elektronisches Gerät ist.

Notation:

Eine durchgezogene Linie mit einer offenen Pfeilspitze, die von der Unterklasse zur Oberklasse zeigt.

Die Assoziation

Eine Assoziation zeigt eine allgemeine Verbindung zwischen zwei Klassen. Sie beschreibt eine Beziehung, in der Objekte miteinander interagieren, ohne voneinander abhängig zu sein.

Beispiele zur Assoziation

  • Ein Student nimmt an Kursen teil.
  • Ein Arzt behandelt Patienten.
  • Ein Buch hat einen Autor.

Notation:

Eine durchgezogene Linie zwischen den Klassen.

Was ist die Abhängigkeit?

Eine Abhängigkeit zeigt eine schwache, temporäre Beziehung zwischen zwei Klassen. Eine Klasse verwendet die Funktionalität der anderen Klasse, ohne dauerhaft mit ihr verbunden zu sein.

Beispiele zur Abhängigkeit

  • Eine App nutzt eine Datenbank, um Daten zu speichern.
  • Eine Textverarbeitungsanwendung verwendet eine Druckfunktion, um Dokumente zu drucken.

Notation:

Eine gestrichelte Linie mit einer offenen Pfeilspitze von der abhängigen Klasse zur genutzten Klasse.

Die Realisierung

Die Realisierung beschreibt eine Beziehung zwischen einer Schnittstelle und der Klasse, die diese Schnittstelle implementiert. Die Klasse verpflichtet sich, alle Methoden der Schnittstelle zu definieren.

Beispiel zur Realisierung

  • Eine Klasse Fernseher implementiert die Schnittstelle Gerät und definiert die Methode anschalten().
  • Eine Klasse Auto implementiert die Schnittstelle Fahrzeug und definiert die Methode fahren().

Notation:

Eine gestrichelte Linie mit einem geschlossenen Dreieck von der Klasse zur Schnittstelle.

Die Aggregation

Die Aggregation ist eine spezielle Form der Assoziation. Sie zeigt eine „hat“-Beziehung an, bei der das Teil auch unabhängig vom Ganzen existieren kann. Diese Beziehung ist schwächer als die Komposition.

Beispiele zur Aggregation

  • Ein Team hat Spieler, die auch in anderen Teams spielen könnten.
  • Eine Bibliothek hat Bücher, die auch unabhängig existieren könnten.
  • Ein Garten hat Pflanzenarten, die auch woanders existieren können.

Notation:

Eine durchgezogene Linie mit einer leeren Raute an der Seite des Ganzen.

Die Komposition

Die Komposition ist eine stärkere Form der Assoziation. Sie zeigt an, dass das Teil ohne das Ganze nicht existieren kann. Das Teil hat keine eigenständige Lebensdauer.

Beispiele zur Komposition

  • Eine Firma hat Abteilungen, die ohne die Firma nicht existieren.
  • Ein Haus hat Zimmer, die ohne das Haus nicht existieren können.

Notation:

Eine durchgezogene Linie mit einer gefüllten Raute an der Seite des Ganzen.

⏳ Lädt Dataview-Inhalt...

Zusammenfassung und Ausblick

Zusammenfassung:

Die Objektorientierung teilt Software in Klassen und Objekte ein. Eine Klasse definiert Attribute (Daten) und Methoden (Funktionen), während ein Objekt eine konkrete Instanz dieser Klasse ist. Mithilfe von Abstraktion reduzierst du Systeme auf ihre wesentlichen Eigenschaften, statt in Details zu versinken. So kannst du grundlegende Gemeinsamkeiten in abstrakten Klassen oder Interfaces festhalten, während spezialisierte Klassen nur die für sie relevanten Informationen enthalten.

Kapselung sorgt dafür, dass wichtige Daten innerhalb einer Klasse verborgen bleiben und nur über definierte Methoden (öffentliche Schnittstellen) zugänglich sind. Das erhöht die Sicherheit und Wartbarkeit deines Codes. Polymorphie ermöglicht es, dass ein Objekt zur Laufzeit unterschiedliche Formen annehmen kann. So kann etwa eine Oberklasse Tier verschiedene konkrete Unterklassen wie Hund oder Katze haben, die dieselbe Methode unterschiedlich implementieren.

UML stellt diese Zusammenhänge in verschiedenen Diagrammen und durch bestimmte Notationen dar. Beziehungen wie Vererbung (Generalisierung), Assoziation, Aggregation, Komposition, Abhängigkeit und Realisierung beschreiben, wie Klassen miteinander interagieren oder voneinander abhängen. Dadurch kannst du auf einen Blick sehen, welche Komponenten zusammengehören, welche Teile untrennbar miteinander verknüpft sind und wo eine Klasse lediglich zeitweise eine andere nutzt.

Insgesamt bieten dir objektorientierte Prinzipien und UML zusammen ein klares Gerüst, um selbst große Softwareprojekte übersichtlich zu modellieren. Diese Kombination erleichtert die Planung, Kommunikation im Team und spätere Anpassungen.

Ausblick:

Da du die Grundlagen der Objektorientierung und ihre UML-Darstellung kennst, richten wir in der nächsten Lerneinheit den Fokus auf Anwendungsfalldiagramme. Sie zeigen, welche Nutzer oder externen Systeme mit deiner Anwendung interagieren und welche Funktionen sie nutzen. Damit bekommst du einen Überblick über die erforderlichen Use-Cases und kannst die Anforderungen an dein System präzise festhalten, bevor du dich an die technische Umsetzung machst.